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
;
我不知道是否有一种方法可以用一部作品来表达它