2015-01-06 1 views
0

У меня есть список терминалов в моей грамматике Xtext, как я могу проверить, что они работают, и что нет конфликтов токенов?Xtext: Как проверить xtext lexer?

Например следующие выводы:

terminal COMMA: ','; 
terminal QUESTION: '?'; 
terminal IDENTIFIER: ('a'..'z'| 'A'..'Z')+; 
terminal LENGTH: 'LENGTH' | 'l' | 'len'; 
terminal SEMICOLON: ';' ; 

Я хочу, чтобы убедиться, что, например IDENTIFIER и LENGTH не конфликтуют друг с другом, так LENGTH или Len дает фишку LENGTH и не IDENTIFIER. (что неверно в грамматике выше, если предположить, что определенные маркеры будут приоритетными)

ответ

1

Когда я попробую ваш пример и сгенерирую язык, Antlr сообщит о конфликте с токеном.

Выделенные тесты lexer довольно просты в настройке, если вы вводите поставщика в свой тест. Вы также можете заглянуть в xtext-utils, которые ненавидят больше, чем кажется. Но все же вики имеют некоторое представление о том, как могут выглядеть тесты.

+0

@Sebastien Zarnekow да, это нормально для конфликтов, но как насчет более общего тестового примера, где говорят, что я набираю «HelloWorld», и я хочу получить токен идентификатора. Тест будет проходить, если Test («HelloWorld») == Tokens.ID еще не сработает, чтобы я удостоверился, что ive обработал все нужные мне токены. Например, в Antlrworks я вижу маркеры и удостоверяюсь, что это то, что я хочу, чтобы они были после синтаксического анализа. – Har

+0

Я обновил ответ ссылкой на xtext-utils. –

+0

спасибо :) testTerminal (...) в xtext-utils - это то, что им нужно. – Har

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

  • Нет связанных вопросов^_^