2014-12-02 47 views
0

我在学习antlr。我已经得到它与J​​ava的工作,但不能让任何东西在C#中工作。我创建了最简单的例子,我可以从The Definitive Antlr Book中找到一个例子,我仍然遇到问题。C#中拆分词法分析器语法文件问题#

这是我的代码和我的语法。我硬编码 “你好帕尔” 作为输入和获得

线1:6不匹配输入 '帕尔' 预计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

如果您在Java版本中有某些工作不适用于C#版本,那么您可能需要在C#项目的问题跟踪器上发布错误报告:https://github.com/tunnelvisionlabs/antlr4cs/issues – 2014-12-02 11:52:50

+0

我创建了一个[issue](https://github.com/tunnelvisionlabs/antlr4cs/issues/86)。 – Gary 2014-12-02 14:42:56

回答

0

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