Как пропустить "и" с правилом пропуска?
Я работаю над новой грамматикой antlr, которая похожа на nattys и должна распознавать выражения даты, но у меня проблема с правилами пропуска. Более подробно я хочу игнорировать бесполезные "и" в выражениях, например:
Позвоните Сэму, Джону и Адаму и назначьте встречу с Сарой о финансах в понедельник и пятницу.
Первые два "и" бесполезны. Я написал правило ниже, чтобы решить эту проблему, но это не сработало, почему? что я должен делать?
NW : [~WeekDay];
UselessAnd : AND NW -> skip;
1 ответ
"Бесполезное И" - это семантическая концепция.
Грамматика о синтаксисе и плохо обрабатывает семантические проблемы. Не соединяйте их вместе.
Предложение: когда вы пишете грамматику для языка, заставьте ваш синтаксический анализатор принять язык таким, какой он есть, бородавки и все такое. В вашем случае я предлагаю вам "собрать" бесполезные AND. Таким образом, вы можете получить грамматику "правильно" легче и прозрачнее для следующего кодировщика, который должен поддерживать вашу грамматику.
Когда у вас есть AST, довольно легко игнорировать (семантически) бесполезные вещи; если ничего другого, вы можете постобработать AST и удалить ненужные узлы AND.