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