我想创建自己的编程语言,我想用括号实现运算符(和,或(,例如。
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(。有人能给我一个这个问题的简单原型吗?。提前谢谢。
您想要编写一个定义表达式、术语和因子的语法。表达式定义为"因子±因子",因子为"术语[*或/]术语"。术语是一个数字或带括号的表达式,即"(表达式("。
然后,只需通过解析语言的方式,就可以获得运算符优先级。如果你的语言只支持"and"one_answers"or"作为运算符,那么"and"等价于"*","or"等价于"+",因此:
expression = factor OR factor
factor = term AND term
term = identifier | ( expression )
请参阅此答案以获得完整的语法定义(对于算术运算符,但您可以很容易地将它们交换为布尔运算符(