tinyscript 笔记

源码

词法分析

判断关键字或变量

在这里插入图片描述

解释:

  • 0 -> 1:识别标识符的开始
  • 1 -> token:识别单字母标识符
  • 1 -> 2:识别标识符的延续
  • 2 -> 2:继续识别标识符
  • 2 -> token:在遇到非标识符字符时完成标识符的识别
  • token -> 关键字:如果标识符在字典中,则分类为关键字
  • token -> 变量:如果标识符不在字典中,则分类为变量

判断字符串

在这里插入图片描述

判断操作符

在这里插入图片描述

判断数值

在这里插入图片描述

合并

在这里插入图片描述

语法分析

利用产生式进行语法分析,将词法单元解析为 AST

生成式类似递归的递推公式

变量的定义与赋值

在这里插入图片描述

if 语句

在这里插入图片描述

function 语句

在这里插入图片描述

语句和块

在这里插入图片描述

数据结构

在这里插入图片描述
调用顺序

在这里插入图片描述

根据 SDD 将 AST 转为三地址代码

利用语法制导定义(SDD,Syntax Directed Definition)将 AST 翻译为三地址代码

四则运算

E -> E + T | T
T -> T * F | F
F -> digit
digit -> 0|1|2|...|9

利用翻译形成代码

在这里插入图片描述

符号表

用于存储符号(变量、常量、标签)在源代码中的位置、数据类型,以及位置信息决定的词法作用域和运行时的相对内存地址。

符号(Symbol)的抽象

  • 常量(Immediate Symbol)
  • 变量(Address Symbol)
  • 标签(Label Symbol)

符号表

class SymbolTable {
    List<Symbol> symbols;
    List<SymbolTable> children;
}

示意图:

在这里插入图片描述

示例

在这里插入图片描述

执行到第一个语句块时栈的情况:

在这里插入图片描述

补充:Tinyscript 程序的内存分布

在这里插入图片描述

三地址代码

三地址指令(TAInstruction)有以下几部分构成:

  • type,类型,比如 if、assign、goto、label、call、return、sp、param
  • result,结果,比如 assign 语句等号左边的值
  • operator,操作符
  • arg1,操作数1
  • arg2,操作数2

示例:

在这里插入图片描述

自顶向下的翻译

在这里插入图片描述

活动记录

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值