作者yauhh (哟)
看板Programming
标题Re: [问题] BNF文法问题
时间Wed May 11 20:47:14 2011
※ 引述《killermomo (杀Mo)》之铭言:
: ※ 引述《yauhh (哟)》之铭言:
: : 2*3+4*5 由 E 规则可能有 <E,2>*<T,3+4*5> 或 <E,2*3+4>*<T,5> 而前者一下子
^^^^^^^^^^^^^^^
: : 就会推到尽头得不到解答. 然後可以看後者:
: 延续y大的答案而产生的问题...
: 该如何判断一个文法如何拆解呢?
:
: 不太懂这句
: 而前者一下子就会推到尽头得不到解答
: 因为我推导出来E * T之後
: T再推导下去,感觉就推不出来了...
:
真令人紧张,不知道之前有弄错什麽.
: 是因为这样才不考虑这个解答吗?
前一项是 E 2 + T 3+4*5, 看那个 T 只能解成 T 3+4, F 5.
於是,在此已经看不到 T 3+4 该怎麽拆了,遇到尽头. 这样就是 parse 失败.
: 另外一问...
: E→E + T | T
: T→T * F | F
: F→(E) | id (E)可视为E吗?如不行,这题则不为模糊?对吗?
: 这个文法是模糊文法吗?
: 我的判断为是模糊文法?对吗?
: ※ 编辑: killermomo 来自: 112.105.171.107 (05/10 00:38)
这种精简的表达法,每个符号都重要, (E) 当然跟 E 完全不同.
http://en.wikipedia.org/wiki/Ambiguous_grammar 文章中谈到,
没有演算法方便来判断文法有没有模糊.
虽然演算法理论上说,并没有足够的工具判断模糊,但用人聪明的脑袋好像可以判断.
像 E -> 是说,如果式子有 + 号, + 号左边也是 E, 而右边是 T. 不然全都看成 T.
再往下看,很显然列为 T 的式子,只有被括弧包着的才可能有 + 号.
所以一条式子同一层如果有好几个 + 号, 一定是右边先算. (先解的符号较後算.)
然後看 T ->, 如果式子有 * 号, * 号左边也算成 T, 右边是 F, 要不然全是 F.
所以同一层好几个 * 号也是右边先算.
结果这个式子可以说是括弧特别优先计算, 同一层级从右边先算, 先乘除後加减.
有蛮清楚的理由可说是不模糊.
--
/yau
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.231.115
1F:推 killermomo:哦哦,懂了~谢谢y大~ 112.105.181.42 05/11 23:29