项目简介
本项目是基于C语言编写的编译器前端,主要用于解析和计算C语言表达式。实现了词法分析器、语法分析器(支持LL(1)和LR(1)算法),并集成YACC和LEX工具以自动生成分析器。用户输入算术表达式后,解析器会进行语法分析并输出解析过程和结果。
项目的主要特性和功能
- 词法分析器(Lexer):读取源代码并分解为词法单元(tokens)。
- 语法分析器(Parser):支持LL(1)和LR(1)算法,可输出解析过程。
- YACC和LEX工具:用YACC生成语法分析器,LEX生成词法分析器。
- 错误处理:能识别和报告语法错误。
- 支持多种表达式:可解析和计算整数、浮点数、括号表达式、多进制数等。
安装使用步骤
前提
假设用户已经下载了本项目的源码文件。
编译
使用make
命令编译项目,可按需选择编译LL(1)或LR(1)解析器:
- 编译LL(1)解析器:
bash
$ make LL1
- 编译LR(1)解析器:
bash
$ make LR1
运行
运行编译后的程序,按提示输入表达式测试:
- 运行LL(1)解析器:
bash
$ ./LL1
- 运行LR(1)解析器:
bash
$ ./LR1
示例输入
bash
2+3*4
(8 - 2) / 2
3 * ((66 - 99) / 3 + 1)
208341/66317
示例输出
bash
14
3
-30
3
错误处理示例
输入错误表达式时,解析器会报告错误并提示可能原因,例如:
bash
(3.14 - 2.72 / 2 // 括号不匹配(语法错误)
0x2 -* 1 // (语法错误)
4/(1-1) // 除0错误(语义错误)
参考文档
- C99标准 (ISO/IEC 9899:1999)
- YACC和LEX工具文档
- Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. "Compilers, principles, techniques." Addison wesley 7.8 (1986): 9.
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】