C Minus Compiler 表驱动方式词法分析,基于驱动方式,内附DFA转换图以及表驱动的状态转换表。
2022-05-11 23:47:44 588KB 词法分析 表驱动 C-Minus 编译原理
1
这是编译原理我自己做的语法分析,读取字符流文件分析出各种语法成分,也可以把他改成词法分析器。易读
2021-12-09 10:22:53 256KB 语法分析 C-minus
1
c-减编译器 概述 C-Minus 是 C 的极度简化版本。可以在 [此处]( ) 找到规范。 这是一个非常基本的 C-Minus 编译器,没有优化。 要运行,请输入以下命令: yacc -d cminus.y lex cminus.lex cc lex.yy.c y.tab.c emitcode.c symtable.c ./a.out << 'sourcecode' 编译器将编写一个 output.asm 文件,该文件将包含 nasm 格式的 x86 汇编代码。 它还添加了对 C 函数 printf 的调用,以打印具有 1 的任何函数的返回值。 您可以使用 nasm 和 gcc 进行组装和链接。 nasm -f elf -g -F stabs output.asm -l output.lst gcc –m32 output.o –o output 代码遵循 Linux 调用约
2021-11-10 16:44:23 9KB C
1
1、该个词法分析器要求至少能够识别以下几类单词: a. 关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写; b. 标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter | digit)*; c. 常数:NUM=(+ | - |ε)digit digit*(.digit digit* |ε)(e(+ | - |ε) digit digit* |ε),letter = a|..|z|A|..|Z|,digit = 0|..|9,包括整数,如123, -123, +123等;小数,如123.45, +123.45, -123.45;科学计数法表示的常数,如+1.23e3,-2.3e-9; d. 专用符号:+ - * / < >= == != = ; , ( ) [ ] { } /* */;
2021-06-21 12:18:11 1.84MB 编译原理词法分析器
1
exe文件可能不好用,直接把工程导入VS应该是能跑的
2021-06-14 19:33:57 1.53MB c++ 词法分析器 c- minus
1
本程序是个人自己写的,其中有First集,Follow集,分析表的求法,以及具体的LL1分析过程,将书本上的C-语法输入后,运行书上的C-测试代码完全正确。同时程序还可以选择自己随意的输入一段语法规则,然后再输入测试程序,可以完全的正确运行。
2021-06-12 00:54:04 882KB 编译原理课程 LL1语法分析
1
C minus语言词法分析器的设计是大学老师教学的资源和培养学生动手能力
2021-04-12 17:50:54 85KB 语言词法分析器
1
C-Minus 的词法规则 (1)关键字: if else int return void while (2)专用符号: + - * / < >= == ~= = ; , ( ) [ ] { } /* */ (3)其他标记为 ID 和 NUM ,通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 (4)空格由空白、换行符、制表符组成。 (5)注释由 /*...*/ 围起来,不能嵌套。 C-Minus 的语法规则 C-Minus 的 BNF 语法如下: 1. program -> declaration_list 2. declaration_list -> declaration_list declaration | declaration 3. declaration -> var_declaration | fun_declaration 4. var_declaration -> type_specifier ID; | type_specifier ID [ NUM ]; 5. type_specifier -> int | void 6. fun_declaration -> type_specifier ID ( params ) compound_stmt 7. params -> param_list | void 8. param_list -> param_list , param | param 9. param -> type_specifier ID | type_specifier ID [ ] 10. compound_stmt -> { local_declarations statement_list } 11. local_declarations -> local_declarations var_declaration | empty 12. statement_list -> statement_list statement | empty 13. statement -> expression_stmt | compound_stmt | selection_stmt | iteration_stmt | return_stmt 14. expression_stmt -> expression ; | ; 15. selection_stmt -> if ( expression ) statement | if ( expression ) statement else statement 16. iteration_stmt -> while ( expression ) statement 17. return_stmt -> return | return expression 18. expression -> var = expression | simple_expression 19. var -> ID | ID [ expression ] 20. simple_expression -> additive_expression relop additive_expression | additive_expression 21. relop -> <= | | >= | == | ~= 22. additive_expression -> additive_expression addop term | term 23. addop -> + | - 24. term -> term mulop factor | factor 25. mulop -> * | / 26. factor -> ( expression ) | var | call | NUM 27. call -> ID ( args ) 28. args -> arg_list | empty 29. arg8list -> arg_list , expression | expression 对以上每条文法规则,给出了相关语义的简短解释。 1. program -> declaration_list 2. declaration_list -> declaration_list declaration | declaration 3. dec
2021-04-08 18:59:04 9KB 编译原理实验
1
是基于c++环境的词法分析器,C MINUS ,程序要求输入一个文件,再以文件的方式输出结果。
2020-04-18 03:02:27 447KB C MINUS 词法分析
1
1. 课程设计目标 实验建立C-编译器。只含有扫描程序(scanner)和语法分析(parser)部分。 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为止,输出token类型。当字符为“/”时,状态转换为SLAH再判断下一个字符,如果为“*”则继续转到INCOMMENT,最后以“*”时转到ENDCOMMENT状态,表明是注释,如果其他的则是字符停滞于当前字符,并且输出“/”。 2.1.2程序流程图
1