实验三语法分析的C语言实现
实验三 语法分析的C语言实现
实验目的
二、实验
1、?
2、对语法规则有明确的定义;
3、编写的分析程序能够对实验一的结果进行正确的语法分析;
4、对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;
三、实验指导(一)准备
1.阅读课本有关章节,。
2.初步编制程序。
3.准备组测试数据。
()程序要求
程序输入/输出示例:
输入如下一段C语言源程序:+2*(5.5-5)
输出4.0。
2. 建议:实验一的词法分析结果保存到文件input.c,实验二直接从input.c读取一个token,将用到的文法规则输出并保存到文件output.c。(注:NUM由词法分析器返回)
3.可选功能:可以根据自身的情况完善语法分析程序的错误处理功能,如对遇到的语法错误给出准确的位置和错误类型提示。
三、实验指导(一)准备
1.阅读课本有关章节,明确语言的语法。
2.初步编制程序。
3.准备组测试数据。
()程序要求
程序输入/输出示例:
输入如下一段C语言源程序(if语句或者while语句,或者都实现):main()
{
a = 10*(b+2);
if (a>b) a=b else a=c;
while (a!=0) a=3+21*a;
}
输出三、实验指导(一)准备
1.阅读课本有关章节,明确语言的语法。
2.初步编制程序。
3.准备组测试数据。
()程序要求
程序输入/输出示例:
输入如下一段C语言源程序(if语句或者while语句,或者都实现):main()
{
a = 10*(b+2);
if (a>b) a=b else a=c;
while (a!=0) a=3+21*a;
}
输出main()
{
a = 10*(b+2);
}
可参考的文法如下:
0. program ( main() { expression_stmt }
1. expression_stmt ( expression ; | ;
表达式语句有一个可选的且后面跟着分号的表达式。这样的表达式通常求出它们一方的结果。因此,这个语句用于赋值和函数调用。2. expression( var = expression | simple-expression
3. var ( ID | ID [ expression ]
表达式是一个变量引用,后面跟着赋值符号(等号)和一个表达式,或者就是一个简单的表达式。赋值语义:找到由变量var的地址,然后赋值符右边的子表达式进行求值,子表达式的值存储到给定的地址。这个值也作为整个表达式的值返回。var是简单的整型变量或下标数组变量。下标不进行下标越界检查。var ( ID;根据实际情况实现var ( ID [ expression ]数组变量的识别。
4. simple-expression ( additive-expression relop additive-expression | additive-expression
5. relop ( <= | < | > | >= | == |!=
6. additive-expression ( additive-expression addop term | term
7. addop ( + | -
8. term ( term mulop factor | factor
9. mulop ( * | /
加法表达式和项表示了算术操作符的结合性和优先级。0. factor ( ( expression ) | var | NUM
因子是围在括号内的表达式;或一个变量,求出其变量的值;或者一个函数调用,求出函数的返回值;或者一个NUM,其值由器。main()
{
if (a>b) a=b else a=c;
}
可参考的文法如下:
0. program ( main() { if_stmt }
1. if_stmt( if ( expression ) statement | if ( expression ) statement else statement
条件语句有通常的语义:表达式进行计算非0值引起第一条语句的执行;0值引起第二条语句的执行,如果它存在的话。这规则典型的“else”二义性,可以用一种“最近嵌套”义性。if_stmt( if ( expression ) statement else statement;根据自身情况如果要实现不带else的语句。
2. statement ( expression ; | ;
3. expression( var = expression | simple-expression
4. var ( ID | ID [ expression ]