2017-09-22 59 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