我已经使用 Antlr3 定义了一种语法语言。ANTLRWorks 生成词法分析器和解析器代码。
下面是一个示例语法:
grammar i;
@header {
package com.data;
}
elements : (value (',' value)*)?;
insert : 'INSERT INTO table' 'VALUES' '('elements')'';';
WS : (' '|'\t'|'\f'|'\n'|'\r')+ {skip();}; // handle white space between keywords
上面的语法只是一个例子。我实际上正在为我的公司开发一个大语法。
我已将语法导入项目的 com.data 包中,可以使用生成的 Lexer 和 Parser。我想知道的:
- Java 代码是否必须在语法中编写?
- 我更喜欢使用 Lexer 和 Parser,并在另一个类中而不是在语法中编写 Java 代码。
根据以下帖子:ANTLR:有一个简单的例子吗?它显示了一个简单的示例。但是,在我的情况下,语法很大,并且希望语法被导入和使用。我有很多规则:
例如,上面的语法生成以下代码:
public void insert() throws RecognitionException;
处理这个问题的最佳方法是什么?我有很多规则,它们是 void 的返回类型。
每条规则在 Java 术语中都有特定的含义。我认为最好的方法不是获取语法然后检查调用我的代码。例如:
String input = "INSERT INTO table VALUES (null);";
if(input.equals("INSERT INTO table VALUES (null);") {
insertData();
}
public void insertData() {
// insert data into database
}
检查每种语法并调用我的代码是个好主意吗?