【发布时间】:2015-03-27 16:10:39
【问题描述】:
我在 C# 和 Java 环境中都使用 ANTLR 4 拆分语法,除非我将函数 NotifyErrorListeners 更改为使用驼峰式 notifyErrorListeners,否则我无法编译这两种语言的语法。
C# 示例:
statement
: expression SEMICOLON
| { NotifyErrorListeners("; expected."); } expression // They forgot the semicolon.
Java 示例:
statement
: expression SEMICOLON
| { notifyErrorListeners("; expected."); } expression // They forgot the semicolon.
我的 C# ANTLR 环境是通过 Nuget 提取的:Antlr4 4.2.2-alpha001
我的 Java ANTLR 环境是从 antlr.org 下载的:antlr-4.5-complete.jar
有没有一种方法可以修改我的语法,以便在切换语言时不必修改它?有没有更好的功能可以促进这两种环境?
【问题讨论】:
-
C# 有一个预处理器——可以在这里使用吗? (我从未在 C# 中见过 antlr,所以请原谅我的无知。)
-
我可以使用 C# 预处理器,但是根据我对 java 的有限经验,我找不到一种使它与两者兼容的方法。目标是在不改变语法本身的情况下使语法在两种环境中都能编译。
-
要编译 C#,如果语法是为适合 Java 编写的,则需要
#define NotifyErrorListeners notifyErrorListeners。 -
据我所知,C# 无法使用#define 定义宏。它仅限于定义诸如 DEBUG 之类的标记,以便在 #if 块中使用。我错过了重点吗?
-
没有。我只是认为这可能是可能的。 - 使用 C 预处理器可能是一种选择。 - 但是将静态方法定义为包装器呢?如果它不在 Java 中使用,它不会受到伤害。 - 最后:为什么你需要这两种语言? Java 应该在 C# 所在的地方可用。