【发布时间】:2026-01-25 15:45:01
【问题描述】:
我已经使用 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
}
检查每个语法并调用我的代码是个好主意吗?
【问题讨论】:
-
首先,您看过 Scott Stanchfield 的视频教程了吗? javadude.com/articles/antlr3xtut
-
第二,如果它是一个复杂的语法,你最好使用 AST 而不是嵌入。我正在做的工作相对简单(解析一些奇怪的 IF/THEN 语句)。
-
我的是一个简单的语法。在我接触 *.com 之前,我已经看到了这一点。由于某些原因,我的视频似乎不起作用。我有一台很旧的笔记本电脑。你能提供以上的答案吗?否则,我必须先修好电脑。我现在没时间。
-
我建议下载 VLC 媒体播放器并使用它来观看那些可下载的视频。在看他们之前,我一直在无用地翻来覆去。
-
已经试过了,还是没有解决办法。是否有另一个网站可以指导我,而不是视频,它们将是文本。我真的没有时间修理我的笔记本电脑。