我尝试使用 ANTLR 编写具有以下细节的语法。
它可以解析如下标识符:
foo > bar > 67
其中 foo > bar 是标识符,因为 if > 后跟一个字母,它包含标识符,否则它是大于运算符。
我应该解析类似的东西
((a = 1) AND (b = 2)) OR (c = 3)
其中 ( ) 是必要的。
我对这个主题和 ANTLR 真的很陌生,希望有人能提供帮助。
我目前有这个语法
grammar testgrammer;
start : statement EOF;
statement
: operation (AND operation)*;
operation
: '(' ID OPERATOR INT ')';
AND : 'AND';
OPERATOR: '=' | '>';
ID
: ('a'..'z'| 'A'..'Z')+ (WS '>' WS ('a'..'z' | 'A'..'Z')+)?
;
WS
: ' '+ {skip();}
;
INT : '0'..'9'+
;
但我不知道如何在 id 中的 > 和作为运算符的 > 之间切换。