antlr4 - 在 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 的第一个问题(至少在过去几年中),所以我不知道它是否符合所有规则。
解决方案
推荐阅读
- python - 上传到 s3 后从本地服务器删除文件
- java - 在 PostgreSql 中批量更新或删除哪个更高效?
- typescript - Typescript 的复杂泛型类型
- python - /lib64/libc.so.6:未找到版本“GLIBC_2.14” - 使用 pyinstaller 构建应用程序时出错
- mysql - Sqoop 根据行键连接列值
- php - PHP:dompdf 不加载自定义字体
- python - Python loc + isin 返回 FutureWarning(元素比较失败)
- python - PyCharm 导入错误(chatterbot / Flask)
- lua - 如何使函数接受动态参数?
- c - Combine 2 Arrays In C Special Case