为什么我在解析语句时使用javacc工具从用户那里获得输入会得到错误的结果?

时间:2015-04-08 15:45:48

标签: java io javacc

当我输入java AssignStatement

a=10+20*30 

它要求我再输入一个声明

  

语法检查失败

如何从用户或通过文件获取输入?这是我的源代码:

PARSER_BEGIN(AssignStatement)

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:(["0"-"9"])+>
       }

 void StartSymbol(): {}
 {
      (AStmt())*<EOF>
 }

 void AStmt(): {}
 { 
  LOOKAHEAD(2) <ID> "=" AStmt() 
  | Term() ("+" Term())*
 }

 void Term(): {}
 {
  Factor() ("*" Factor())*
 }

 void Factor(): {}
 {
  <NUM> 
  | <ID> 
  | "(" AStmt() ")"
 }

1 个答案:

答案 0 :(得分:2)

令牌管理器抛出异常,因为没有令牌可以以字母“a”开头。