Примерно раз в год мне приходится разрабатывать или, по крайней мере, составлять грамматику и синтаксический анализатор, который является постоянной моей рабочей жизнью.
Каждый раз, когда я сталкиваюсь с этой задачей, примерно один раз в год, я, довольно lex/yacc (flex/bison resp.) парень, рассматриваю или пересматриваю альтернативы для простого lex/yacc, а после некоторых размышлений и пытаюсь вернуться к простому lex/yacc.
Поскольку у меня есть CORBA-сервер в хабе приложения, я могу позвонить из парсера, написанного почти на каждом языке, поэтому на этот раз я посмотрел
- antlr4 (Java) и antlr3 (Java, но имеет RT для других языков),
- SableCC (Java),
- Parse:: EBNF, Parse:: Yapp and Marpa (Perl),
- и SimpleParse (Python),
Для меня тандем antlr4 с antlrworks выглядел самым перспективным кандидатом, но я еще не убежден, что время, потраченное на то, чтобы попасть в него, будет амортизировано в конце.
Грамматика, которую я должен разработать, похожа на SQL DDL (с точки зрения структуры, а не с точки зрения субъекта).
Почему любой из альтернатив облегчит мою задачу, чем использование простого lex/yacc?