ANTLR4, как отделить Lexer subrule - PullRequest
       23

ANTLR4, как отделить Lexer subrule

0 голосов
/ 30 августа 2018

Допустим, у меня есть правила Lexer, подобные этим:

EMPTY_LITERAL: '\'' '\'';
LITERAL: '\'' (ESCAPED_SEQ|.)*? '\'' ;
fragment ESCAPED_SEQ: '\\\'' | '\\\\'

и правило синтаксического анализатора, подобное этому:

literal:  EMPTY_LITERAL #EmptyLiteral | LITERAL #LiteralWithContent;

Я хочу получить содержимое LITERAL без кавычек в парсере. Конечно, я могу удалить кавычки, но мне интересно получить эту строку без кавычек.

Если я переместу внутреннее правило в LITERAL, правило не будет соответствовать должным образом (будет соответствовать только 1 символу). Если я перевожу LITERAL как правило синтаксического анализа, я могу сопоставить ESCAPED_SEQ, но это не то, что я хочу. Есть ли способ назвать внутреннее правило в лексере?

1 Ответ

0 голосов
/ 30 августа 2018

Есть ли способ назвать внутреннее правило в лексере?

Нет, нет. В ANTLR 4 невозможно назвать или получить доступ к определенным частям токена, а также нет разумного способа превратить LITERAL в правило синтаксического анализатора.

Так что удаление цитат из текста токена - ваш единственный выбор.

...