Antlr Grammar Java代码

时间:2012-11-27 12:03:06

标签: java antlr

我使用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: Is there a simple example?它显示了一个简单的例子。但是,在我的情况下,语法很大,并且更喜欢导入和使用语法。我有很多规则:

例如,上面的语法生成了这段代码:

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
}

最好检查每种语法并调用我的代码?

1 个答案:

答案 0 :(得分:0)

你的两个问题的答案:

  1. 不,Java代码不必嵌入语法中。您可以生成AST。我的语法很简单,所以我不这样做。
  2. 可以使用Observer / Vistor模式处理生成的AST。谷歌应该为你提供一些东西。