我正在学习antlr。我已经使用Java了,但无法在C#中使用任何东西。我使用The Definitive Antlr Book中的一个例子创建了我能找到的最简单的案例,我仍然遇到问题。
这是我的代码和我的语法。我已经硬编码“hello parr”作为输入并获得
第1行:第6行不匹配输入'parr'期待ID
PreParser.g4
grammar PreParser;
import PreParseLex;
r: 'hello' ID;
PreParserLex.g4
lexer grammar PreParseLex;
ID: [a-z]+;
WS: [ \t\r\n]+ -> skip ;
Program.cs的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Antlr4.Runtime;
using Antlr4.Runtime.Misc;
using Antlr4.Runtime.Tree;
namespace PreparseApp
{
class Program
{
static void Main(string[] args)
{
string expression = "hello parr";
AntlrInputStream input = new AntlrInputStream(expression);
PreParseLex lexer = new PreParseLex(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
PreParserParser parser = new PreParserParser(tokens);
IParseTree tree = parser.r();
Console.WriteLine("Done");
}
}
}
我不明白为什么'parr'没有ID。想法?
答案 0 :(得分:0)
Sam Harwell回答了这个问题。我在C#中为词法分析器使用了错误的类。我需要使用PreParseLexer而不是PreParseLex。见他的full response。