关于跟随集合的语法

时间:2012-11-17 19:58:31

标签: parsing compiler-construction generator ll

此处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是startsymbol,它后面没有任何东西,但是我应该写FOLLOW2 (S)= \ empyset或FOLLOW2(S)= {epsilon}?

1 个答案:

答案 0 :(得分:0)

对于任何k,FOLLOWk(S)都是空的,因为根本没有任何东西可以跟随S.我不知道你的意思是'因为这些字符串是可导出的',但是因为它们无法遵循S它无论如何都是无关紧要的。