Compiler Principles Labs

编译原理课程实验,实现词法分析、语法分析和表达式计算器,涵盖编译器前端的核心模块。

进阶 Completed 2023-09
C++CMakeGCC
Overview

Project Details

Tags

C++CompilerCoursework

Keywords

Lexical AnalysisSyntax AnalysisExpression CalculatorGrammarParserCMake

Architecture

编译器前端架构:词法分析器将源代码转换为 Token 流,语法分析器基于文法规则构建语法树,表达式计算器实现算术表达式求值。CMake 管理多模块构建。

项目背景

编译原理课程要求通过编程实践理解编译器的工作机制。本项目包含词法分析、语法分析和表达式计算器三个核心模块,覆盖了编译器前端的关键技术。

核心功能

  • 词法分析:将源代码字符流转换为 Token 序列
  • 语法分析:基于文法规则进行递归下降分析
  • 表达式计算器:支持算术运算符优先级和括号嵌套
  • 符号表管理:变量声明、查找和作用域处理

系统架构

Compiler Frontend Pipeline
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

项目结构

Project Directory Structure
compiler-principles/
├── Code/
│   └── Grammar_analysis/
│       ├── ExpressionCalculator.cpp   # 表达式计算器
│       ├── ExpressionCalculator.hpp
│       ├── SYMBOL.CPP                 # 符号表
│       ├── TESTSYM.CPP               # 测试程序
│       ├── basedata.h                 # 基础数据结构
│       ├── symbol.h                   # 符号定义
│       └── CMakeLists.txt
├── experiment1/                       # 词法分析实验
├── experiment2/                       # 语法分析实验
└── README.md

核心代码

表达式计算器

ExpressionCalculator.cpp - Recursive Descent Expression Parser
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++ 项目