① 编译原理 递归下降分析器
自顶向下分析法(递归下降分析程序构造)
E-->T/E+T
T-->F/T*F
F-->i/(E)
步骤 栈 输入字符串 状态
0 #E i1*(i2+i3)# 初始化
1 #T i1*(i2+i3)# E-->T
2 #T*F i1*(i2+i3)# T-->T*F
3 #T*i i1*(i2+i3)# F-->i
4 #F* *(i2+i3)# 匹配
5 #F (i2+i3)# 匹配
6 #(E) (i2+i3)# E-->(E)
7 #(E i2+i3)# 匹配
8 #(E+T i2+i3)# E-->E+T
9 #(E+F i2+i3)# T-->F
10 #(E+i i2+i3)# F-->i
11 #(E+ +i3)# 匹配
12 #(E i3)# 匹配
13 #(T i3)# E-->T
14 #(F i3)# T-->F
15 #(i i3)# F-->i
16 #( )# 匹配
17 # # 接受
所以可以写出
PROCEDURE E
BEGIN
T;
WHILE SYM='+' THEN ADVANCE;T END
END;
PROCEDURE T
BEGIN
F;
WHILE SYM='*' THEN ADVANCE;F END
END;
PROCEDURE F
BEGIN
IF SYM='i' THEN ADVANCE END
ELSE
IF SYM='(' THEN
BEGIN ADVANCE;E;
IF SYM=')' THEN ADVANCE;
ELSE ERROR;END
END;
② 提问 编译原理问题(高分)
词法分析 的作用是把输入的源语句转化成单词形式
第五个最右推导没给要推出的句子 如果是 cbb 那过程也不对
E->CB
C->c
B->b
最右推导的分析为
1 CB
2 Cb
3 cb
你给的文法有问题吧,最右推导通俗的说 就是只按照最右边的非终结符推导
你这些都是要干什么的题,如果要考试,后面那几道的类型几乎必考!!!
③ 编译原理中词法分析器
或许……可以通过这个符号的前面的第一个有实际意义的“单词”的属性来判断,因为如果它是加减号,
那么它“前面”的那个单词必然具有可以被它加或减的属性,否则就是正负号。
如果前一个单词属性是标示符或者某种数据类型(比如整型、字符串型),
那么这个符号就是加减号而不是正负号,如果前面一个单词
是关键字或运算符这类不可能承受“加减”操作的这种,这个号就是正负号。
个人觉得这个问题应该没有一针见血或者一劳永逸的办法,就得一点一点分析吧。
PPPS:还有一策就是甭搭理它,交给语义分析办。
④ 编译原理课程-简单词法分析器设计(C或C++)
分类: 电脑/网络 >> 程序碰陵设计 >> 其他编程语言
问题描述:
完成以下正则文法所描述的Pascal语言子集单词符号的词法分析程序。
<标识符>→字母| <标识符>字母| <标识符>数字
<无符号整数>→数字| <无符号整数>数字
<单字符分界符> →+ |- |* |; |(|)
<双字符分界符>→<大于>=|<小于>=|<小于>>|<冒号>=|<斜竖>*
<小于>→<
<等于>→=
<大于>→>
<冒号> →:
<斜竖> →/
该语言的保留字 :begin end if then else for do while and or not
说明:
1 该语言大小写不敏感。
2 字母为a-z A-Z,数字为0-9。
3可以对上述文法进行扩充和笑坦戚改造。
4 ‘/*……*/’为程序的注释部分。
[设计要求]
1、 给出各单词符号的类别编码。
2、 词法分析程序应能发现输入串中的错误。
3、 词法分析作为单独一遍编写,词法分析结果为二元式序列组成的中间文件。
4、设计两个测试用例(信宴尽可能完备),并给出测试结果。
解析:
这种问题 …… 会有人解答吗?
⑤ 编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理
语法分析器的两项主要任务,分别:
源程序中的错误可以分为词法/语法错误、语义错误两类。前者主要形式是命名不合虚悄雹法、关键字书写错误、语法结构有问题(比如缺分号、该配对的东西不配对)等;后者则可分为静态/动态两种,静态例如类型使用错误、参数使用错误等,动态语义错误则是无穷递归这类逻辑性的问题。
例如:
紧急恢复:x = a+b+d; // 丢运芹弃掉 b 后的记号,直到遇到 +
短语级恢复: x = a+b; // 加入分号
在写程序时,要养成减少错误的好习惯:每次用变量、参数时,要在使用之前进行初始化,并在差帆直接使用之前检查一下是否出现值为空等问题,防止出现不可预知的错误
⑥ 编译原理课程设计-词法分析器设计(C语言)
#include"stdio.h"/*定义I/O库所用的某些宏和变量*/
#include"string.h"/*定义字符串库函数*/
#include"conio.h"/*提供有关屏幕窗口操作函数*/
#include"ctype.h"/*分类函数*/
charprog[80]={'