在C#中拆分lexer语法文件问题

时间:2014-12-02 08:57:29

标签: antlr4

我正在学习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。想法?

1 个答案:

答案 0 :(得分:0)

Sam Harwell回答了这个问题。我在C#中为词法分析器使用了错误的类。我需要使用PreParseLexer而不是PreParseLex。见他的full response