Я пытаюсь взаимодействовать, в основном, написание интерпретатора, для языка у меня есть только API через DLL, что позволяет мне скомпилировать файлы или строки, проверить ошибки синтаксиса и т. Д. . Я бы хотел, чтобы синтаксис синтаксического анализа. У меня есть пользовательский уровень ручного уровня (т. Е. Нет реальной грамматики), и я уже написал неполный синтаксический анализатор с использованием свободной грамматики контекста, которую я написал, и lex yacc. Но он все еще задыхается, и я добавляю столько странного регулярного выражения и исключений из правил там, что, я думаю, я никогда не доберусь до него таким образом.взаимодействовать с сторонним распознавателем ANTLR
Я посмотрел (PE explorer) в DLL и нашел записи экспорта, соответствующие выражению, основанному на antlr3-lexer-parser-распознавателе (ну, несколько распознавателей). Я решил построить интерфейс для функций в dll (используя ctypes в Python). Я начал с пустой пустой грамматики, сгенерировал заголовки, затем «скомпилировал» заголовки antlr3 * .h, LangLexer, LangParser на python с ctypesgen, а затем восстановил пример, найденный on Stack Overflow. Я продвигаюсь, но не уверен, как я собираюсь создавать дерево синтаксиса, не зная полной грамматики (хотя я знаю название токенов). Есть какие-то подсказки?
И почему вы не можете построить грамматику из справочной документации langauge? (Очевидно, авторы DLL сделали). Я сомневаюсь, что вы сможете легко извлечь грамматику из двоичного файла DLL, что похоже на то, что вы начинаете пытаться делать. Вы, конечно, не можете создать дерево синтаксиса без грамматики. ... вы пытаетесь построить грамматику для Matlab? –
Я сделал грамматику из документа (не в antlr, но в PLY), но он не обрабатывает причуды языка хорошо (материал, который на самом деле даже не объясняется в документе, как они обрабатывают его AFAIK). Много обратного отслеживания, несколько уровней разбора. По-видимому, даже сами разработчики имели проблемы с написанием dll (я вижу, что они просят помощи на некоторых интернет-форумах). Это язык от крупной компании за свои проприетарные продукты, меня больше интересует это для любопытства и я не профессиональный программист – rienafairefr
Я создаю парсеры для жизни, в том числе для проприетарных языков. У них (особенно патентованных) всегда есть такие причуды. Единственное хорошее средство - вы можете быть экспертом на этом языке; вы можете тогда угадать довольно хорошее предположение о таком материале. В конце концов, вы можете только догадываться о грамматике и запускать много кода, если можете получить его, через парсер. Я сомневаюсь, что вы собираетесь извлечь грамматику из кода в DLL без сверхчеловеческих усилий в понимании того, как ANTLR генерирует код и как этот код компилируется. –