Antlr4 如何允许双引号内的antlr lexxer中的所有字符识别正则表达式值?

Antlr4 如何允许双引号内的antlr lexxer中的所有字符识别正则表达式值?,antlr4,Antlr4,我想扩展我的语法,这样就可以在双引号内定义正则表达式值,下面是一个我想允许的示例 matches(value, test| ".*foobar[A-Z]"); 实际上这是不可识别的,因为点和方括号以前是可识别的。这是解析树 我如何解决这个问题,我尝试了一个新的规则:ANY:。但有了这些,我无法解决它。有什么想法吗 这是我的语法 grammar FEL; prog: expr+ SEMI? EOF; expr: s

我想扩展我的语法,这样就可以在双引号内定义正则表达式值,下面是一个我想允许的示例

matches(value, test| ".*foobar[A-Z]");
实际上这是不可识别的,因为点和方括号以前是可识别的。这是解析树

我如何解决这个问题,我尝试了一个新的规则:ANY:。但有了这些,我无法解决它。有什么想法吗

这是我的语法

    grammar FEL;

    prog: expr+ SEMI? EOF;
    expr:
                 statement                     #StatementExpr
                 |NOT expr                     #NotExpr
                 | expr AND expr               #AndExpr
                 | expr (OR | XOR) expr        #OrExpr
                 | function                    #FunctionExpr
                 | LPAREN expr RPAREN          #ParenExpr
                 | writeCommand                #WriteExpr
     ;

    writeCommand: setCommand | setIfCommand;
    statement: ID '=' getCommand  NEWLINE      #Assign;
    setCommand: 'set' LPAREN variable = variableType '|' value = parameter RPAREN;
    setIfCommand: 'setIf' LPAREN variableType '|' expr '?' p1 = parameter ':' p2 = parameter RPAREN;

    getCommand:         getFieldValue                       #FieldValue
                                | getInstanceAttribValue    #InstanceAttribValue
                                | getFormAttribValue        #FormAttributeValue
                                | getMandatorAttribValue    #MandatorAttributeValue
                                ;

    getFieldValue: 'getFieldValue' LPAREN instanceID=ID COMMA fieldname=ID RPAREN;
    getInstanceAttribValue: 'getInstanceAttrib' LPAREN instanceId=ID COMMA moduleId=ID COMMA attribname=ID RPAREN;
    getFormAttribValue: 'getFormAttrib' LPAREN formId=ID COMMA moduleId=ID COMMA attribname=ID RPAREN;
    getMandatorAttribValue: 'getMandatorAttrib' LPAREN mandator=ID COMMA moduleId=ID COMMA attribname=ID RPAREN;
    parameter:
                variableType
                | constType
                ;
    anyType: DoubleQuote ANY DoubleQuote;
    pdixFuncton:ID;
    constType:
                    ID                  #ID_Without
                    | '"'  ID '"'       #ID_WITH
                    | INT               #INT_VALUE
                    | DIGIT_DOT         #DIGIT_DOT_VALUE
                    ;
    variableType:
                        valueType                   #Variable_Value
                        |instanceType               #Variable_Instance
                        |formType                   #Variable_Form
                        |bufferType                 #Variable_Buffer
                        |instanceAttribType         #Variable_Instance_Attrib
                        |formAttribType             #Variable_Form_Attrib
                        |mandatorAttribType         #Variable_Mandator_Attrib
                        |instanceAttachmentType     #Variable_Instance_Attachment
                        |formAttachmentType         #Variable_Form_Attachment
                        |mandatorAttachmentType     #Variable_Mandator_Attachment
                        ;
    valueType:'value' COMMA par=parameter (COMMA functionParameter)?;
    instanceType: 'instance' COMMA instanceParameter;
    formType: 'form' COMMA formParameter;
    bufferType: 'buffer' COMMA id=ID;
    instanceParameter: 'instanceId'
                                    | 'instanceKey'
                                    | 'firstpenId'
                                    | 'lastpenId'
                                    | 'lastUpdate'
                                    | 'started'
                                    ;
    formParameter: 'formId'
                                |'formKey'
                                |'lastUpdate'
                                ;
    functionParameter: 'lastPen'
                                    | 'fieldGroup'
                                    | ' fieldType'
                                    | 'fieldSource'
                                    | 'updateId'
                                    | 'sessionId'
                                    | 'icrConfidence'
                                    | 'icrRecognition'
                                    |  'lastUpdate';

    instanceAttribType: p = ('instattrib' | 'instanceattrib') COMMA attributeType;
    formAttribType:'formattrib' COMMA attributeType;
    mandatorAttribType: 'mandatorattrib' COMMA attributeType;
    instanceAttachmentType:('instattachment' | 'instanceatt') COMMA attachmentType;
    formAttachmentType:'formAtt' COMMA attachmentType;
    mandatorAttachmentType: 'mandatoratt' COMMA attachmentType;


    attributeType: module = ID '#' attribName = ID;
    attachmentType: name = ID '#' page = INT '#' index = INT;

     function:
                    commandIsSet
                    |commandIsEmpty
                    |commandIsEqual
                    |commandIsNumLessEqual
                    |commandIsNumLess
                    |commandIsNumGreaterEqual
                    |commandIsNumGreater
                    |commandIsNumEqual
                    |commandIsLess
                    |commandIsLessEqual
                    |commandIsGreater
                    |commandIsGreaterEqual
                    |commandMatches
                    |commandContains
                    |commandEndsWith
                    |commandStartsWith
                    ;
    commandIsSet: IS_SET LPAREN parameter RPAREN;
    commandIsEmpty: IS_EMPTY LPAREN parameter RPAREN;
    commandIsEqual: IS_EQUAL LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandStartsWith: 'startsWith' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandEndsWith: 'endsWith' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandContains: 'contains' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandMatches: 'matches' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsLess: 'isLess' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsLessEqual: 'isLessEqual' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsGreater: 'isGreater' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsGreaterEqual: 'isGreaterEqual' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsNumEqual: 'isNumEqual' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsNumGreater: 'isNumGreater' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsNumGreaterEqual: 'isNumGreaterEqual' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsNumLess: 'isNumLess' LPAREN p1 = parameter '|' p2 = parameter RPAREN;
    commandIsNumLessEqual: 'isNumLessEqual' LPAREN p1 = parameter '|' p2 = parameter RPAREN;

    /*
    stringFunctionType:
        a=substringStrFunction
        |   a=cutStrFunction
        |   a=replaceStrFunction
        |   a=reformatDateStrFunction
        |   a=translateStrFunction
        |   a=fillStrFunction
        |   a=concatStrFunction
        |   a=justifyStrFunction
        |   a=ifElseStrFunction
        |   a=tokenStrFunction
        |   a=toLowerFunction
        |   a=toUpperFunction
        |   a=trimFunction
    ;
    */

    LPAREN : '(';
    RPAREN : ')';
    LBRACE : '{';
    RBRACE : '}';
    LBRACK : '[';
    RBRACK : ']';
    SEMI : ';';
    COMMA : ',';
    DOT : '.';
    ASSIGN : '=';
    GT : '>';
    LT : '<';
    BANG : '!';
    TILDE : '~';
    QUESTION : '?';
    COLON : ':';
    EQUAL : '==';
    LE : '<=';
    GE : '>=';
    NOTEQUAL : '!=';
    AND : 'and';
    OR : 'or';
    XOR :'xor';
    NOT :'not'  ;
    INC : '++';
    DEC : '--';
    ADD : '+';
    SUB : '-';
    MUL : '*';
    DIV : '/';

    INT: [0-9]+;
    DIGIT_DOT: FloatNumber;

    IS_SET:'isSet';
    IS_EMPTY:'isEmpty';
    IS_EQUAL:'isEqual';
    WS: (' '|'\t' | NEWLINE | '\r' )+ -> skip;
    NEWLINE: '\n';
    ID: JavaLetter JavaLetterOrDigit* | ANY;
    ANY: . ;


    fragment FloatNumber: ('0'..'9')+ ('.' ('0'..'9')+)?;

    fragment
    JavaLetter
    :   [a-zA-Z$_] // these are the "java letters" below 0xFF
    |   // covers all characters above 0xFF which are not a surrogate
        ~[\u0000-\u00FF\uD800-\uDBFF]
        {Character.isJavaIdentifierStart(_input.LA(-1))}?
    |   // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF
        [\uD800-\uDBFF] [\uDC00-\uDFFF]
        {Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}?
    ;

    fragment
    JavaLetterOrDigit
    :   [a-zA-Z0-9$_] // these are the "java letters or digits" below 0xFF
    |   // covers all characters above 0xFF which are not a surrogate
        ~[\u0000-\u00FF\uD800-\uDBFF]
        {Character.isJavaIdentifierPart(_input.LA(-1))}?
    |   // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF
        [\uD800-\uDBFF] [\uDC00-\uDFFF]
        {Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}?
    ;
    fragment DoubleQuote: '"' ;   // Hard to read otherwise.
