Antlr4 我怎样才能写出一个符合“的语法?”;x乘以y乘以z的a;?
我正在设计一种低标点语言,希望使用以下语法支持数组声明:Antlr4 我怎样才能写出一个符合“的语法?”;x乘以y乘以z的a;?,antlr4,Antlr4,我正在设计一种低标点语言,希望使用以下语法支持数组声明: 512 by 512 of 255 // a 512x512 array filled with 255 100 of 0 // a 100-element array filled with 0 expr1 by expr2 by expr3 ... by exprN of exprFill 这些数组声明只是众多表达式中的一种 我很难想出如何写语法规则。我已将语法简化为最简单的东西,重现了我的麻烦: grammar Dimensio
512 by 512 of 255 // a 512x512 array filled with 255
100 of 0 // a 100-element array filled with 0
expr1 by expr2 by expr3 ... by exprN of exprFill
这些数组声明只是众多表达式中的一种
我很难想出如何写语法规则。我已将语法简化为最简单的东西,重现了我的麻烦:
grammar Dimensions;
program
: expression EOF
;
expression
: expression (BY expression)* OF expression
| INT
;
BY : 'by';
OF : 'of';
INT : [0-9]+;
WHITESPACE : [ \t\n\r]+ -> skip;
当我输入第1部分的第10部分时,我得到了我想要的解析:
第10页,共1页
当我输入20乘10的1
时,中间的表达式
非终结符向上发出10的1
,没有留下任何东西来匹配规则的表达式
:
20乘10,共1次“>
我得到以下警告:
line 2:0 mismatched input '<EOF>' expecting 'of'
第2:0行不匹配的输入“”应为'of'
我想看到的解析是
(program (expression (expression 20) by (expression 10) of (expression 1)) <EOF>)
(由(表达式1)的(表达式10)编程(表达式(表达式20)))
有什么方法可以让我重新制定语法来达到这个目的吗?我觉得我需要的是BY和OF之间的正确关联,但我不知道如何在两个操作符之间表达这一点。经过一些非智力实验后,我找到了一些生成我所需解析的结果:
expression
:<assoc=right> expression (BY expression)+ OF expression
|<assoc=right> expression OF expression
| INT
;
表达式
:表达式(按表达式)+OF表达式
|表情
|INT
;
我不知道是否有一种方法可以用一部作品来表达它