请给我一个用flex和bison作词法分析和语法分析的保姆级教程以及示例
时间: 2023-12-06 09:04:27 浏览: 205
Flex and Bison
3星 · 编辑精心推荐
好的,以下是一个简单的使用Flex和Bison进行词法分析和语法分析的示例:
1. 编写词法分析器(Lex文件)
打开一个新的文本文件,将其保存为 “example.lex”(或其他你喜欢的名字),并粘贴下面的代码:
```
%{
#include "example.tab.h"
%}
%%
[0-9]+ { yylval.num = atoi(yytext); return NUMBER; }
[ \t\n] { /* ignore whitespace */ }
. { return yytext[0]; }
%%
int yywrap() { return 1; }
```
这个文件定义了三个规则:
- 匹配数字并返回 NUMBER 标记
- 忽略空格和换行符
- 匹配任意字符并返回它本身
2. 编写语法分析器(Yacc文件)
打开一个新的文本文件,将其保存为 “example.y”(或其他你喜欢的名字),并粘贴下面的代码:
```
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token NUMBER
%%
input:
/* empty */
| input line
;
line:
NUMBER '+' NUMBER { printf("%d\n", $1 + $3); }
| NUMBER '-' NUMBER { printf("%d\n", $1 - $3); }
;
%%
int main() {
yyparse();
return 0;
}
void yyerror(char *s) {
fprintf(stderr, "Error: %s\n", s);
}
```
这个文件定义了两个规则:
- input:输入可以是空白或多行
- line:每行输入可以是两个数字加减操作
3. 生成代码
现在你需要使用 Flex 和 Bison 来生成 C 代码。
在命令行中输入以下命令:
```
flex example.lex
bison -d example.y
gcc lex.yy.c example.tab.c -o example
```
这将生成一个名为 “example” 的可执行文件。
4. 运行程序
现在你可以运行程序并输入一些数字和加减符号来测试它了。
例如,你可以输入:
```
5 + 3
10 - 2
```
程序会输出:
```
8
8
```
这就是使用 Flex 和 Bison 进行词法分析和语法分析的基本示例。你可以在此基础上扩展和修改代码以适应你的需求。
阅读全文