语法FEL;
程序:expr+SEMI?EOF;
表达式:
语句#语句表达式
|非expr#NotExpr
|expr和expr#AndExpr
|expr(或| XOR)expr#OrExpr
|函数#函数表达式
|LPAREN expr RPAREN#ParenExpr
|writeCommand#WriteExpr
;
writeCommand:setCommand | setIfCommand;
语句:ID'='getCommand换行符#Assign;
setCommand:'set'LPAREN variable=variableType'|'value=参数RPAREN;
setIfCommand:'setIf'LPAREN variableType'|'expr'?'p1=parameter':'p2=parameter RPAREN;
getCommand:getFieldValue#FieldValue
|GetInstanceAttribute值#InstanceAttribute值
|getFormAttribValue#FormAttributeValue
|GetMandatorAttributeValue#MandatorAttributeValue
;
getFieldValue:'getFieldValue'LPAREN instanceID=ID逗号fieldname=ID RPAREN;
getInstanceAttribValue:'getInstanceAttrib'LPAREN instanceId=ID逗号模块ID=ID逗号属性名称=ID RPAREN;
getFormAttribValue:'getFormAttrib'LPAREN formId=ID COMMA moduleId=ID COMMA attribname=ID RPAREN;
getMandatorAttribValue:'getMandatorAttrib'LPAREN mandator=ID逗号模块ID=ID逗号属性名=ID RPAREN;
参数:
可变类型
|康斯特普型
;
anyType:DoubleQuote任意DoubleQuote;
pdixfuncon:ID;
常数类型:
ID#ID#u不带
|“‘ID’”#ID#u与
|INT#INT_值
|数字点#数字点#值
;
可变类型:
valueType#变量_值
|instanceType#变量_实例
|formType#变量_形式
|缓冲类型#变量_缓冲
|InstanceAttributeType#变量_实例_属性
|formAttribType#变量_表单_属性
|mandatorAttribType#变量_Mandator _Attrib
|instanceAttachmentType#变量_实例_附件
|formAttachmentType#变量_表单_附件
|MandatorAtachmentType#变量_Mandator_附件
;
valueType:'value'逗号par=参数(逗号函数参数)?;
instanceType:“instance”逗号instanceParameter;
formType:“form”逗号formParameter;
bufferType:'buffer'逗号id=id;
instanceParameter:'instanceId'
|“instanceKey”
|“第一杯”
|“最后一次开放”
|“最新更新”
|“开始”
;
formParameter:'formId'
|“formKey”
|“最新更新”
;
functionParameter:'lastPen'
|“现场小组”
|“字段类型”
|“字段源”
|“更新ID”
|“sessionId”
|“信心”
|“ICR认可”
|“最新更新”;
InstanceAttributeType:p=('instattrib'|'instanceattrib')逗号属性类型;
formAttribType:'formattrib'逗号属性类型;
mandatorAttribType:'mandatorattrib'逗号属性类型;
instanceAttachmentType:('InstaAttachment'|'InstanceAttach')逗号attachmentType;
formAttachmentType:'formAtt'逗号attachmentType;
MandatoratachmentType:'Mandatoratratt'逗号attachmentType;
attributeType:module=ID'#'attribName=ID;
附件类型:name=ID'#'page=INT'#'index=INT;
功能:
命令集
|命令是空的
|命令平等
|commandIsNumLessEqual
|命令无核
|CommandisNumGrateRequal
|commandIsNumGreater
|司令部
|无命令
|commandIsLessEqual
|命令更大
|命令更大
|命令匹配
|命令包含
|命令行
|命令开始使用
;
commandIsSet:IS_SET LPAREN参数RPAREN;
commandIsEmpty:LPAREN参数RPAREN为空;
commandIsEqual:IS_等于LPAREN p1=参数'|'p2=参数RPAREN;
commandStartsWith:'startsWith'LPAREN p1=参数'|'p2=参数RPAREN;
commandEndsWith:'endsWith'LPAREN p1=参数'|'p2=参数RPAREN;
commandContains:'contains'LPAREN p1=参数'|'p2=参数RPAREN;
commandMatches:'matches'LPAREN p1=参数'|'p2=参数
anyType : STRING;

constType
 : ID        #ID_Without
 | STRING    #ID_WITH
 | INT       #INT_VALUE
 | DIGIT_DOT #DIGIT_DOT_VALUE
 ;

STRING : '"' ( ~[\\"\r\n] | '\\' ~[\r\n] )* '"';