我有一个这样的词法分析器语法:
lexer grammar MyGrammarLexer;
OPEN : '{' -> pushMode (textMode);
OTHER : . -> skip ;
mode textMode ;
CLOSE : '}' -> popMode ;
TEXT : . ;
还有这样的语法:
parser grammar MyGrammarParser;
options {
tokenVocab = MyGrammarLexer ;
}
parse : OPEN text CLOSE EOF ;
text : TEXT* ;
在我将'}'
作为文本/ TEXT的一部分之前,这还可以。
因此,有一种标准的方法来管理此问题吗?
我认为应该有一种转义的方式,例如在解析的文本中包含'\}'
,但我找不到示例。
答案 0 :(得分:1)
将\}
识别为}
内的TEXT
字符会很好。因此,您必须考虑在\
中如何表示TEXT
的问题。常见的答案是使用\\
。
但这就是您的全部决定。如果需要,可以使用\
以外的其他引号字符。您可以坚持使用十六进制转义符,例如在URL中,其中%xx
代表字符代码为xx
的十六进制字符。您可以使用HTML样式的实体,尽管在这种情况下,您需要考虑自己的名称,也许是&close;
。 (或者您可以只使用}
之类的数字实体。)
设计输入格式(或语言)的一部分包括回答这样的问题。 ANTLR不会强加任何答案。它所做的就是为您提供一种机制,以实施您认为合适的任何报价规则。这种机制一点也不神秘;它仅包含编写您将要识别的模式,以及在需要时将该模式与操作相关联(例如,将带引号的字符插入TEXT)。