JavaCC的简单例子

来源:互联网 发布:守望先锋左上角数据 编辑:程序博客网 时间:2024/05/01 00:53

 JavaCC附带的例子是寻找匹配的花括号个数的,我写的例子在它的基础上稍微延伸,可以实现对多行的处理,每行的信息都能表现出来。

 

options{
 STATIC = false;
 }

PARSER_BEGIN(Simple2)

public class Simple2 {
 public static int lineNumber = 0;

  public static void main(String args[]) throws ParseException {
    Simple2 parser = new Simple2(System.in);
    parser.Run();
    System.out.println("Total Line = "+ (lineNumber+1));//计算行数
  }

}

PARSER_END(Simple2)

SKIP :
{
  " "
| "/t"
| "/r"
}

TOKEN:
{
<NEWLINE : "/n">//考虑到系统不同,仅选择对/n标记
{
 Simple2.lineNumber++; //因为此处是在TokenManager处理需要标识作用域
}
}

void Run():{}
{
 ( Input() )*<EOF>
}

void Input() :
{
 int count;
}
{
  ( count = MatchedBraces() )+ (<NEWLINE>)*
  {System.out.println("This line:" + count);}
}

int MatchedBraces() :
{ int nested_count = 0;}
{
  "{" [ nested_count = MatchedBraces() ] "}"
  { return ++nested_count; }
}

不足的地方时,如此写法会出现冗余代码,原因在MatchedBraces函数中的花括号出现,因此待我研究明白LOOKAHEAD之后再做改进。

原创粉丝点击