- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CMM解释器PPT选编
CMM
解释器
尹晓宁 2013302580003 语义分析
孙宸 2013302580013 中间代码生成,解释执行
杨伟 2013302580017 语法树的生成
词法分析
语法分析
语义分析
中间代码生成,解释执行
测试用例
词法分析
1
可以识别的token
保留字
if,else,while,int,real,read,write
运算符
+、-、*、/、、、=、==、
分隔符
( ),[ ],{ }, ; , // , /* , */
标识符
由数字、字母和下划线组成的串,但必须以字母开头、且不能以下划线结尾的串
常量
整数和小数
分析过程
2
词法分析
语法分析
语义分析
中间代码生成,解释执行
测试用例
语法分析
文法结构
1
程序 =(分程序)*
分程序 = 声明赋值语句 | if语句 | while 语句 | read语句 | write语句
声明赋值语句 = 赋值分语句 | 类型 声明分语句
声明分语句 = (数组变量 | 变量)(“;” | 赋值分语句)
赋值分语句 = 数组赋值 | 变量赋值
数组赋值 = 数组变量 “=” 结果语句 “;”
变量赋值 = 变量 “=” 结果语句 “;”
结果语句 = 运算表达式 | read语句
运算表达式 = 分表达式(算数运算符 分表达式)*
分表达式 = 因子 | “(” 运算表达式 “)”
if语句 = if “(” 布尔表达式 “)” “{”分程序 “}” else “{”分程序 “}”
while语句 = while “(” 布尔表达式 “)” “{”分程序 “}”
read语句 = read “(” 运算表达式 “)”
write语句 = write“(” 运算表达式 “)”
布尔表达式 = 运算表达式 关系运算符 运算表达式
关系运算符 = “ ” | “==” | “”
因子 = int型常量 | real型常量 | 变量 | 数组变量
类型 = int | real
算数运算符 = + | - | * | /
词法分析
语法分析
语义分析
测试用例
中间代码生成,解释执行
语义分析
1
检查类型
每个变量在使用前是否有声明。
赋值语句左右两边类型是否正确。
变量在同一层中是否被声明多次。
read后面的变量是否声明过。
数组下标是否是正整数。
符号表结构
2
Symbol
type
boolean,若变量是int型,为true;否则为false
name
String,存放变量名
isNull
boolean,判断变量是否赋值
arrayLength
int,若该变量为数组,则存放数组长度,否则为-1
height
int,记录变量的层次
SymbolTable
table
ListSymbol,存储已经声明的Symbol。
词法分析
语法分析
语义分析
中间代码生成,解释执行
测试用例
中间代码生成,解释执行
1
解释执行的符号表
Notation/
ArrayNotation
name
String,存放变量名
level
int,记录变量层次
type
boolean,true变量为int型,false为real型
value
String/String[],存放变量值
Legend
vars
ListNotation,存放一般变量
arrays
ListArrayNotation,存放数组变量
clearLevel()
清楚level层的所有变量
setValue()
给level层名为name的变量赋值
getValue()
获取level层名为name的变量
2
操作项
操作数1
操作数2
操作结果
a1+a2
ADD
a1
a2
@1
a1-a2
MINUS
a1
a2
@1
a1*a2
MUL
a1
a2
@1
a1/a2
DIV
a1
a2
@1
a1a2
LESS
a1
a2
BoolVar1
a1==a2
EQUAL
a1
a2
BoolVar1
a1a2
UNEQUAL
a1
a2
BoolVar1
a1=a2
ASSIGN
a2
a1
null
1
CONST_INT
1
null
atTable
1.2
CONST_REAL
1.2
null
atTable
int a1;
NEW
a1
null
atTable
read(a1)
READ
a1
null
null
write(a1)
WRITE
a1
null
null
四元式的结构
操作项
操作数1
操作数2
操作结果
if(){}
else{}
JUMP_AT_BEGIN
IFbegin
ELSEend
BoolVar1
LABLE
IFbegin
null
null
JUMP_AT_END
EL
文档评论(0)