为什么在这段代码中我得到Lexical错误即将使用javacc工具

时间:2015-04-27 10:15:27

标签: javacc

我创建了一个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检查成功。

1 个答案:

答案 0 :(得分:1)

输入的第一个字符是",但没有正则表达式允许第一个字符为"。因此,词法分析器在读取第一个字符后抛出TokenManagerError。