2015-06-29 2 views
0

Я пробовал использовать очень простую грамматику на сайте hackingoff.com, но я немного запутался в результатах.Является ли эта грамматика LL (1)? http://hackingoff.com/compilers/ll-1-parser-generator дает ошибки

Грамматика я использовал следующее:

1. E -> int T 
2. T -> + int 
3. T -> ε 

Я сделал некоторые ручной расчет и разработаны следующие:

First(int) = {int} 
First(+) = {+} 
First(ε) = {ε} 
First(E) = {int} 
First(T) = {+,ε} 

Follow(E) ⊆ Follow(T) 
First(T) ⊆ Follow(int) 
Follow(E) ⊆ Follow(int) 
First(int) ⊆ Follow(+) 
Follow(E) ⊆ Follow(int) 

=> 

Follow(E) = {$} 
Follow(T) = {$} 
Follow(int) = {+,$} 
Follow(+) = {int} 

Тогда я построил парсинга таблицу:

int  +  $ 
    ------------------------ 
E | int T    | 
T |   +int  ε | 
    ------------------------ 

Но когда я использую эту грамматику на сайте hackingoff.com, она говорит - от того, что я хочу rstand - что грамматика имеет некоторые ошибки. В таблице, которая отображается на сайте следующее:

[0,"int","+","$"] 
[0,0,0,0] 
[0,1,5,4] 
[0,5,2,3] 

Из того, что я понял из описания на сайте есть ошибки, когда - в моем случае - значение в ячейке таблицы больше 3 Очевидно, проблема в ячейках без какой-либо продукции в моей таблице. Когда я вручную построил таблицу синтаксического анализа там, где нет столкновений в ячейке, так почему это дает мне ошибки? Наверное, я пропустил что-то фундаментальное?

ответ

0

Эти записи не указывают на ошибки в вашей грамматике. Скорее, они идентифицируют синтаксические ошибки в анализируемом тексте. Когда конечный автомат встречает значение ошибки вместо нового номера состояния, он сигнализирует синтаксическую ошибку.

Кстати, ваша грамматика принимает только два входа: int и int + int. Возможно, вы захотите сделать T рекурсивным.

+0

Спасибо за ваш ответ! Я знаю, что моя грамматика была очень фундаментальной, но я просто хотел попробовать инструмент с некоторым простым выражением. –

Смежные вопросы