0
我試圖將System.out.println()語句解析爲OutputStatement for Java語法。下面是EBNF產生式規則:無法解析JavaCC中的System.out.println()
Statement::=(LabeledStatement | AssertStatement | Block | EmptyStatement | StatementExpression | SwitchStatement | IfStatement | WhileStatement | DoStatement | ForStatement | BreakStatement | ContinueStatement | ReturnStatement | ThrowStatement | SynchronizedStatement | TryStatement|OutputStatement)
OutputStatement::="System.out.print"["ln"]"("Arguments")" ";"
這作爲JavaCC的文件夾中的文件C:\javacc-6.0\examples\JavaGrammars\Java 1.0.2.jj
規定是嚴格根據Java語法現在,當我編碼在JavaCC中它來作爲生產規則:
OutputStmt OutputStatement():
{
Token tk;
Expression args;
boolean ln=false;
int line;
int column;
}
{
{line=token.beginLine;column=token.beginColumn;args=null;ln=false;}
tk=<STRING_LITERAL> LOOKAHEAD({tk.image.equals("System")})
"."
tk=<STRING_LITERAL> LOOKAHEAD({tk.image.equals("out")})
"."
tk=<STRING_LITERAL> LOOKAHEAD({tk.image.equals("print")})
[
tk=<STRING_LITERAL> LOOKAHEAD({tk.image.equals("ln")})
{
ln=true;
}
]
"("
args=Expression()
")" ";"
{
return new OutputStmt(line,column,token.endLine,token.endColumn,ln,args);
}
}
現在這拋出LOOKAHEAD
解析器生成的警告和錯誤。任何人都可以幫忙嗎?
編輯:,因爲它似乎主要問題是JavaCC的是產生未初始化Token tk
並且是給我的錯誤tk not resolved
方法。