LL(1)语法验证

| 令“ 0”是一个语法,使得:
S -> aBa
B -> bB | \\epsilon
其中
\\epsilon
代表空字符串。 在计算出
FIRST
FOLLOW
之后,有没有办法不借助解析表就确定
G
LL(1)
?     
已邀请:
        计算出
G
变量的
FIRST
FOLLOW
集后,就可以计算出length0ѭ的变量和规则的长度1个超前集
LA(1)
。如果满足以下条件,则
G
就是strong6ѭ:
LA(1)(A -> wi) partition LA(1)(A) for each variable A such that A -> wi is a rule.
或者,您可以从强ѭ17语法的定义中证明
G
是强strong6ѭ,而无需计算
FIRST
FOLLOW
集。这通常比计算像
G
这样的小语法的
FIRST
FOLLOW
更容易,也没有那么繁琐。 我没有一本方便的书,因此其中某些定义或计算可能有误。但这就是我要解决的问题。计算
FIRST
FOLLOW
集可得出:
FIRST(1)(S) = trunc(1)({x : S =>* x AND x IN Σ*})
            = trunc(1)({ab^na : n >= 0})
            = {a}

FIRST(1)(B) = trunc(1)({x : B =>* x AND x IN Σ*})
            = trunc(1)({b^n : n >= 0})
            = {ε,b}

FOLLOW(1)(S) = trunc(1)({x : S =>* uSv AND x IN FIRST(1)(v)})
             = trunc(1)({x : x IN FIRST(1)(ε)})
             = trunc(1)(FIRST(1)(ε))
             = {ε}

FOLLOW(1)(B) = trunc(1)({x : S =>* uBv AND x IN FIRST(1)(v)})
             = trunc(1)({x : x IN FIRST(1)(a)})
             = trunc(1)(FIRST(1)(a))
             = {a}
计算变量和规则的长度为1的超前集可得出:
LA(1)(S) = trunc(1)(FIRST(1)(S)FOLLOW(1)(S))
         = trunc(1)({a}{ε})
         = trunc(1){a}
         = {a}
LA(1)(B) = trunc(1)(FIRST(1)(B)FOLLOW(1)(B))
         = trunc(1)({ε,b}{a})
         = trunc(1){a,b}
         = {a,b}

LA(1)(S -> aBa) = trunc(1)(FIRST(1)(a)FIRST(1)(B)FIRST(1)(a)FOLLOW(1)(S))
                = trunc(1){a}
                = {a}
LA(1)(B -> bB)  = trunc(1)(FIRST(1)(b)FIRST(1)(B))
                = trunc(1){b} 
                = {b}
LA(1)(B -> ε)   = trunc(1)(FIRST(1)(ε)FOLLOW(1)(b))
                = trunc(1)({ε}{a})
                = {a}
由于
LA(1)(B -> ε)
LA(1)(B -> bB)
分隔
LA(1)(B)
LA(1)(S -> aBa)
琐碎地分隔
LA(1)(S)
,所以
G
是强
LL(1)
。     

要回复问题请先登录注册