在编译器设计的悬空 else 问题的情况下,是否有理由在消除歧义之前将其保留?
我们正在将 CFG 转换为 LL(1) 语法,因此我的教授要求我们首先消除递归,然后消除左因子,然后消除语法中的歧义。但是,根据我的阅读,通常首先消除歧义。我不确定如何在左分解后消除歧义。
这就是我在左分解后得到的结果:
S -> i E t S S' | other
S' -> e S | epsilon
但是,据我了解,消除歧义需要重写语法,因此语法总是会产生类似的结果,对吧?
S -> U | M
M -> i E t M e M | other
U -> i E t U'
U' -> M e U | S
还是有其他方法可以做到这一点?据我所知,这是从悬空的 else 中消除歧义的唯一方法。