我创建了一个AssignStatement类,我试图使用javacc传递String。 赋值语句的格式为:a = b + c * d。 这里是源代码
options
{
static=false;
DEBUG_TOKEN_MANAGER=true;
}
public class AssignStatement
{
public static void main(String s[])
{
try
{
AssignStatement as=new AssignStatement(System.in);
as.StartSymbol();
System.out.println("Syntax checking successfully");
}
catch(Throwable e)
{
System.out.println("Syntex checking failed"+e.getMessage());
}
}
}
PARSER_END(AssignStatement)
SKIP: {"" | "\t" | "\n" | "\r" }
TOKEN:{ "(" | ")" | "+" | "*" | ":=" | <NUM:(["0"-"9"])+>| <ID:(["a"-"z"])+> }
void StartSymbol(): {}
{
(AStmt())*<EOF>
}
void AStmt(): {}
{
LOOKAHEAD(2) <ID> "=" AStmt()
| Term() ("+" Term())*
}
void Term(): {}
{
Factor() ("*" Factor())*
}
void Factor(): {}
{
<NUM>
| <ID>
| "(" AStmt() ")"
}
我做了java AssignStatement之后得到的输出
&#34; A = 10 + 20 * 30&#34;
当前角色:\&#34; (34)第1栏第1栏 没有字符串文字匹配可能。 启动NFA以匹配以下内容之一:{,} 目前的角色:\&#34; (34)第1栏第1栏 Syntex在第1行第1列检查failedLexical错误。遇到:&#34; \&#34;&#34; (34) ,之后:&#34;&#34;
输出我应该
syntex检查成功。
答案 0 :(得分:1)
输入的第一个字符是"
,但没有正则表达式允许第一个字符为"
。因此,词法分析器在读取第一个字符后抛出TokenManagerError。