2014-03-27 69 views
0

我使用C#輸出將現有語法轉換爲Antlr4。它在第一個標記上失敗,消息不匹配輸入'開始'期待ANY_WORD。奇怪的是,當我打印出令牌來查看它被識別的令牌時,它表明它已正確識別它。將語法從Antlr2轉換爲Antlr4後輸入不匹配

  string text = File.ReadAllText(fi.FullName); 
      var fs = new Antlr4.Runtime.AntlrInputStream(text); 
      var lexer = new TestLexer(fs); 
      var tokens = new Antlr4.Runtime.CommonTokenStream(lexer); 
      tokens.Fill(); 
      var tokenList = tokens.GetTokens(); 
      yRLogger.Info("Printing tokens"); 
      foreach(IToken tok in tokenList) 
      { 
       Logger.Info(tok.ToString()); //prints [@0,13:17='Begin',<28>,1:13] 28 In TestLexer.tokens, 28 corresponds to ANY_WORD 

      } 
      var parser = new TestParser(tokens); 
      parser.start(); //throws 'mismatched input 'Begin' expecting ANY_WORD. ' 

在AntlrWorks中檢查相同語法和輸入的行爲與預期相同 - 它會發現第一個令牌沒有錯誤。

From TestParser.tokens ANY_WORD=28

輸入文件是

Begin parsing now 

的文件的Antlr是

start : ANY_WORD+; 

    ANY_WORD 
: 
~('\r'|'\n'|' '|'\t'|'\u000C')+ 
; 

    WS : (' '|'\t'|'\u000C') -> skip 
; 

回答

相關問題