0

我已经使用 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
}

检查每种语法并调用我的代码是个好主意吗?

4

1 回答 1

0

你的两个问题的答案:

  1. 不,Java 代码不必嵌入到语法中。您可以改为生成 AST。我的语法很简单,所以我不这样做。
  2. 生成的 AST 可以使用 Observer/Vistor 模式进行处理。谷歌应该为你提供一些东西。
于 2012-11-27T13:07:22.327 回答