有没有一种方法可以在自由文本中转义或管理令牌



我有一个像这样的lexer语法:

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的一部分。因此,是否有一种标准的管理方法?我认为应该有一种方法来转义它,比如在解析的文本中使用'}',但我找不到示例。

}识别为TEXT中的}字符会很好。你必须考虑如何在TEXT中表示的问题。一个常见的答案是使用\

但这都是你的决定。如果你愿意的话,你可以使用以外的引用字符。你可以坚持使用十六进制转义,比如在URL中,%xx表示字符代码为十六进制xx的字符。您可以使用HTML样式的实体,尽管在这种情况下,您可以想出自己的名称,可能是&close;。(或者你可以只使用像}这样的数字实体。(

设计输入格式(或语言(的一部分包括回答这样的问题。ANTLR没有试图强加一个答案;它所做的只是为您提供一种机制来实现您认为合适的引用规则。这种机制一点也不神秘;它只包括编写一个你会识别的模式,并根据需要将该模式与一个动作关联起来(例如将引用的字符插入文本(。

相关内容

  • 没有找到相关文章

最新更新