Как пропустить "и" с правилом пропуска?

Я работаю над новой грамматикой antlr, которая похожа на nattys и должна распознавать выражения даты, но у меня проблема с правилами пропуска. Более подробно я хочу игнорировать бесполезные "и" в выражениях, например:

Позвоните Сэму, Джону и Адаму и назначьте встречу с Сарой о финансах в понедельник и пятницу.

Первые два "и" бесполезны. Я написал правило ниже, чтобы решить эту проблему, но это не сработало, почему? что я должен делать?

    NW : [~WeekDay];
    UselessAnd : AND NW -> skip;

1 ответ

"Бесполезное И" - это семантическая концепция.

Грамматика о синтаксисе и плохо обрабатывает семантические проблемы. Не соединяйте их вместе.

Предложение: когда вы пишете грамматику для языка, заставьте ваш синтаксический анализатор принять язык таким, какой он есть, бородавки и все такое. В вашем случае я предлагаю вам "собрать" бесполезные AND. Таким образом, вы можете получить грамматику "правильно" легче и прозрачнее для следующего кодировщика, который должен поддерживать вашу грамматику.

Когда у вас есть AST, довольно легко игнорировать (семантически) бесполезные вещи; если ничего другого, вы можете постобработать AST и удалить ненужные узлы AND.

Другие вопросы по тегам