我想创建自己的编程语言,并且我想用括号来实现运算符(和,或),例如这样。
x = 1
x2 = 2
x3 = 0
x4 = 0
// tmpMap = {x = 1 , x2 = 2, x3 = 0 , x4 = 0}
r1 = ((x and x2) or x3) and x4 // System.out.println("false");
r2 = ((x and x2) or x3) or x4 // System.out.println("true");
我的问题是如何定义此规则以及如何在监听器中评估它以显示(true | false)。 有人可以给我一个解决这个问题的简单原型(prototype)吗? 预先感谢您。
最佳答案
您想要编写一个定义表达式、术语和因子的语法。表达式定义为“因子±因子”,因子为“项[*或/]项”。术语可以是数字或括号内的表达式,即“(表达式)”。
然后,只需通过解析语言的方式,即可获得运算符优先级。如果您的语言仅支持“and”和“or”作为运算符,则“and”相当于“*”,“or”相当于“+”,因此:
expression = factor OR factor
factor = term AND term
term = identifier | ( expression )
参见this answer完整的语法定义(对于算术运算符,但您可以轻松地将它们替换为 boolean 运算符)
关于java - 如何使用 ANTLR 4 实现逻辑运算符(and、or)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61709491/