繁体   English   中英

LL(1) 语法和 first & follow 集

[英]LL(1) grammar and first & follow sets

我认为以下实际上是 LL(1),但我不是 100% 确定。 我们是否能够证明这是 LL(1) 语法,然后,给出的第一个和后续集合是否正确? 我真的不明白如何真正获得跟随集。

语法

expr::= term {addop term}
term::= 因子 {mulop 因子}
因子::= 变量| 无符号数| (表达式)
变量::= 标识符
添加::= + | -
mulop::= * | /

第一套

First(expr) = 标识符,无符号数,(
First(Term) = 标识符,无符号数,(
First(Factor) = 标识符,无符号数,(
第一个(变量)= 标识符
首先(添加)= +,-
第一(mulop) = *, /

跟随集

Follow(Expr) = First(term)
跟随(期限)= 首先(因素)

不明白如何做以下组的Follow sets
跟随(因子)= 第一(“)”)=)
跟随(变量) 跟随(addop) 跟随(mulop)

第一组是正确的。

跟随套装:

FOLLOW(A) of non-terminal A is the set of terminal symbols that can follow in the derivation sequence

FOLLOW(expr):检查它出现在生产右侧的位置。 有factor:=(expr),当我们在推导中采用这个产生式时,expr后面是),expr是一个开始符号。

   FOLLOW(expr)={),$}

相似地,

   FOLLOW(term) = FIRST(addop) U FOLLOW(expr) = {+,-,),$}
   FOLLOW(factor) = FIRST(mulop) U FOLLOW(trem) = {*,/,+,-,),$}
   FOLLOW(addop) = FIRST(term) = {identifier,unsigned number,(}
   FOLLOW(multop) = FIRST(factor) = {identifier,unsigned number,(}
   FOLLOW(Variable)= FOLLOW(factor) = {*,/,+,-,),$}

其中 $ 是输入的结尾。

给定文法是 LL(1)。 第一组因子是不相交的,我们不需要检查 FOLLOW 组,因为没有 epsilon 产生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM