[英]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.