Hallo,
Ich habe den folgenden JavaCC-Code (der korrekt und zu fehlerfreiem Java-Code kompiliert wird):
Starte ich nun die Javaklasse Test.java mit den beiden Parametern 123 456, so wird NICHT 123 als ONE erkannt und entsprechend 456 als TWO, sondern ich erhalte den folgenden Parse-Error:
Ich verstehe nicht, wieso... Das Blank als Trennzeichen sollte doch ausreichend sein.
Interessanterweise funktioniert das Parsen, falls ich das Plus hinter ONE weglasse und als ersten Parameter entsprechend nur "1" angebe. Wie schaffe ich das für einen beliebig langen String, wo liegt mein Fehler?
Ich habe den folgenden JavaCC-Code (der korrekt und zu fehlerfreiem Java-Code kompiliert wird):
Code:
PARSER_BEGIN(Test)
public class Test {
public static void main(String args[]) throws ParseException {
String tmp = "";
for(int i=0 ; i<args.length ;i++)
tmp+=args[i]+" ";
java.io.StringReader sr = new java.io.StringReader( tmp.trim() );
java.io.Reader r = new java.io.BufferedReader( sr );
Test parser = new Test( r );
parser.test();
}
}
PARSER_END(Test)
TOKEN :
{
< ONE: (["a"-"z","A"-"Z","/","\\","0"-"9","_"])+ >
| < TWO: (["a"-"z","A"-"Z","/","\\","0"-"9","_"])+ >
}
void test() :
{ Token a=null,b=null;
}
{
a=<ONE> " " b=<TWO>
{ if(a!=null) System.out.println("ONE: " + a.image);
if(b!=null) System.out.println("TWO: " + b.image);
}
}
Starte ich nun die Javaklasse Test.java mit den beiden Parametern 123 456, so wird NICHT 123 als ONE erkannt und entsprechend 456 als TWO, sondern ich erhalte den folgenden Parse-Error:
Code:
Exception in thread "main" parser.examples.ParseException: Encountered "456" at line 1, column 5.
Was expecting:
<TWO> ...
at parser.examples.Test.generateParseException(Test.java:193)
at parser.examples.Test.jj_consume_token(Test.java:132)
at parser.examples.Test.test(Test.java:22)
at parser.examples.Test.main(Test.java:15)
Ich verstehe nicht, wieso... Das Blank als Trennzeichen sollte doch ausreichend sein.
Interessanterweise funktioniert das Parsen, falls ich das Plus hinter ONE weglasse und als ersten Parameter entsprechend nur "1" angebe. Wie schaffe ich das für einen beliebig langen String, wo liegt mein Fehler?