2016-10-21 2 views
2

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

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

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

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

Я не думаю, что вы можете составить правила без фрагмента лексера. – Mephy

+0

@Mephy, так что я должен делать? я должен это исправить, потому что он разбирает выражение бесполезно и неправильно. можно ли устранить эту проблему с помощью кодовых блоков? –

+0

Вы не можете отменить слово в лексике ANTLR, только одиночные символы. '[~ WeekDay]' соответствует одному из следующих символов: '~', 'W',' e', 'k',' D', 'a' или' y' (и '~ [WeekDay]' соответствует любому символ, кроме 'W',' e', 'k',' D', 'a' и' y'). Но ANTLR не подходит для анализа естественных языков. Я предлагаю вам выполнить поиск по «обработке естественного языка». Обратите внимание, что Natty не анализирует полные предложения по мере публикации. –

ответ

4

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

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

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

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

+2

Мои слова точно. Не позволяйте синтаксическому инструменту (парсеру) выполнять семантические задачи. Это не сделано для этого. –

Смежные вопросы