ninjaef Ответов: 1

Ссылки на динамический грамматический интерпретатор


ищу учебник и в идеале исходный код для простого интерпретатора, который читает грамматический файл, содержащий определения токенов [с использованием регулярных выражений]и разрешенный синтаксис для токенов. Интерпретатор будет считывать входные данные из исходного файла и интерпретировать их на основе указанной грамматики. Решение должно быть способно динамически реагировать на изменение BNF. Например, если BNF модифицируется и интерпретатор запускается снова, то в результате изменения грамматики можно ожидать другого поведения.

например:-

файл: grammar.txt содержит:-

ЖЕТОНЫ
split = "\t " / / tab или hard space для токенов sp0lit
INT = "(0-9)+ " / / целое число: одна цифра, за которой следует любое количество цифр
ADD = "добавить" / / литерал
Минус = "минус" / / литерал

ПРАВИЛА
Expr :: = Term (добавить термин / минус термин)*
Термин:: = (INT | Expr )




наверное, я неправильно понял грамматику, но вы поняли идею ?!

Ищете решение на JAVA пожалуйста

Что я уже пробовал:

просто поищите в google

нашел много проектов по компиляторам, не так много интерпретаторов. проекты компилятора создают исходный код из BNF. Это не то, чего я хочу

интерпретаторы жестко закодированы, поэтому не могут реагировать на изменения в БНФ. Это тоже не то, чего я хочу.

нашел это, но для этого требуется чашка Jlex ?? whatrever они есть, который мутит воду и BNF - это не то, что я узнаю или хочу работать остроумно; он также создает код, который не является тем, что я хочу - это больше похоже на компилятор.

Учебник по преобразователю BNF[^]
заранее спасибо

1 Ответов

Рейтинг:
2

CPallini

Вы могли бы попробовать использовать ANTLR[^].


ninjaef

Мммм. я думаю, что вы, очевидно, не читали, читали вопрос !

ANTLR создает синтаксический анализатор грамматики, синтаксического анализа должен быть составлен при каждом изменении грамматики.

CPallini

Я, конечно, прочел. Вы собираетесь создать мета-компилятор или, возможно, мета-интерпретатор. ANTLR по-прежнему является полезным инструментом для этой цели. Конечно, вы должны предоставить ANTLR фиксированную грамматику ANTLR, но это не имеет значения, потому что это будет грамматика вашего компилятора, а не грамматика, предоставленная в качестве входных данных для вашего компилятора.

ninjaef

Нет, это не ответ на вопрос

Я уже закодировал токенизатор и парсер LL1. Это преобразует нотацию BNF в текстовом файле в дерево синтаксического анализа (точнее, грамматическое дерево). Теперь я застрял.
Обычно для чтения входного текста программы [файла] и его анализа в соответствии с определением языка используются жестко закодированные функции, моделирующие синтаксис языка.
Это совсем другое.
Я хочу иметь возможность изменить BNF, и компилятор (интерпретатор) сможет правильно скомпилировать (интерпретировать) новый текст программы, не требуя от меня изменения кода компилятора (интерпретатора)
Так что ANTLR это не ответ

CPallini

Ладно, тогда удачи.