2014-11-28 1 views
3

Как читать многострочный текст в ANTLR до тех пор, пока не появится специальный символ. Как и в тексте ниже: -Чтение многострочного значения в ANTLR до появления специального символа

@Description(" 
Hi There I am. 
") 

мне нужно прочитать его как ключ -> @Description и значение -> «Привет Там я».

Я попробовал его с помощью следующей грамматикой

KEY 
: '@' [a-zA-Z] (~[(\r\n] | '\\)')* 
; 


VALUE 
: '(' ~[\r\n]* 
; 

Я пытался много вариантов грамматики VALUE, но не повезло.

+0

Правило VALUE выглядит странно. Посмотрите на режимы lexer или не пытайтесь разрешить его только с помощью двух правил lexer (например, добавьте правила парсера). – Onur

ответ

1

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

declaration: KEY '(' STRING ')' ; 
KEY : '@' [a-zA-Z]+ ; 
STRING: '"' (~'"')* '"' ; 
WS: [ \t\r\n] -> skip; 

declaration это правило синтаксического анализа. Он состоит из KEY (@, за которым следует буква), открывающей скобки, STRING (любой текст между кавычками) и закрывающей круглой скобки. KEY и STRING - правила лексера.

Знайте, что правило STRING не позволит вам избежать символов. Если вам нужно, чтобы быть в состоянии избежать цитату с обратной косой черты (а также обратной косой черты с обратной косой чертой), используйте следующее правило вместо:

STRING: '"' ('\\' ["\\] | ~'"')* '"' 
Смежные вопросы