Я провел еще несколько исследований и думаю, что нашел решение для 1-го и 2-го вопросов, что касается 3-го, я нашел для него существующее решение здесь, на SO, попытки доказательства написаны ниже:
Начнем с написания трех правил определения грамматики LL(1):
Для каждого производства A -> α | β
с α ≠ β
:
FIRST(α) ∩ FIRST(β) = Ø
.
- Если
β =>* ε
, то FIRST(α) ∩ FOLLOW(A) = Ø
(также, если α =>* ε
, то FIRST(β) ∩ FOLLOW(A) = Ø
).
- Включение
ε
в правило (1) подразумевает, что не более одного из α
и β
может быть получено ε
.
Предложение 1. Нефакторизованная грамматика не является LL(1).
Доказательство:
Если грамматика G не факторизована, то существует продукция в G вида:
A -> ωα1 | ωα2 | ... | ωαn
(где αi
— это i-th α
, а не символы α
и i
), с α1 ≠ α2 ≠ ... ≠ αn
. Тогда мы можем легко показать, что:
∩(i=1,..,n) FIRST(ωαi) ≠ Ø
что противоречит правилу (1) определения, поэтому нефакторизованная грамматика не является LL(1). ∎
Предложение 2. Леворекурсивная грамматика не является LL(1).
Доказательство:
Если грамматика леворекурсивна, то в G существует продукция вида:
S -> Sα | β
Здесь возникают три случая:
Если FIRST(β) ≠ {ε}
то:
FIRST(β) ⊆ FIRST(S)
=> FIRST(β) ∩ FIRST(Sα) ≠ Ø
что противоречит правилу (1) определения.
Если FIRST(β) = {ε}
то:
2.1. Если ε ∈ FIRST(α)
то:
ε ∈ FIRST(Sα)
что противоречит правилу (3) определения.
2.2. Если ε ∉ FIRST(α)
то:
FIRST(α) ⊆ FIRST(S)
(потому что β =>* ε
)
=> FIRST(α) ⊆ FIRST(Sα) ........ (I)
мы также знаем, что:
FIRST(α) ⊆ FOLLOW(S) ........ (II)
по (I)
и (II)
имеем:
FIRST(Sα) ∩ FOLLOW(S) ≠ Ø
а поскольку β =>* ε
, это противоречит правилу (2) определения.
В каждом случае мы приходим к противоречию, следовательно, леворекурсивная грамматика не является LL(1). ∎
Предложение 3. Неоднозначная грамматика не является LL(1).
Доказательство:
Хотя приведенные выше доказательства принадлежат мне, это не мое, это Kevin A. Naudé который я получил из его ответа, ссылка на который приведена ниже:
https://stackoverflow.com/a/18969767/6275103
person
MrGeek
schedule
06.01.2019