Compiler Construction Experiment 1 Implementing a Scanner for TINY+ You are to write a lexical analyzer/scanner for the language TINY+. Goals 1The input of the scanner is a source code file and the output of the scanner is a stream of tokens. 2Your scanner should go for longest possible match i.e. a string ‘:=’ is to be identified as ‘ass-symbol’ rather than ‘:’ and ‘=’. 3Token is represented as (Kind, Value). We use the following symbols to denote different kinds of tokens KEY denotes reserved words SYM denotes special symbols ID denotes identifiers NUM denotes numeric constants STR denotes string constants 4Check lexical errors: giving meaning error messages and the lines where errors occur. The kinds of lexical errors are: Illegal character, that is, scanner may recognize a character that is not in the alphabet of TINY+, such as $ is an illegal character The right bracket of a STRING is lost, such as ' scanner The right delimiter of a comment is lost, such as: {this is an example Requirements 1Write your program in C or C++ 2This experiment must be finished in 4 periods. You will submit a report and the source code Example output for some TINY+ programs Test1 or and int bool char while do if then else end repeat until read write , ; := + - * / ( ) = a2c 123 'EFG' The scanner should give the outputs: (KEY, or) (KEY, and) (KEY, int) (KEY, bool) (KEY, char) (KEY, while) (KEY, do) (KEY, if) (KEY, then) (KEY, else) (KEY, end) (KEY, repeat) (KEY, until) (KEY, read) (KEY, write) (SYM, ,) (SYM, ;) (SYM, :=) (SYM, +) (SYM, -) (SYM, *) (SYM, /) (SYM, ( ) (SYM, )) (SYM, ) (SYM, =) (ID, a2c) (NUM, 123) (STR, EFG) Test2 {this is an example} int A,B; bool C1, C2, C3; char D; D:= 'scanner'; while A<=B do A:=A*2 end The scanner should give the outputs: (KEY, int) (ID, A) (SYM, ,) (ID, B) (SYM, ;) (KEY, bool) (ID, C1) (SYM, ,) (ID, C2) (SYM, ,) (ID, C3
1
词法实验 语法实验
2021-11-05 08:56:02 2.17MB 武汉理工大学
1
Exp1:词法分析 Exp2:正则表达式到NFA到DFA到DFA最小化 Exp3:语法分析 Exp4:使用Yacc和FLEX工具(无对应代码) Exp5:语义分析 Exp6:目标代码生成 Exp1和Exp3使用的是TINY Exp5和Exp6则是使用的CMinus,因为TINY已经给出了源码且没有可以替代的方法。 所以,如果是HNU的,建议从实验1开始就来写CMinus
2021-11-04 08:31:40 262KB 附件源码 文章源码
1
湖南大学专业课编译原理实验的相关资料,实验分巨高,另外推荐陈果老师,讲课真的好,祝大家学业有成,代码以及报告仅作参考,不要过分摘抄。
2021-11-03 22:48:10 764KB 编译原理 湖南大学 奥里给
1
实验目的: 通过设计、编制、调试一个典型的赋值语句的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查,进一步掌握常用的语法分析方法。
1
构造tiny语言的词法分析器(扫描器),利用第三方的lex工具进行构造。 构造出的扫描器,能够读入教材样例中给出的tiny语言的示例代码,分解成token输出。 掌握使用lex工具 掌握构造Tiny语言词法分析器 掌握LEX的输入文件的编写
2021-10-26 19:05:49 15KB 大三编译原理实验
1
1) 可选择文件读取多行字符进行分析 2) 可手动输入多行字符并读入进行分析 3) 关键字、标识符、分界符号、算术运算符、关系运算符、常数表用户自定义 4) 统计行数和列数用于错误单词的定位 5) 删除空格类字符,包括回车、制表符空格 6) 按拼写单词(关键字、标识符、分界符号),并用(内码,属性)二元式表示。 7) 如果发现错误则报告出错 8) 根据需要是否填写标识符表供以后各阶段使用 9) 识别常数,可辨别整数、浮点数 10) 识别算术运算符,支持++,--,==,&&,|| 11) 识别注释部分、空格,并跳过
2021-10-25 21:52:26 4KB java 编译器
1
燕山大学编译原理上机实验报告,均已经调通,附有词法分析器、LL语法分析器、逆波兰式表达程序等aaaaaaa
2021-10-25 13:41:50 297KB 编译原理 实验报告
1
C语言实现,VC 6.0 下调试通过。本实验主要是完成前两个步骤的任务,即词法分析和语法分析。 各文件的设计说明: 为了完成词法分析功能,设计了cminus.h cminus.c 来实现功能(用Lex工具自动生成); 为了对初始文法消除左递归,提取左因子,设计了del_LR_LF.h del_LR_LF.c 来实现功能; 为了求出First 和Follow集合,设计了getset.h getset.c 来实现功能; 为了建立分析表,设计了createtable.h createtable.c 来实现功能; 为了建立语法树,设计了 constructTree.h constructTree.c 来实现功能。 在globals.h中定义了一些全局变量和全局函数; 在 scan.h 中定义了一些Lex工具需要使用的变量和函数原型; 在 util.c 中实现了printToken 来向屏幕上打印记号序列 ...
2021-10-24 16:43:17 308KB 编译原理实验
1
这是一份详细的编译原理实验,内容是修改PL/0的代码,增加else语句和一些其它的小功能。
2021-10-22 10:30:41 1.25MB 编译原理 实验 报告 PL
1