1 / 6
文档名称:

实现实验报告.docx

格式:docx   大小:132KB   页数:6页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实现实验报告.docx

上传人:蓝天 2022/2/27 文件大小:132 KB

下载得到文件列表

实现实验报告.docx

相关文档

文档介绍

文档介绍:《实验四 语法分析的yacc实现》实验报告
题目
语法分析的yacc实现
姓名及 分工
康黎明SWE10029
陈俊杰SWE10031
许冬青SWE10033
王吉 SWE10028
日期
2012-12-20
—、 | >= | == |!=
additive-expression — additive- express ion addop term \ term
addop t + | ■
term T term mulop factor \ factor
mulop —> * | /
加法表达式和项表示了算术操作符的结合性和优先级。
factor T ( expression ) | var | NUM
'因子是围在括号内的表达式;或一个变量,求出其变量的值;或者一个函 数调用,求出函数的返回值;或者一个NUM,其值由词法分析器确定。
其他说明:
实验过程遇到的问题:
1、 .lex部分出现问题.|\n应为分号(;),表示不做任何操作。
2、 delim 为对Tab键做清除跳过操作。
3、 Yacc部分%nonassoc LOWER_THAN_ELSE , %nonassoc ELSE;为消除
歧义作用。
4、 % start programFF始按照写好的文法对Input进行分析,并打印出每一条文法 结果。
五、源程序:
1、Lex代码(读出token)
%(
#include <>
#include <>
extern char* yylval;
int line_counter = 1;
%}
letter [A-Za-z]
digit [0-9]
number (digit ) +
delim [" "\t]+
keyword "main" | "while" | "if" |" else" |" for" | "break" | "continue" | "int" | "char" |" void"
id (letter) ((letter} | (digit}) *
%%
(delim) ;
main ( yylval = strdup(yytext); return MAIN; )
[-+*/(}()=;.,\[\]><] ( return *yytext; )
(id} ( yylval = strdup(yytext); return ID; )
(number} ( yylval = strdup(yytext); return NUM; )
•|\n ;
%%
int yywrap()
{
return 1;
)
2、yacc代码(语义分析)
%(
#include <>
#include <>
#include <>
#include <>
#define YYSTYPE char*
%}
%start program
%token ID NUM LE RE EQ NQ MAIN IF WHILE ELSE
%nonassoc LOWER_THAN_ELSE // 消除歧义
%nonassoc ELSE