Overview
Project Details
Tags
Keywords
Lexical AnalysisSyntax AnalysisExpression CalculatorGrammarParserCMake
Architecture
编译器前端架构:词法分析器将源代码转换为 Token 流,语法分析器基于文法规则构建语法树,表达式计算器实现算术表达式求值。CMake 管理多模块构建。
项目背景
编译原理课程要求通过编程实践理解编译器的工作机制。本项目包含词法分析、语法分析和表达式计算器三个核心模块,覆盖了编译器前端的关键技术。
核心功能
- 词法分析:将源代码字符流转换为 Token 序列
- 语法分析:基于文法规则进行递归下降分析
- 表达式计算器:支持算术运算符优先级和括号嵌套
- 符号表管理:变量声明、查找和作用域处理
系统架构
graph LR
A[Source Code] --> B[Lexical Analyzer]
B --> C[Token Stream]
C --> D[Syntax Analyzer]
D --> E[AST]
E --> F[Expression Calculator]
E --> G[Code Generator]
subgraph "Lexer"
B1[Character Stream] --> B2[State Machine]
B2 --> B3[Token Output]
end
项目结构
compiler-principles/ ├── Code/ │ └── Grammar_analysis/ │ ├── ExpressionCalculator.cpp # 表达式计算器 │ ├── ExpressionCalculator.hpp │ ├── SYMBOL.CPP # 符号表 │ ├── TESTSYM.CPP # 测试程序 │ ├── basedata.h # 基础数据结构 │ ├── symbol.h # 符号定义 │ └── CMakeLists.txt ├── experiment1/ # 词法分析实验 ├── experiment2/ # 语法分析实验 └── README.md
核心代码
表达式计算器
Loading code... 效果展示
No screenshots yet. Add images to public/screenshots/compiler-principles/.
技术要点
词法分析
- 正则表达式描述 Token 模式
- 有限自动机(DFA)实现模式匹配
- 处理空白、注释和关键字识别
递归下降分析
Expr → Term (('+' | '-') Term)*
Term → Factor (('*' | '/') Factor)*
Factor → NUMBER | '(' Expr ')' | '-' Factor
每个非终结符对应一个解析函数,自然处理运算符优先级。
符号表
- 哈希表实现快速查找
- 支持嵌套作用域的链式查找
- 记录变量类型、值和声明位置
Problems Solved
Challenges & Solutions
01
正则表达式到有限自动机的转换实现
02
递归下降分析法处理算术表达式的优先级和结合性
03
符号表的设计与作用域管理
Reflections
Key Takeaways
深入理解了编译器前端的工作原理
掌握了词法分析和语法分析的核心算法
学会了用 CMake 组织多文件 C++ 项目