我正在使用ANTLR4语法来解析SQLite查询。但是,lexer返回一个空的令牌流,即使我使用的是一个简单的选择查询。
这会产生以下错误:
atorg.antlr.v4.runtime.Lexer.nextToken(Lexer.java:138)
atorg.antlr.v4.runtime.BufferedTokenStream.fetch(BufferedTokenStream.java:186)
atorg.antlr.v4.runtime.BufferedTokenStream.sync(BufferedTokenStream.java:169)
atorg.antlr.v4.runtime.BufferedTokenStream.setup(BufferedTokenStream.java:271)
atorg.antlr.v4.runtime.BufferedTokenStream.lazyInit(BufferedTokenStream.java:266)
atorg.antlr.v4.runtime.CommonTokenStream.LT(CommonTokenStream.java:116)
atorg.antlr.v4.runtime.Parser.enterRecursionRule(Parser.java:677)
atantlr.antlr4.SQLIte.SQLiteParser.expr(SQLiteParser.java:5109)
atantlr.antlr4.SQLIte.SQLiteParser.expr(SQLiteParser.java:5100)
atantlr.antlr4.SQLIte.LexerParser.main(java.lang.IllegalStateException)
这是主类.java代码:
import antlr.antlr4.SQLIte.*;
import antlr.antlr4.SQLIte.SQLiteParser.ExprContext;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class LexerParser {
public static void main(String[] args) throws Exception {
// The list that will hold our function names.
final List<String> functionNames = new ArrayList<String>();
// The select-statement to be parsed.
String sql = "SELECT * FROM table";
// Create a lexer and parser for the input.
InputStream stream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8), 0, 0);
ANTLRInputStream antlrTemp = new ANTLRInputStream(stream);
SQLiteLexer lexer = new SQLiteLexer(antlrTemp);
// SQLiteLexer lexer = new SQLiteLexer(antlrTemp);
CommonTokenStream cts = new CommonTokenStream(lexer);
System.out.print(cts.getTokens());
SQLiteParser parser = new SQLiteParser(cts);
ExprContext theExpr = parser.expr();
System.out.println("found expr " + theExpr.toString());
我哪里错了?
语法链接
如果它是Maven项目的一部分,这段代码就可以工作。我之前试图将它作为Java项目来运行。
谢啦
我需要antlr4来解析一些简单的HTML文件。我已经将语法分为解析器语法和lexer语法,这样我就可以对标记内部的东西( )使用孤岛语法,如“确定的ANTLR4引用”中所述。antlr4反复告诉我“令牌识别错误”。 解析器语法: 示例HTML文件: ANTLR4的输出:
所以我在第37行的else if中出现了错误,我不知道为什么会发生这种情况。IDE说:“令牌”else“语法错误,删除这个令牌”。多谢了。
谢谢!!
问题内容: 这是我的代码一直在给问题。 我不知道为什么要这么做。 编辑: 我已根据您的要求进行了编辑,以查看更多代码。 问题答案: 您要在课程外声明一个字段: 它必须放在一个类中:
问题内容: 创建新类时遇到了此类错误。下面是我的代码: 谁能帮助我弄清楚实际发生了什么,并提出解决建议?非常感谢您的帮助 真诚的 问题答案: 该声明 应该在代码块中,例如方法,构造函数或实例初始化程序中,而不是在类块中
我不知道该怎么做,是不是有一个错误,我遵循了所有的步骤,在教程中,我正在看。它只是说删除令牌