我有以下语言要定义,显然 ANTLR 并没有轻易泄露它的秘密。
ui {
screen X {
input()
checkbox()
}
}
model {
// any text
// even {}
}
我会定义
ui: UI OBR (screen)* CBR;
screen: ....
model : MODEL modelBody;
modelBody: BRACKETED_TEXT;
OBR: '{';
CBR: '}';
...
TEXT : ('a'..'z'|'A'..'Z'| '_' | '-' )+ ;
BRACKETED_TEXT : OBR ( ~(OBR|CBR ) | BRACKETED_TEXT )* CBR;
问题是它MismatchedTokenException
在击中ui {
零件时会抛出一个。如果我删除 BRACKETED_TEXT 令牌一切顺利,那么我认为它一定是它无法知道它在解析时是否可以匹配 OBR 或 BRACKETED_TEXT 的事实ui {
。
这很好,但我怎样才能为 AST 构建 ASTui {...}
和自由文本model {..}
?