JAVACC 进阶--复杂逻辑运算

JAVACC 进阶–复杂逻辑运算

支持选择判断等IF、ELSE、choose、case等逻辑的运算
多年前使用的时候写的,现在无意发现,整理了一下,记录下来。

options
{
  static = false;
  JDK_VERSION = "1.8";
  DEBUG_PARSER = false;
}

PARSER_BEGIN(JavaccDealRule)
package cn.com.XXX.quality.newJavacc;
import java.util.HashMap;
import java.util.Map;

/** Simple brace matcher. */
public class JavaccDealRule
{

  /** Main entry point. */
  public static void main(String args []) throws ParseException
  {
    JavaccDealRule parser = new JavaccDealRule(System.in);
    parser.Start();
  }
}

PARSER_END(JavaccDealRule)

SKIP :
{
  " "
| "\t"
| "\n"
| "\r"
| "\f"
}

TOKEN :
{
  < LBRACE : "{" >
| < RBRACE : "}" >
| < LPARENT : "(" >
| < RPARENT : ")" >
}

TOKEN :
{
  < IF : "if" >
| < ELSE : "else" >
| < CHOOSE : "choose" >
| < CASE : "case" >
| < CASEDEFAULT : "case default" >
}

TOKEN :
{
  < CONSTANT : ("MR_") (< DIGIT >)+ >
| < #DIGIT : [ "a"-"z", "A"-"Z", "1"-"9" ] >
}

TOKEN :
{
  < VARIABLE : (< DIGIT2 >)+ >
| < #DIGIT2 : [ "a"-"z", "A"-"Z", "1"-"9" ] >
}

TOKEN :
{
  < not : "not" >
}


void test():
{
  int not=0;
}
{
    <not><LPARENT>Expression()<RPARENT>
    {
      not=1;
    }
}




void Start() :
{
}
{
  (
      IfStatement()|choseCaseStatement()
  )+
}

void IfStatement() :
{
}
{
  < IF > < LPARENT > Expression() < RPARENT >Statement()
  [
    LOOKAHEAD(1)
    < ELSE > ElseIFStatement()
  ]
}

void choseCaseStatement() :
{
}
{
  (
    < CHOOSE > < LPARENT > Expression() < RPARENT > < LBRACE >
    (
      < CASE > < LPARENT > ChooseExpression() < RPARENT > < LBRACE > Statement() < RBRACE >
    )+
  )*
  (
    <CASEDEFAULT > < LBRACE > Statement() < RBRACE > < RBRACE >
  )
}

void Expression() :
{
}
{
  < CONSTANT >
}

void Statement() :
{
}
{
  (
    Block()
  | 
    StatementExpression()
  |
  	(
  	  IfStatement())+
  )
}

void ElseIFStatement() :
{
}
{
  (
    Block()
  |
    StatementExpression()
  |
  	(IfStatement())
  )
}

void StatementExpression() :
{
}
{
   < CONSTANT >
}

void Block() :
{
}
{
  "{"
  (
    Statement()
  )*
  "}"
}

void ChooseExpression() :
{
}
{
	 < VARIABLE >
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值