SLR (1) Включены парсер и эпсилон - PullRequest
14 голосов
/ 28 июня 2011

Предположим, у меня есть следующая грамматика:

S → X  
X → a | ϵ

Если бы эта грамматика не включала ϵ, я бы построил первое состояние как:

S' → .S
S → .X
X → .a

а как же символ ϵ? Должен ли я включить:

X → .ϵ

тоже

Если так ... при создании следующих состояний ... я должен сделать GOTO(Io,ϵ), являясь Io этим первым состоянием?

Ответы [ 2 ]

15 голосов
/ 28 апреля 2012

Я согласен с Говардом.Ваше состояние в DFA должно содержать элемент: x → . Вот DFA, который я нарисовал для парсера SLR (1), который распознает грамматику, использующую два производства epsilon: SLR(1) DFA

10 голосов
/ 28 июня 2011

Поскольку ϵ не является терминалом, вы должны удалить его из своего правила, которое дает вам

X → .

Тогда позже у вас не будет странного GOTO с "символом" ϵ но вместо этого ваше состояние

S' → S.

является принимающим состоянием на вашем графике.

...