compiler-construction - 如何将语法转换为自上而下的可解析语法

标签 compiler-construction grammar context-free-grammar ll left-recursion

我有这部分语法

S ‐> S a | S b a | a | S b c S | S b c b | c S | c b

我需要使用它来创建一些 SD 集,然后在解析表上使用它。

但是,在此之前,我应该将其转换为自上而下的可解析语法。

我的问题是你是怎么做到的?我知道你必须摆脱左递归,但我该怎么做呢?

我阅读了维基百科文章和其他一些来自大学的文章,但我不知道应该怎么做。

你能帮我一些忙吗?

最佳答案

这是一般算法:

每个规则都喜欢

A -> Aa
A -> b

成为

A -> bA'
A'-> aA'
A'-> e

其中 e 表示空(epsilon)。

所以对于你的情况,你可以从

开始
S ‐> S a | S b a | a   =>   S -> aS' , S' -> aS' | baS' | e

然后想出剩下的

关于compiler-construction - 如何将语法转换为自上而下的可解析语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035807/

相关文章:

c# - C# 是否被视为上下文无关语言?

compiler-construction - 您将如何编写一种简单的编程语言? [复制]

C# 编译器应该发出警告但不发出警告?

python - 如何删除每个非字母字符的单词

python - 从分析树中提取 Chomsky-normal-form 文法

grammar - LL(1) 预测解析——避免左递归

c - 使用简单整数和内存大小的正确方法

java - 在哪里修补程序分析期间收集的信息

c++ - `i pos;` 在 C++ 中是什么意思?

algorithm - 从上下文无关文法生成字符串