【问题标题】:On FOLLOW-Sets of Grammars关于 FOLLOW 语法集
【发布时间】: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


    【解决方案1】:

    对于任何 k,FOLLOWk(S) 都是空的,因为根本没有任何东西可以跟随 S。我不知道您所说的“因为这些字符串是可派生的”是什么意思,但由于它们不能跟随 S,因此无论如何都无关紧要。

    【讨论】:

    • "derivable" 我认为他的意思是可以从epsilon 获得aaa 之类的字符串。 (据说是因为生产规则允许这样做),如pronouncation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多