我使用ANTLR在我的词法分析器中匹配文本时遇到问题。 我在这个标签中有类似html的标签和属性。例如:
<tag name=" some text {! ... } some text {! ... } some text ">
属性值(在" ... "
内)和带有感叹号({!
)和近大括号(}
)的外部开括号内的所有内容都是文本(ATTR_TEXT
)。
我试图这样做,但它没有按照我的预期工作,因为当lexer找到一个否定的符号时,它会将文本分成两个或多个ATTR_TEXT标记,具体取决于已建立的否定符号的数量:
...
OPEN : '<' ->pushMode(INSIDE);
...
mode INSIDE;
DQUOTE : '"' ->pushMode(INSIDE_DOUBLE_QUOTES);
...
mode INSIDE_DOUBLE_QUOTES;
OPEN_EXPR : '{!' ->pushMode(INSIDE_EXPR);
ATTR_TEXT : ~["{!}]+ ;
CLOSE_QUOTE : '"' ->popMode;
mode INSIDE_EXPR;
CLOSE_EXPR : '}' ->popMode;
...
提前致谢!