fortify

lex.g4


lexer grammar lex;

WS : [ \n\rw\t]+ -> skip;
LINE_COMMENT
    :   '//' ~[\r\n]* -> skip
    ;

ZS :
   '/*'.*'*/' -> skip
   ;

TypeName:
    'AssignmentStatement'
    | 'Block'
    | Statement
    ;

Statement:
    'Statement'
    |'ThrowStatement'
    |'CallStatement'
    |'ReturnStatement'
    |'AssignmentStatement'
    |'IfStatement'
    |'WhileStatement'
    |'DeclStatement'
    | Block
    | Function
    ;



Block:
    'TryBlock'
    |'CatchBlock'
    |'FinallyBlock'
    |'SynchronizedBlock'
    |'SwitchBlock'
    ;




Function:
    'Function'
    |'FunctionCall'
    | 'Class'
    | 'Annotation'
    | 'Type'
    | 'String'
    | 'FieldAccess'
    | 'VariableAccess'
    | 'Field'
    | 'NullLiteral'
    | 'BooleanLiteral'
    | 'Variable'
    | 'Expression'
    | 'Null'
    | 'Construct'
    | 'Number'
    | 'Location'
    | 'Comment'
    | 'Declaration'
    | 'Operation'
    ;




Relation:
      'is'
    | 'in'
    | 'contains'
    | 'reachedBy'
    | 'reaches'
    | '==='
    | '=='
    | '!='
    | '='
    | '>='
    | '<='
    | '>'
    | '<'
    | 'startsWith'
    | 'endsWith'
    | 'matches'
    ;



Label:
    TypeName (' 'Identify)? ':'
    ;

TypeSignatureLiteral:
    'T' String
    ;




LeftBrack:
    '['
    ;

RightBrack:
    ']'
    ;

Not:
     ('not')
     ;

And:
    'and';



Or :
    'or';

Left:
    '('
    ;
Right:
    ')'
    ;

Point:
     '*'
     ;

String:
    '"' .*? '"'
    ;




Reference:
    Identify ('[' Number ']')? ('.' Identify)*
    ;

Number:
    [0-9]*
    ;

Identify:
    [0-9a-zA-Z_/.]*
    ;


Boolean:
    'true'|'false';

 par.g4


grammar par;


//options {
//    token=lex;
//}

prog:
     label expression
    ;




expression:
    literal                             # iteral
    | relationExpression                # Relation
    | Reference                         # refrence
   | Not expression                    # NotExpression
    | expression andor=(And|Or) expression # ExpressionAndOrExpression
    | '(' expression ')'             # ExpressionAndBrack
    ;




relationExpression:
    Relation Reference                  # relationRefrence
    | Relation literal                  # relationLiteral
   | Relation subRule                  # relationSubRule
    | Relation String                   # relationString
    | Reference Relation Reference      # refrenceRelationRefrence
   | Reference Relation literal        # refrenceRelationLiteral
    | Reference Relation subRule        # refrenceRelationSubRule
    | Reference Relation String         # refrenceRelationString
    | literal Relation Reference        # literalRelationRefrence
    | literal Relation literal          # literalRelationLiteral
    | literal Relation subRule          # literalRelationSubRule
   | literal Relation String           # literalRelationString
    ;




subRule:
    '[' label? expression? ']' Point?
    ;




literal:
      Number                   #literalNumber
     | Boolean                 #literalBoolean
     | TypeSignatureLiteral    #literalTypeSignatureLiteral
    ;





label:
    TypeName (Reference)?':'
    ;





WS : [ \n\rw\t]+ -> skip;
LINE_COMMENT
    :   '//' ~[\r\n]* -> skip
    ;



ZS :
   '/*'.*?'*/' -> skip
   ;



TypeName:
    'AssignmentStatement'
    | 'Block'
    | Statement
    ;




Statement:
    'Statement'
    |'ThrowStatement'
    |'CallStatement'
    |'ReturnStatement'
    |'AssignmentStatement'
    |'IfStatement'
    |'WhileStatement'
    |'DeclStatement'
 | Block
    | Function
    ;


Block:
    'TryBlock'
    |'CatchBlock'
    |'FinallyBlock'
    |'SynchronizedBlock'
    |'SwitchBlock'
    ;




Function:
    'Function'
    |'FunctionCall'
    | 'Class'
    | 'Annotation'
    | 'Type'
    | 'String'
    | 'FieldAccess'
    | 'VariableAccess'
    | 'Field'
  | 'NullLiteral'
    | 'BooleanLiteral'
    | 'Variable'
    | 'Expression'
    | 'Null'
    | 'Construct'
    | 'Number'
    | 'Location'
    | 'Comment'
    | 'Declaration'
    | 'Operation'
    ;


Relation:
      'is'
    | 'in'
    | 'contains'
    | 'reachedBy'
    | 'reaches'
    | '==='
    | '=='
    | '!='
    | '='
    | '>='
    | '<='
    | '>'
    | '<'
    | 'startsWith'
    | 'endsWith'
    | 'matches'
    ;


Space:
    ' '
    ;

TypeSignatureLiteral:
    'T' String
    ;


Not:
     'not'
     ;

And:
    'and';

Or :
    'or';




Colon:
    ':'
    ;

Point:
     '*'
     ;

Number:
    [0-9]*;

Reference:
    Identify ('[' Number ']')? ('.' Identify)*
    ;



String:
    '"' .*? '"'
    ;

Identify:
    [0-9a-zA-Z_/.]*
    ;

//Identify:
//
//    ;

Boolean:
    'true'|'false';

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值