2015-05-15 3 views
0

Я искал реализацию контекстных бесплатных грамматик в java для выполнения некоторых операций над ними, связанных с курсом проектирования компиляторов, например, LL (1), разглашением SLR и тому подобным, и я нашел это implementation. Основной метод грамматики - это чтение грамматики из файла, где я пишу грамматику и код для ее анализа, проблема в том, что я не могу правильно писать грамматику для понимания кода, например, я не могу написать переход на epsilon всякий раз, когда я пишу epsilon или ε, он считается терминалом. Может кто-нибудь, пожалуйста, помогите мне написать грамматику в правильном направлении для кода, чтобы понять, например, эту грамматику:понимание реализации грамматики в java

E -> T E' 
E' -> + T E' | epsilon 
T -> F T' 
T' -> * F T' | epsilon 
F -> (E) | id 
+0

Похоже, что эта программа принимает только символы 'char' как имена (я забыл, что они должны быть вызваны), вы пытались изменить 'E'' на' e' и 'T'' на' T'? –

ответ

0

Вы могли бы сделать нетерминальное для пустой строки и есть, что терминал производит пустую строку литерала. Например, EMPTY -> '' и везде, где требуется пустая строка, просто используйте EMPTY.

0

Если вы посмотрите в файл кода, который вы связаны, он в комментарии, что правильное обозначение использовать это:

ETF грамматика:
E -> E + T
T -> T * F
F -> (E) | char.

и

Модифицированная версия ETF грамматики, которая является LL (1):
E -> Te
e -> +Te | ""
T -> Ft
t -> *Ft | ""
F -> (E) | char.

Это было вставлено прямо из файла, который вы связали. Разве это не ответ?