JavaCC的简单例子

 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之后再做改进。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值