Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaCC解析器生成器可以';t处理EOF_Java_Io_Javacc - Fatal编程技术网

javaCC解析器生成器可以';t处理EOF

javaCC解析器生成器可以';t处理EOF,java,io,javacc,Java,Io,Javacc,这是我一直在使用的代码,我从中复制(从第13页开始;我可以成功地从包含数字和+符号的input.txt文件中执行并解析一个加法示例,该文件实际上是正确的,即4+2返回六个,但4++2给出一个错误) 正确生成所有必需的java文件,所有这些文件都是我编译的,没有错误,也没有警告 javac *.java 但是当我试着跑的时候 java Calculator < input.txt java计算器

这是我一直在使用的代码,我从中复制(从第13页开始;我可以成功地从包含数字和+符号的input.txt文件中执行并解析一个加法示例,该文件实际上是正确的,即
4+2返回六个
,但
4++2给出一个错误

正确生成所有必需的java文件,所有这些文件都是我编译的,没有错误,也没有警告

javac *.java
但是当我试着跑的时候

java Calculator < input.txt
java计算器
其中input.txt包含

4+2+2

由于某种原因,在这个新版本中我得到了

Exception in thread "main" ParseException: Encountered "<EOF>" at line 1, column 11.
Was expecting one of:
    <EOL> ...
    "+" ...

        at Calculator.generateParseException(Calculator.java:218)
        at Calculator.jj_consume_token(Calculator.java:156)
        at Calculator.Start(Calculator.java:27)
        at Calculator.main(Calculator.java:10)
线程“main”ParseException中的异常:在第1行第11列遇到“”。 我期待的是: ... "+" ... 在Calculator.generateParseException(Calculator.java:218) 在Calculator.jj_消费_令牌(Calculator.java:156) 在Calculator.Start(Calculator.java:27) 位于Calculator.main(Calculator.java:10)

我如何解决这个问题?

我找到了一个解决方案。这是一个小错误的PDF,我能够解决它。只需添加三个字符即可修复该错误

答案是改变:

void Start(PrintStream printStream) throws NumberFormatException :
{}
{
    (
        previousValue = Expression()
        <EOL>
        {printStream.println(previousValue) ; }
    )*
    <EOF>
}
void Start(PrintStream PrintStream)引发NumberFormatException:
{}
{
(
previousValue=表达式()
{printStream.println(previousValue);}
)*
}
为了

void Start(PrintStream PrintStream)引发NumberFormatException:
{}
{
(
previousValue=表达式()
()*
{printStream.println(previousValue);}
)*
}

它就像一个符咒。

这个词“臭虫”似乎有点刺耳。:-)对唯一的问题是,
表达式
可以相互跟随,而它们之间没有任何
;这在原始版本中是不允许的。语法要求每行有一个表达式。这是一个深思熟虑的设计决定。也许教程可以更好地解释这个决定。
Exception in thread "main" ParseException: Encountered "<EOF>" at line 1, column 11.
Was expecting one of:
    <EOL> ...
    "+" ...

        at Calculator.generateParseException(Calculator.java:218)
        at Calculator.jj_consume_token(Calculator.java:156)
        at Calculator.Start(Calculator.java:27)
        at Calculator.main(Calculator.java:10)
void Start(PrintStream printStream) throws NumberFormatException :
{}
{
    (
        previousValue = Expression()
        <EOL>
        {printStream.println(previousValue) ; }
    )*
    <EOF>
}
void Start(PrintStream printStream) throws NumberFormatException :
{}
{
    (
        previousValue = Expression()
        (<EOL>)*
        {printStream.println(previousValue) ; }
    )*
    <EOF>
}