1

次の文法は、文字列を処理するためのパーサーを正常に生成します'ccdunion'。しかし、通訳を試してみると、NoViableAltExceptionエラーが発生します。なぜですか。

grammar SimpleCalc;

options {
  k = 2;
  output = AST;
  backtrack = true;
}

tokens {
  UNION = 'union';
}


@header {
  package myPack;
  import java.io.File;
  import java.io.FileWriter;
  import java.io.PrintWriter;
}

@lexer::header {
  package myPack;
}

@members {
  public static void main(String[] args) throws Exception {
    File fileOut = new File("src/ARFF.arff");

    FileWriter fw = new FileWriter(fileOut);
    PrintWriter pw = new PrintWriter(fw);

    pw.print("a ");
    pw.println("b");
    pw.println(12);

    fw.close();
    SimpleCalcLexer lex = new SimpleCalcLexer(new ANTLRFileStream(args[0]));
    CommonTokenStream tokens = new CommonTokenStream(lex);

    SimpleCalcParser parser = new SimpleCalcParser(tokens);

    try {
      parser.expr();
    } catch (RecognitionException e) {
      e.printStackTrace();
    }
  }
}

expr
 : filsPiquets EOF 
   {
     System.out.println("base mono: ");
   }
 ;

filsPiquets
 : chars UNION
   {
     System.out.println("TXTunionII"+$chars.text);
   }
 ;

chars
 : CHAR
 | . chars
 ;

CHAR
 : .
 ;
4

1 に答える 1

0

... インタプリタを試してみると、NoViableAltException エラーが発生しました。なぜですか?

インタープリターにはバグがあるため、使用しないでください。代わりにデバッガを使用してください。同じことがANTLRWorksにも当てはまります。

于 2012-08-24T06:34:24.173 に答える