我正在尝试使用 ANTLR 编写语法,但我无法理解 antlr 如何与递归选择一起工作。
我阅读了很多文章和论坛,但无法解决我的问题......
这是我语法的一小部分:
grammar MyGrammar;
ComponentRef :
IDENT ('[' Expression (',' Expression)* ']')?
;
Expression:
ComponentRef ('(' FunctionArguments ')')?
;
FunctionArguments:
Expression (',' Expression)*
;
IDENT: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
我仍然不明白为什么它不起作用......没有歧义!不是吗?
以下是我的语法应该使用的一些代码示例:
a
a[b,c]
a[b[c], d]
func(a)
func(a,b,c)
func[a](b,c)
func(a[b], c[d])
func[a](b[c])
提前谢谢你!