本文档《C-Minus词法与语法分析设计》探讨了针对简化版C语言(C-Minus)进行词法和语法分析的设计方案。包含编译器构建的基础知识,详细解析了C-Minus的语法规则及其应用实践。
课程设计的目标是建立一个仅包含扫描程序(scanner)和语法分析器(parser)的C-编译器。
### 2. 分析与设计
#### C-编译器的整体框架:
本实验主要实现的是扫描处理和语法分析程序,具体为图中粗黑部分的功能模块。
##### 2.1 扫描程序(scanner)
###### 2.1.1 系统设计思想
根据DFA图使用switch-case结构来实现状态转换。惯用词法如下:
- **语言的关键字**:else, if, int, return, void, while
- **专用符号**:+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */
其他标记包括ID和NUM,定义如下:
- ID: letter letter*
- NUM: digit digit*
其中letter表示字母(a-z或A-Z),digit表示数字(0-9)。
空格由空白、换行符及制表符组成。通常情况下这些字符会被忽略,但它们必须用于分隔关键字、ID和NUM。
注释使用C语言的标准符号 /* ... */ 来定义,可以出现在任何空白位置,并且不能嵌套在其他标记内。
当输入的字符使DFA达到接受状态时,则表示一个单词已被识别。初始状态设置为START,在需要获取下一个token时,取得该token的第一个字符并根据DFA对其进行分析和状态转换。重复上述步骤直到DONE为止。
特别地, 当遇到“/”后,系统会检查下一个字符来判断是否进入注释模式或保持在当前状态下输出/。
###### 2.1.2 程序流程图
此处省略了具体程序流程图的描述,但根据设计思想可以绘制出相应的状态转换图表。