2009-08-25 15 views
1

を解析すると、ここでは、コードのシンプルな作品です:つまり234234234.、番号をプリントアウトすることになっているJparsec - 単純な数

import org.codehaus.jparsec.Parser; 
import org.codehaus.jparsec.Terminals; 
import org.codehaus.jparsec.functors.Map; 

public class Test { 
    static final Parser<Double> NUMBER = Terminals.DecimalLiteral.PARSER.map(
    new Map<String, Double>() { 
     public Double map(String s){ 
     return Double.valueOf(s); 
    } 
    }); 

    public static void main(String[] args) { 
    System.out.println(NUMBER.parse("234234234")); 
    } 
} 

代わりに、それは印刷します。

Exception in thread "main" org.codehaus.jparsec.error.ParserException: Parser not on token level 
line 1, column 1 
    at org.codehaus.jparsec.Parser.asParserException(Parser.java:673) 
    at org.codehaus.jparsec.Parser.run(Parser.java:682) 
    at org.codehaus.jparsec.MapParser.apply(MapParser.java:30) 
    at org.codehaus.jparsec.Parser.run(Parser.java:679) 
    at org.codehaus.jparsec.Sequence2Parser.apply(Sequence2Parser.java:32) 
    at org.codehaus.jparsec.Parser.run(Parser.java:679) 
    at org.codehaus.jparsec.Parsers.parse(Parsers.java:97) 
    at org.codehaus.jparsec.Parser.parse(Parser.java:617) 
    at org.codehaus.jparsec.Parser.parse(Parser.java:628) 
    at org.codehaus.jparsec.Parser.parse(Parser.java:633) 
    at Test.main(Test.java:51) 
Caused by: java.lang.IllegalStateException: Parser not on token level 
    at org.codehaus.jparsec.ScannerState.getToken(ScannerState.java:68) 
    at org.codehaus.jparsec.IsTokenParser.apply(IsTokenParser.java:30) 
    at org.codehaus.jparsec.Parser.run(Parser.java:679) 
    ... 9 more 

だから私は何をしないのです?

答えて

0

私は本当にjparsecの専門家でないんだけど、NUMBERの次の代替定義が動作するように表示されます。


import org.codehaus.jparsec.Parser; 
import org.codehaus.jparsec.Terminals; 
import org.codehaus.jparsec.Tokens.Fragment; 
import org.codehaus.jparsec.functors.Map; 

public class Test 
{ 
    static final Parser NUMBER = Terminals.DecimalLiteral.TOKENIZER.map(
      new Map<Fragment, Double>() { 
       public Double map(Fragment arg0) { 
        return Double.valueOf(arg0.text()); 
       } 
      }); 

    public static void main(String[] args) 
    { 
     System.out.println(NUMBER.parse("234234234")); 
    } 
} 

+0

それは確かにありません!私は「断片」の部分を欠いていました。 Mapはでパラメータ化する必要がありますが、それ以外は完全にうまく動作します。 – Marcin

+0

おっと、よく目に付きます。私のマークアップには問題がありました。あなたはMap を意味しませんか? –