【问题标题】:How can I change javaCC adder.jj to receive a String instead of a stream from command prompt?如何更改 javaCC adder.jj 以从命令提示符接收字符串而不是流?
【发布时间】:2018-03-04 11:45:59
【问题描述】:

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

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

【问题讨论】:

    标签: java eclipse io javacc


    【解决方案1】:

    尝试替换

    Adder parser = new Adder (System.in) ;
    

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

    【讨论】:

    • 我试过了,它说以下Adder.java:7: error: cannot find symbol Reader reader = new StringReader("4+2+ 88") ; ^ symbol: class Reader location: class Adder Adder.java:7: error: cannot find symbol Reader reader = new StringReader("4+2+ 88") ; ^ symbol: class StringReader location: class Adder 2 errors 另外eclipse说即使我导入java.io.reader也无法识别StringReader
    • 对不起,我必须在 Adder.java 生成的类中导入 import java.io.Reader; import java.io.StringReader; 并且它有效!非常感谢,伙计...现在我只需要将其更改为使用不同于 main 的静态方法!
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 2015-12-07
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多