使用 Lex 及 Yacc 写一个词法分析和语法分析器的代码
时间: 2024-02-13 19:02:47 浏览: 154
借助Lex和Yacc进行词法语法分析
5星 · 资源好评率100%
好的,以下是一个简单的使用Lex和Yacc实现词法分析和语法分析的示例代码:
Lex文件(lex.l):
```
%{
#include "y.tab.h"
%}
%%
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
[+\-*/\(\)] { return yytext[0]; }
[ \t\n] { }
. { printf("Invalid character: %s\n", yytext); }
%%
int yywrap() {
return 1;
}
```
Yacc文件(yacc.y):
```
%{
#include <stdio.h>
%}
%token NUMBER
%%
expr: NUMBER
| expr '+' expr
| expr '-' expr
| expr '*' expr
| expr '/' expr
| '(' expr ')'
;
%%
int main() {
yyparse();
return 0;
}
int yyerror(char *s) {
printf("Error: %s\n", s);
}
int yylex() {
return yylex();
}
```
使用方法:
1. 在命令行中输入以下命令编译生成词法分析器和语法分析器的代码:
```
lex lex.l
yacc -d yacc.y
gcc lex.yy.c y.tab.c -o calculator
```
2. 输入以下命令运行编译器:
```
./calculator
```
3. 在程序中输入表达式,例如:
```
1 + 2 * (3 - 4)
```
4. 程序将会输出表达式的计算结果。
阅读全文