java - 如何使用 ANTLR 4 实现逻辑运算符(and、or)?

标签 java antlr4

我想创建自己的编程语言,并且我想用括号来实现运算符(和,或),例如这样。

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/

相关文章:

java - Spring配置中的条件语句

java - 如何在 Gradle 下构建 Visual Studio 项目?

java - netbeans 8.0 使用 ssh 存储库的凭据不正确

java - 如何在 ANTLR 4 中传递多个字符串不同的解析规则?

c# - 如何使用 Eclipse 构建 Antlr4 C# 语法?

java - JTable 不会跨越 JFrame 的边界

java - import在gradle项目中用红色下划线

antlr - 我的词法分析器 token 操作未被调用

parsing - 如何使用 ANTLRv4 仅解析一些评论

ANTLR4 : mismatched input