现在需要做一个Java语言中逻辑表达式(布尔表达式)的解析程序,要求布尔表达式中支持数学表达式计算。哪位能提供一下这种支持数学表达式计算的布尔表达式的完整LL(1)文法描述?
如何验证一个文法是不是正确表示了布尔表达式运算?谢谢!
如何验证一个文法是不是正确表示了布尔表达式运算?谢谢!
解决方案 »
- 如何理解枚举成员生成的class文件
- 有关类的继承问题
- CMD中 javac A.java 问题:关于 A.java 的编码格式
- 再问线程问题,调用EXE
- eclipse中设置Classpath失败!!小弟在此跪求高手指点!!!!
- 关于线程的一点思考:为什么java.sql.Statement.executeUpdate()不声明为同步的呢?那样怎么能保证多个线程同时修改表的记录呢?
- 请指点一下~~一道简单习题!
- 这是用什么方式编码的,如何解码?
- oracle 連接,我實在是搞不定,請各位幫幫忙,助我早日脫離苦海?
- 类调用自己
- 两个new Thread(r1 ).start()后输出的判定
- 关于JTabel问题(急)
LL(1)文法的条件有板有3:
1:无左递归
2:无左公因子
3:如果 ε∈first(A),A∈非终结符,
那么必须满足:
first(A)∩follow(A)= φ
首先你给的文法很容易看出没有直接或间接左递归.
其次你的算法中含有左公共因子,则需要消除左公共因子. 所以消除左公共因子后文法是:
S->C$
C->bA |aB
A->aP |bAA
B->bP|aBB
P->C |ε
然后检测改算法是否是LL(1)文法的第三个条件.
对于你这个文法很容易看出只有first(p) 含有ε,那么只需检测first(P)∩follow(P)
容易看出 : first(P) = {ε}∪first(C) = {ε} ∪ {a,b} = {a,b,ε}
follow(P) = follow(A)∪follow(B) = follow(C)∪follow(C) = follow(C) = {$}
first(P)∩follow(P)= φ
满足第三个条件 .所以上改造后的文法是LL(1).
S->C$
C->bA |aB
A->aP |bAA
B->bP|aBB
P->C |ε
中各个非终结符和终结符都是什么意思啊?
谢谢!