首页 > 解决方案 > 在 ANTLR4 语法中将变量传递给字符串模板

问题描述

我正在尝试使用 ANTLR4 详细说明编程语言语法。我在使用变量时遇到了这个问题:

假设我有这个规则->

'移动' ID '<' ('x' ':' expr)? ',' ('y' ':' expr)? '>' #翻译统计

其中 ID 是屏幕中对象的 ID,而 expr 是另一个规则,可以是其他表达式(例如 expr + expr)的和、减法、除法、乘法等,或者是双精度数,或者是一个变量的 ID指向哈希图中的双精度。这是必要的,因为我需要用我的语言处理数字表达式。

问题是当我编译用我的新语言编写的代码时,例如,我用组合语言声明一个新变量,后来我不能将它作为变量引用,而只能通过变量的值作为这是在编译时。

例如:

object o1 := new object
shift_x := 1
shift_y := 0.5
move o1 <x:shift_x, y:shift_y> 

上面的代码将在一个循环中,假设 o1 将在 x 轴上移动 shift_x,在 y_轴上移动 shift_y,如果 shift_x 改变它的值,这将影响 o1 的移动方式。

但是,当我使用 python 作为辅助语言编译代码时,输​​出是:

o1 = Obj()
shift_x = 1
shift_y = 0.5
o1.move(x=1,y=0.5) # Wrong!! Supposed to be -> o1.move(x=shift_x,y=shift_y)

为了解释我的语言,我使用了一个访问者,对于 expr 规则,我返回 Doubles,所以我认为在编译时将数值写入输出是很自然的,但是有没有一种简单的方法来处理它?

*这是我在 Stack Overflow 的第一个问题(至少在过去几年中),所以我不知道它是否符合所有规则。

标签: antlr4stringtemplate

解决方案


推荐阅读