如何更改javaCC adder.jj以从命令提示符接收String而不是流?

时间:2017-09-22 20:05:47

标签: java eclipse io javacc

我在this教程之后创建adder.jj文件(直到第13页,就在计算器示例开始之前),创建一个加法器,它非常适合获取数字和加号的结果以语法正确的方式(例如" 4 + 3 + 7"返回14,而" 4 ++ 3"给出错误),这些数字和+符号来自文本文件(这有点解释。 我用来生成所需类的代码,用于执行前面解释过的操作。

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的内容具有我之前解释的格式,则给出正确的输出。

如何更改此代码以接收字符串,以便我可以在项目中使用它而不是命令行中的流?

1 个答案:

答案 0 :(得分:2)

尝试替换

Adder parser = new Adder (System.in) ;

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