编译原理上机报告(3)

2019-08-03 11:33

论是FROM,还是from,亦或FrOm,均可以被正确识别。

测试结果如下图所示:

2. 例程2

(1)测试例程设计

但是在实际中,笔者发现有时文本文档不能正确地检查到.txt文件的结尾标志。故设计如下用例。且在该用例中,笔者自行设计了出错记号ERRTOKEN。 (2)测试结果

test2.txt文件内容如下: lsfjlaks;

origin is (100, 300); --here are notes rot is 0; throw is

测试结果如下图所示:

四、总结、体会及其他

整体来说这次用Java来实现词法分析器对我来说确实存在这不小的挑战,而且我写的程序还或多或少的存在着这样或那样的瑕疵,但我收获了许多。而这收获既包括技术方面的,也包括非技术层面的。现将我的收获列举如下:

1. 现在突然开始明白为什么强人能够在很短的时间内学会一种语言,并能够灵活

运用。那是因为他们目标明确。然后只看跟自己有关的部分,有侧重点,而不是胡子眉毛一起抓。

2. 起初根本不知道Java到底怎么调试,可是等到会了之后,会发现其实和其他的

任何语言一样,用Java的printf,学会如何进行调试让我至少在心理上对Java不再那么的害怕。

3. “Java中没有指针” 这句话其实是骗人的,所谓的没有,只不过是换了个名

字而已。Java的指针一般都是用类进行包装的,而指针函数则是用java.lang.reflect进行实现的。

4. C中的将预读的字符退回到文件输入流中,回退函数ungetc,在Java中我们用

了java.io.PushbackReader来进行实现。由于平时Java中用到的关于输入输出流的函数一般是java.io.InputStream、java.io.OutputStream,以及java.io.File,而至于PushbackReader之类的退回函数则用的比较少了。学习它着实费了一番力气。

5. 还有对于某些.txt文件不能识别其结束标志,这个确实比较麻烦。 6. 词法分析中LineNo,即跟踪记号所在源文件行号,由于Java中并不识别unsigned

类型,故只得将其定义为int。

第二次上机题目:语法分析器的构造

一、任务与目的

1. 任务

语法分析是语法制导翻译的基础,语法分析器是函数绘图语言解释器的核心,因此语法分析器的构造是整个解释器构造的关键。

语法分析器的构造分为两个重要步骤:规定语言的文法和根据文法编写程序。由于我们采用递归下降子程序方法,因此在文法的设计上的要求是LL(1)文法。同时语法分析时要构造出语言结构的语法树,以便于后边的语法知道翻译。具体到此绘图语言,需要构造语法树的语言结构仅限于表达式,从而为语义做铺垫。

语法分析器的任务:

(1) 为句子构造语法树

(2) 检查输入序列中的错误 故主要的工作如下:

(1) 设计函数绘图语言的文法,使其适合递归下降分析 (2) 设计语法树的节点,用于存放表达式的语法树

(3) 设计递归下降子程序,分析句子并构造表达式的语法树 (4) 设计测试程序和测试用例,检验分析器是否正确

2. 目的

编写一个语法分析器,不限语言

二、软件设计

1. Java软件包的设计

由于涉及到语法分析器要调用词法分析器的内容,故现将Java中的包组织如下所示:

2. 适合编写递归下降子程序的文法

包含了左递归和公共左因子的文法G1如下所示: 其中$代表空。

--------------------------------------------------------------------------------------------------------------------------- Program -> Statement SEMICO | $

Statement -> OriginStatement | ScaleStatement | RotStatement | ForStatement OriginStatement

-> ORIGIN IS L_BRACKET Expression COMMA Expression R_BRACKET -> SCALE IS L_BRACKET Expression COMMA Expression R_BRACKET

ScaleStatement

RotStatement -> ROT IS Expression ForStatement

Expression -> Expression PLUS Term

| Expression MINUS Term | Term

-> FOR T FROM Expression TO Expression STEP Expression

DRAW L_BRACKET Expression COMMA Expression R_BRACKET

Term -> Term MUL Factor

| Term DIV Factor | Factor | MINUS Factor | Component | Atom | T

| FUNC L_BRACKET Expression R_BRACKET | L_BRACKET Expression R_BRACKET

Factor -> PLUS Factor

Component -> Atom POWER Component Atom -> CONST_ID

---------------------------------------------------------------------------------------------------------------------------

消除了左递归和公共左因子的文法G3如下所示: 其中$代表空。

--------------------------------------------------------------------------------------------------------------------------- Program -> Statement SEMICO | $

Statement -> OriginStatement | ScaleStatement | RotStatement | ForStatement OriginStatement

-> ORIGIN IS L_BRACKET Expression COMMA Expression R_BRACKET -> SCALE IS L_BRACKET Expression COMMA Expression R_BRACKET

ScaleStatement

RotStatement -> ROT IS Expression ForStatement

-> FOR T FROM Expression TO Expression STEP Expression

DRAW L_BRACKET Expression COMMA Expression R_BRACKET

Expression -> Term Expression’ Expression’ -> PLUS

Term -> Factor Term’ Term’ -> MUL Factor Term’

| T

| FUNC L_BRACKET Expression R_BRACKET | L_BRACKET Expression R_BRACKET

| DIV Factor Term’ | $

| MINUS Factor | Component | Atom

| Term Expression’ | MINUS Term Expression’ | $

Factor -> PLUS Factor

Component -> Atom POWER Component Atom -> CONST_ID

---------------------------------------------------------------------------------------------------------------------------

对Term进行了转换的文法G4如下所示:

--------------------------------------------------------------------------------------------------------------------------- Program -> { Statement SEMICO }

Statement -> OriginStatement | ScaleStatement | RotStatement | ForStatement OriginStatement

-> ORIGIN IS L_BRACKET Expression COMMA Expression R_BRACKET -> SCALE IS L_BRACKET Expression COMMA Expression R_BRACKET

ScaleStatement

RotStatement -> ROT IS Expression ForStatement

-> FOR T FROM Expression TO Expression STEP Expression

DRAW L_BRACKET Expression COMMA Expression R_BRACKET

Expression -> Term { ( PLUS | MINUS ) Term } Term -> Factor{ ( MUL | DIV ) Factor } Factor

| T

-> PLUS Factor | MINUS Factor | Component

-> Atom POWER Component | Atom

Component

Atom -> CONST_ID

| FUNC L_BRACKET Expression R_BRACKET


编译原理上机报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:化工仪表实验指导书3[1].0

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: