实验三 语法分析C语言实验报告Word格式文档下载.docx
- 文档编号:3722257
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:12
- 大小:41.20KB
实验三 语法分析C语言实验报告Word格式文档下载.docx
《实验三 语法分析C语言实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验三 语法分析C语言实验报告Word格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。
}
2.程序输出示例
运行语法分析器程序,有输出窗口直接显示运行结果:
4、说明:
编译环境说明:
Windows下的VisualC++
文法说明:
0.programmain(){if_stmt}
1.if_stmtif(expression)statement|if(expression)statementelsestatement
条件语句有通常的语义:
对表达式进行计算,非0值表示条件为真,引起第一条语句的执行;
0值表示条件为假,引起第二条语句的执行,如果它存在的话。
这条规则存在典型的“danglingelse”二义性,可以用一种“最近嵌套”原则解决二义性。
建议:
可实现if_stmtif(expression)statementelsestatement;
根据自身情况如果要实现不带else的语句。
2.statementexpression;
|;
3.expressionvar=expression|simple-expression
4.varID|ID[expression]
表达式是一个变量引用,后面跟着赋值符号(等号)和一个表达式,或者就是一个简单的表达式。
赋值的语义为:
首先找到由变量var的地址,然后对赋值符右边的子表达式进行求值,再将子表达式的值存储到给定的地址。
这个值也作为整个表达式的值返回。
var是简单的整型变量或下标数组变量。
需要检查下标值为非负,但不进行下标越界检查。
可实现varID;
根据实际情况实现varID[expression]数组变量的识别。
5.simple-expressionadditive-expressionrelopadditive-expression|additive-expression
6.relop<
=|<
|>
=|==|!
=
7.additive-expressionadditive-expressionaddopterm|term
8.addop+|-
9.termtermmulopfactor|factor
10.mulop*|/
加法表达式和项表示了算术操作符的结合性和优先级。
11.factor(expression)|var|NUM
因子是围在括号内的表达式;
或一个变量,求出其变量的值;
或者一个函数调用,求出函数的返回值;
或者一个NUM,其值由词法分析器确定。
其他说明:
递归下降要求消除左递归和回溯。
五、源程序
#include<
stdio.h>
string.h>
FILE*fp;
//文件指针
chartoken[100];
//定义token长度
inti;
char*current=NULL;
//当前值为null
charcharacter;
voidmatch(char*t);
voidgetString();
voiderror();
voidprograme();
voidexpression();
voidexpression_stmt();
voidsimple_expression();
voidrelop();
voidadditive_expression();
voidT();
voidterm();
voidfactor();
voidE();
voidG();
intmain(void)
{
fp=fopen("
input.c"
"
r"
);
getString();
programe();
return0;
voidmatch(char*t)
{
if(strcmp(t,current)==0)
getString();
//如果匹配获取该character
}
else
{
error();
//如果匹配失败打印出出错信息
exit();
voidgetString()
token[0]='
\0'
;
i=0;
character=fgetc(fp);
//从input文件读取character
if(!
feof(fp))
while
(1)
{
token[i]=character;
i++;
token[i]='
character=fgetc(fp);
if(character=='
'
)
break;
}
else
fclose(fp);
//读取失败,关闭文件
current=token;
//printf("
当前取到current+%s\n"
current);
voiderror(inti)
printf("
error\n"
//打印出出错信息
voidprograme()
if(strcmp("
main"
current)==0)
match("
("
)"
{"
expression_stmt();
//开始识别赋值语句
if(strcmp("
}"
current)==0)//结束语义分析
program->
main(){expression_stmt}\n"
//打印出结束语句
voidexpression_stmt()
//printf("
转到expression_stmt()\n"
"
printf("
expression_stmt->
\n"
expression();
expression;
}
voidexpression()
转到expression()\n"
ID"
match(current);
//6+NUM...
expression->
ID\n"
//printf("
factor->
(expression)|ID\n"
elseif(strcmp("
="
simple_expression();
//NUM*(ID+NUM+NUM);
=\n"
//7
simple-expression\n"
voidsimple_expression()
转到simple_expression()\n"
additive_expression();
//NUM*(ID/+NUM+NUM);
G();
voidG()
转到G()\n"
<
additive_expression();
simple-expressionadditive-expressionrelop\n"
printf("
>
!
=="
voidadditive_expression()
转到additive_expression()\n"
term();
T();
//+NUM+NUM);
voidT()
转到T()\n"
+"
term();
addop->
+|-|+\n"
T();
-"
+|-|-\n"
voidterm()
//printf("
转到term()\n"
factor();
//1
E();
//2
voidE()
转到E()\n"
*"
factor();
//3
mulop->
*|/|*\n"
E();
/"
*|/|/\n"
voidfactor()
转到factor()\n"
//4(ID....)
//5
(expression)\n"
NUM"
(expression)|NUM\n"
六、实验总结:
通过本次实验,让我们对YACC有了初步的认识和运用,同时理解到很多语法分析的知识。
了解原来YACC原来比C语言方便很多,同时也要感谢在实验过程中老师的帮忙和指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验三 语法分析C语言实验报告 实验 语法分析 语言 报告