资源描述:
《借助lex和yacc进行词法语法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、借助Lex和Yacc进行词法语法分析一、实验目的:1.通过对实验型程序设计语言C1的定义,掌握程序设计语言的基本语法和语义;2.使用Lex及Yacc实现词法分析和语法分析;二、实验内容:C1文法这里定义了一个编程语言称作C1,这是一种适合编译器设计方案的语言,包括函数和数组。本质上它是C的一个子集,但省去了一些重要的部分,因此得名。C1惯用的词法1.下面是语言的关键字:elseifintreturnvoidwhile所有的关键字都是保留字,并且必须是小写。2.下面是专用符号:+-*/<<=>>===!==;,()[]{}/**/3.其他标记是ID和NUM,
2、通过下列正则表达式定义:ID=letterletter*NUM=digitdigit*letter=a
3、..
4、z
5、A
6、..
7、Zdigit=0
8、..
9、9小写和大写字母是有区别的。4.空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。5.注释用通常的C语言符号/*...*/围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。C1的语法和语义1.program→declaration-list2.declaration-list→declaration-listdeclaration
10、d
11、eclaration3.declaration→var-declaration
12、fun-declaration4.var-declaration→type-specifierID;
13、type-specifierID[NUM];5.type-specifier→int
14、void
15、float6.fun-declaration→type-specifierID(params)compound-stmt7.params→params-list
16、void8.param-list→param-list,param
17、param9.param→type-specifier
18、ID
19、type-specifierID[]10.compound-stmt→{local-declarationsstatement-list}11.local-declarations→local-declarationsvar-declaration
20、empty12.statement-list→statement-liststatement
21、empty13.statement→expression-stmt
22、compound-stmt
23、selection-stmt
24、iteration-stmt
25、return-stmt14.expression-stm
26、t→expression;
27、;15.selection-stmt→if(expression)statement
28、if(expression)statementelsestatement16.iteration-stmt→while(expression)statement17.return-stmt→return;
29、returnexpression;18.expression→var=expression
30、simple-expression19.var→ID
31、ID[expression]20.simple-expression→additive-expr
32、essionrelopadditive-expression
33、additive-expression21.relop→<=
34、<
35、>
36、>=
37、==
38、!=
39、&&
40、
41、
42、22.additive-expression→additive-expressionaddopterm
43、term23.addop→+
44、-24.term→termmulopfactor
45、factor25.mulop→*
46、/26.factor→(expression)
47、var
48、call
49、NUM27.call→ID(args)28.args→arg-list
50、empty29.arg-list→arg-li
51、st,expression
52、expression下面是对以上每条文法规则,给出了相关语义的简短解释。1.program→declaration-list2.declaration-list→declaration-listdeclaration
53、declaration3.declaration→var-declaration
54、fun-declaration程序由声明的列表(或序列)组成,声明可以是函数或变量声明,顺序是任意的。至少必须有一个声明。接下来是语义限制(这些在C中不会出现)。所有的变量和函数在使用前必须声明(这避免了向后backpatching引
55、用)。程序中最后的声明必须是一个函数声明,名字为main。注意,C