1. select (9+6*5+3%2)/5-3 这个是怎么算的啊
这个是数据库的计算,就是求(9+6*5+3%2)/5-3的值,结果为5
2. 在线等 如图编译原理
(1)
存在左递归:E→EA
进行消除得:
E→E'
E'→AE' | ε
消除后的文法G[E]:
E→iA | E'
E'→AE' | ε
A→i | d | (E)
(2)
FIRST集:
FIRST(E)={i,d,(,ε}
FIRST(E')={i,d,(,ε}
FIRST(A)={i,d,(}
FOLLOW集:
FOLLOW(E)={#,)}
FOLLOW(E')={#,)}
FOLLOW(A)={#,i,d,(,),ε}
(3)SELECT集:
SELECT(E→iA)={i}
SELECT(E→E')={i,d,(,),#}
SELECT(E'→AE')={i,d,(}
SELECT(ε)={#,)}
SELECT(A→i)={i}
SELECT(A→d)={d}
SELECT(A→(E))={(}
由于SELECT(E→iA)∩SELECT(E→E')={i}∩{i,d,(,),#}={i}≠{Φ},即具有相同左部的产生式的SELECT集合的交集不为空可知,该文法不是LL(1)的。
希望你不是在考试的时候发的。
3. 懂编译原理的请进
判断是否是LL(1)文法的方法是根据FIRST集合和FOLLOW集合来判断的,不是这个SELECT啊!你看的时哪本书?
4. 求 编译原理 语法分析程序
可以参考我的空间,我在三年前写过类似代码。
http://hi..com/逄韶华/ihome/myblog
5. 编译原理中,经过消除左递归的文法就一定是LL1文法么
不一定,还有回溯等其他的情况,判断文法是不是LL1需要计算每个产生式的select集,根据计算结果才能确定
6. 怎么求编译原理中的first集,follow集和selec集
由于终结符的first集合就是它自己,所以求出非终结符的first集合后,就可很直观地得到每个字符串的first集合三,first集求法
first集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的first集合
7. 关于编译原理first follow 和select
首先要明白这三个集的作用和用途,知道了他们是用来做什么的之后,理解起来就简单一些
First(A)集的作用是标示在替换非终结符A的时候,替换后的文法的首字母集合,语法分析程序根据这个来判断给定的语言是否是合法的,是符合规则的。
Follow(A)的作用是标示那些可以出现在A之后的字符,语法分析程序根据这个,在A可以被替换为e(空)的时候来进行判断,看当前的文法是否是合法的。
这里简单说明下,比如A->b,A->e(空) 当给定的语言是 bXXXXX的时候,根据第一句文法就可以判定句子合法,但是如果给的语言是cXXXXX的时候,因为A->可以替换为空,这时候就需要一句A的follow集来进行判断,若A的follow集里面含有c 则语言是合法的
Select集的作用是将first集和follow集进行合并,如果两个文法的左端都是A,若他们的select集交集为空,表明他们是两个无关的,不会产生不确定性的文法,反之,则表明文法不是LL(1)文法
计算的公式很繁杂,理解了意思之后,看就能看出来。。。。
8. 编译原理, 写一个简单文法的词法/语法分析器有简单的方法吗
那就用 lex 和 yacc 写
不过实验课程就是让你手算一次
如果你用工具直接生成了意义不大
9. LL(1)文法-------编译原理
我正在写一个编译器,源代码在这里:
http://code.google.com/p/bellman/source/browse
其中词法规则在lex.l文件中,语法规则在grammer.y中,分别用flex和bison的输入文件的格式写的。我实现了一个类似C/C++的语法
地址如下:
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/lex.l
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/grammer.y
具体有什么问题可以发邮件[email protected]
10. 编译原理中follow 集 select 集
不能,
A->aBc
将first c 加入follow(B)中,若c为空,把follow(A)加入follow(B)中