lex与yacc文档。还算比较清晰的扫描版本,基本是绝版了。
2021-04-11 15:56:54 20.48MB 编译
1
基于《编译原理教程(第四版)》胡元义 第二章 词法分析 伪代码实现的词法分析器。实现方式:c语言和lex 内容包括: (1)源代码; (2)测试文件; (3)测试结果。 注意:c语言实现时,尽量贴合书本伪代码去写的。
2021-04-01 22:06:19 19KB 词法分析器 c语言 lex/flex
1
编译原理-词法分析器1(lex实现)-附件资源
2021-04-01 16:18:05 106B
1
Python词法分析器 安装 在Debian / Ubuntu发行版中: sudo apt-get install flex 用法 汇编: ./compile.sh 跑步: ./run.sh
2021-03-25 09:11:16 329KB 系统开源
1
主要介绍了C语言中使用lex统计文本文件字符数,本文直接给出实现代码,需要的朋友可以参考下
2021-03-24 21:23:51 31KB C语言 lex 统计文本文件字符数
1
实验二 词法分析器 一、实验目的 掌握词法分析器的构造原理,掌握手工编程或LEX编程方法之一。 二、实验内容 编写一个LEX源程序,使之生成一个词法分析器,能够输入的源程序转换为单词序列输出。 三、实验环境 Flex+VC6.0 四、实验注意 1.Id正则表达式:{letter}({letter}|{digit})* 2.Num正则表达式:{digit}+(\.{digit}+)?(E[+-]?{digit}+)? 3.注释:(\/\*(.)*\*\/) 4.关键字再加上其他字符就又能编程id,所以在词法分析时,id的判断应该放在关键字前面,这样才不会误判 5.由于本程序知识简单的打印数字,因此没有考虑数字的转换 6.">="比">"多一个字符,它应该放在前面判断,其他类似的也应该如此安排 五、实验代码 ******************************************************************************* 实验文件:lex.l、lex.yy.c 实验结果:lex.exe 运行方式:打开lex.exe,弹出input.txt,在其中输入所要测试的程序,保存并关闭,即可在output.txt中看到所得结果 ******************************************************************************* %{ void Install(char *type); %} %option noyywrap delim [ \t] newline [\n] digit [0-9] num {digit}+(\.{digit}+)?(E[+-]?{digit}+)? letter [A-Za-z] id {letter}({letter}|{digit})* key ("if"|"while"|"do"|"break"|"true") basic ("int"|"float"|"bool"|"char") op (">="|""|"<"|"="|"!="|"+"|"-"|"*"|"/") comment (\/\*(.)*\*\/) %% delim {;} newline {printf("\n");} {num} {Install("Num");} {key} {Install("Key");} {basic} {Install("Basic");} {op} {Install("Op");} ";" {Install("Comma");} {id} {Install("ID");} {comment} {Install("Comment");} "(" | "[" | "{" {Install("lbracket");} ")" | "]" | "}" {Install("rbracket");} %% void Install(char *s) { fprintf(yyout, "%s:%s ", s, yytext); } int main() { printf("please input the test program in input.txt\n"); system("input.txt"); yyin = fopen("input.txt", "r"); yyout = fopen("output.txt", "w" ); yylex(); fclose(yyout); fclose(yyin); printf("analysis result in output.txt\n"); system("output.txt"); return 0; } 六、实验小结 本次的实验由于使用了flex,所以代码较短,麻烦的事flex的正则式表达,由于该使用规则只有简单介绍,而网上找的教程难免有比重就轻之嫌,所以得到上述表达式着实费力,且有的没有成功,例如bracket的(\ ((.)*\ ))或者("("(.)*")")使用时都没有成功,所以便单独写出,有点不伦不类。至于其他的,都较为简单,完。
2021-03-23 17:07:36 402KB lex词法分析器 编译原理
1
编写一个LEX输入文件,使之生成可计算文本文件的字符数、单词数和行数且能够报告这些数字的程序。单词为不带标点或空格的字母和/或数字的序列。标点和空格不算为单词。编写一个LEX输入文件,使之可生成将SPL程序注释之外的所有关键字(保留字)均转换为大写的程序。有关SPL的关键字请见第2章或第8章所述。该LEX生成的程序要能够对SPL源程序进行分析,将不是大写的关键字转换为大写。生成如下文法表示的表达式对应的计算器: exp->exp + exp | exp – exp | exp *exp | exp / exp | exp ^exp | -exp |(exp)|NUM 对于输入的中缀表达式,要给出结果。如3+(4*5)结果应为23.要求能连续处理若干个数学表达式,直到输入结束或文件结束。 已知表达式文法的扩充巴克斯范式为: S->E# E->T+T|T-T T->F*F|F/F F->(E)|I 从键盘或文件输入表达式,利用递归下降法求出其值。若输入表达式有错,则给出报错信息。例如:输入表达式串为13+5*4,则应给出结果为23.
1
一款很好的可视化语法分析器 ,使用非常地简单方便,利用正则表达式和BNF范式进行编程,功能强大
2021-03-14 19:55:58 4.3MB lex yacc pargen
1
将lex和yacc文件转成c、c++文件 1. 启动Pargen程序,并选择Project->ParserWizard… 2. 选中ParserWizard,开始工程的创建,此处我创建功能,命名为Test,目录位置可自己选择,目标语言为C++,编译器为vc++(32-bit) 3. 选择是创建lex,还是yacc,还是两者兼有。此处我选择是lex和yacc都有,准备实现一个不支持变量的计算器,使用lex识别token,使用yacc识别语法 4. 设置yacc的文件名字以及使用的解析器,此处我使用的默认选项,不进行修改,文件名默认为myparser.y 5. 设置lex的文件名以及使用的分析器的名字,此处我使用的默认选项,文件名默认为mylexer.l 6. 点击完成按钮,创建工程完毕,同时有两个文件mylexer.l 和myparser.y
2021-03-14 19:54:44 1.97MB lex yacc
1
C语言编译器 lex和yacc编写的c语言编译器 词法分析与语法分析的原始文件扩展: ://www.quut.com/c/ANSI-C-grammar-l-1998.html和 实现了C语言除了struct和指针几乎所有的语法。 运行 环境要求:flex bison g ++ 11 python3 中间代码生成 Windows命令行输入: flex compiler.l bison -vdty compiler.y g++ -std=c++11 -o compiler tree.cpp Praser.cpp innerCode.cpp tools.cpp codeOptimize.cpp lex.yy.c y.tab.c compiler.exe test/test.c 或者 makefile.bat 目标代码生成 进入objectcode文件夹,命令行输入 python objectcode.py objectcode.py读取的源文件为inter.txt,生成的mips汇流编码在result.asm文件中 中间代码格式定义 语法 描述 标签1: 定义标签label1 功能f:
2021-03-02 16:17:41 5.1MB c compiler mips python3
1