【发布时间】:2012-11-17 19:58:31
【问题描述】:
这里http://slkpg.byethost7.com/llkparse.html定义了FOLLOW_k-Sets
"FOLLOWk 集合的字符串 文法中的符号是一组 k 长度的终端符号字符串 可能跟在某些符号串之后的文法 语法中可导出的句型"
首先我对链接下的示例有一个疑问,那里是 Grammar 4.2
A --> a <Baa> a a
A --> b <Bba> b a
<Baa> --> b
<Baa> -->
<Bba> --> b
<Bba> -->
据说:
FIRST2 ( A ) = { aa, ab, bb }
FIRST2 ( <Baa> ) = { epsilon }
FIRST2 ( <Bba> ) = { epsilon }
FOLLOW2 ( <Baa> ) = { aa }
FOLLOW2 ( <Bba> ) = { ba }
但我问自己为什么不这样做
FIRST2 ( <Baa> ) = { epsilon, b }
FIRST2 ( <Bba> ) = { epsilon, b }
因为例如也可以导出单个 b。
语法方面
S -> X
X -> aX
X -> aY
Y -> epsilon
我不确定这个集合
FOLLOW2(S)
它是空的,{ epsilon } 还是 { a, aa } 因为这些字符串是可推导的,还是因为 S 之后的内容很重要,并且因为 S 是开始符号,所以它后面什么都没有,但是我应该写 FOLLOW2 (S) = \empyset 或 FOLLOW2(S) = { epsilon }?
【问题讨论】:
标签: parsing compiler-construction generator ll