2017-09-22 60 views
1

我創建了adder.jj文件,遵循this教程(直到第13頁,就在它以計算器爲例)之前,創建一個加法器,該加法器非常適合以語法方式獲得數字和加號的結果(例如「4 +3 +7「返回14,而」4 ++ 3「給出錯誤),那些數字和+符號來自文本文件(稍後將對此進行解釋)。 我用來生成所需的類來執行之前解釋的代碼。如何更改javaCC adder.jj以接收來自命令提示符的字符串而不是流?

options 
{ 
    STATIC = false ; 
} 
PARSER_BEGIN(Adder) 
    class Adder 
    { 
     public static void main (String[] args) 
     throws ParseException, TokenMgrError, NumberFormatException 
     { 
      Adder parser = new Adder (System.in) ; 
      int val = parser.Start() ; 
      System.out.println(val) ; 
     } 
    } 
PARSER_END(Adder) 

SKIP : { " " } 
SKIP : { "\n" | "\r" | "\r\n" } 
TOKEN : { < PLUS :"+"> } 
TOKEN : { < NUMBER : (["0"-"9"])+ > } 

int Start() throws NumberFormatException : 
{ 
    int i ; 
    int value ; 
} 
{ 
    value = Primary() 
    (
     <PLUS> 
     i = Primary() 
     { value += i ; } 
    )* 
    { return value ; } 
} 

int Primary() throws NumberFormatException : 
{ 
    Token t ; 
} 
{ 
    t=<NUMBER> 
    { return Integer.parseInt(t.image) ; } 
} 

的類與

javacc adder.jj 

然後生成我編譯生成的類與

javac *.java 

最後

java Adder < ex1.txt 

給人如果內容的右輸出ex1.txt具有我之前解釋過的格式。

如何更改此代碼以接收字符串,以便在項目中實際使用它而不是從命令行中的流?

回答

2

嘗試用

Reader reader = new StringReader(someString) ; 
Adder parser = new Adder(reader) ; 
+0

我試過了,它說以下 'Adder.java:7更換

Adder parser = new Adder (System.in) ; 

:錯誤:無法找到符號 讀卡器讀卡器=新StringReader(」 4 + 2 + 88「); ^ symbol:class Reader location:class Adder Adder.java:7:error:can not find symbol Reader reader = new StringReader(「4 + 2 + 88」); ^ 符號:類StringReader 位置:類加法 2 errors' 另外蝕說,不承認StringReader我進口的java.io.Reader即使 – newbie

+0

對不起,我不得不進口 '進口的java.io.Reader; import java.io.StringReader;' 在Adder.java生成的類 它的工作原理!非常感謝,現在我只需要改變它就可以使用不同於main的靜態方法! – newbie