Модуль синтаксического анализа EBNF - PullRequest
3 голосов
/ 28 декабря 2011

Знаете ли вы модуль синтаксического анализатора (написанный на Ruby, Python, Javascript ...), который, учитывая список токенов и EBNF -подобную грамматику (передается в виде простой строки),возвращает проанализированное дерево?Наиболее близким к этому я обнаружил SimpleParse , который является хорошей библиотекой, но, к сожалению, он использует одностадийный анализ (без токенизации).Если возможно, я бы предпочел не использовать библиотеки, в которых реализация связана с самим языком ( pyparsing , treetop , ...).

Я не являюсьбеспокоится о лексизировании / токенизации, потому что есть много доступных библиотек (и даже написать свою собственную довольно легко), но реализация парсера ENBF не совсем тривиальная задача.Я проверил вики Python LanguageParsing и протестировал некоторые из них безрезультатно (возможно, я упустил тот, который ищу, их так много ...)

Ответы [ 2 ]

1 голос
/ 15 июля 2015

Если вы знакомы с Clojure вообще, я считаю Instaparse великолепным.Вы можете писать в "ванильном" EBNF в виде многострочной строки (или в отдельном файле, и это даже расширяет EBNF за пределы контекстно-свободных грамматик в контекстно-зависимые грамматики (хотя я не слишком много играл с этим).

0 голосов
/ 23 января 2012

После дополнительных поисков я решил использовать типичный подход lex / yacc, используя Jison для node.js .

...