flex 实现sysy词法分析
时间: 2023-10-23 14:12:51 浏览: 308
编译原理实验 杭电 源代码 C++
5星 · 资源好评率100%
要使用 Flex 实现 SysY 词法分析,需要按照以下步骤进行:
1. 定义 SysY 语言的关键字和符号:
```
%{
#include <stdio.h>
%}
%%
"if" { printf("IF\n"); }
"else" { printf("ELSE\n"); }
"while" { printf("WHILE\n"); }
"break" { printf("BREAK\n"); }
"continue" { printf("CONTINUE\n"); }
"return" { printf("RETURN\n"); }
"int" { printf("INT\n"); }
"void" { printf("VOID\n"); }
"bool" { printf("BOOL\n"); }
"true" { printf("TRUE\n"); }
"false" { printf("FALSE\n"); }
"main" { printf("MAIN\n"); }
"(" { printf("LPAREN\n"); }
")" { printf("RPAREN\n"); }
"{" { printf("LBRACE\n"); }
"}" { printf("RBRACE\n"); }
";" { printf("SEMICOLON\n"); }
"," { printf("COMMA\n"); }
"+" { printf("PLUS\n"); }
"-" { printf("MINUS\n"); }
"*" { printf("MULTIPLY\n"); }
"/" { printf("DIVIDE\n"); }
"%" { printf("MODULO\n"); }
"<" { printf("LESS\n"); }
">" { printf("GREATER\n"); }
"<=" { printf("LESSEQUAL\n"); }
">=" { printf("GREATEREQUAL\n"); }
"==" { printf("EQUAL\n"); }
"!=" { printf("NOTEQUAL\n"); }
"&&" { printf("AND\n"); }
"||" { printf("OR\n"); }
"!" { printf("NOT\n"); }
"=" { printf("ASSIGN\n"); }
[_a-zA-Z][_a-zA-Z0-9]* { printf("IDENTIFIER\n"); }
[0-9]+ { printf("NUMBER\n"); }
%%
```
2. 编译生成词法分析器:
```
flex sysy.l
gcc lex.yy.c -lfl -o sysy_lex
```
3. 使用词法分析器进行分析:
```
./sysy_lex < input.sysy
```
其中,`input.sysy` 为 SysY 代码文件。执行后,会输出 SysY 代码文件中的每个关键字和符号的类型。
阅读全文