antlr4 문법에서 끝 괄호가 유효한 것으로 인식되지 않는 이유는 무엇입니까?

알 파바

ANTLR4로 DSL을 작성 중입니다. 이제 오른쪽 괄호를 끝내는 데 문제가 있습니다. 이 명령이 유효하지 않은 이유

다음은 명령입니다.

set(buffer,variableX|"foo");

오류가있는 구문 분석 트리

여기에 이미지 설명 입력

여기 내 문법입니다

        grammar Expr;
        
        prog: expr+ 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 variableType '|' parameter RPAREN SEMI;
        setIfCommand: 'setIf' LPAREN variableType '|' expr '?' parameter ':' parameter RPAREN SEMI;
        
        getCommand: getFieldValue | getInstanceAttribValue|getInstanceAttribValue|getFormAttribValue|getMandatorAttribValue;
        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;
        
        twoParameterList: parameter '|' parameter;
        parameter:variableType | constType;
        pdixFuncton:ID;
        constType:
                        ID
                        | '"'  ID '"';
        variableType:
                            valueType
                            |instanceType
                            |formType
                            |bufferType
                            |instanceAttribType
                            |formAttribType
                            |mandatorAttribType
                            ;
        valueType:'value' COMMA parameter (COMMA functionParameter)?;
        instanceType: 'instance' COMMA instanceParameter;
        formType: 'form' COMMA formParameter;
        bufferType: 'buffer' COMMA ID '|' parameter;
        instanceParameter: 'instanceId'
                                        | 'instanceKey'
                                        | 'firstpenId'
                                        | 'lastpenId'
                                        | 'lastUpdate'
                                        | 'started'
                                        ;
        formParameter: 'formId'
                                    |'formKey'
                                    |'lastUpdate'
                                    ;
        functionParameter: 'lastPen'
                                        | 'fieldGroup'
                                        | ' fieldType'
                                        | 'fieldSource'
                                        | 'updateId'
                                        | 'sessionId'
                                        | 'icrConfidence'
                                        | 'icrRecognition'
                                        |  'lastUpdate';
        
        instanceAttribType:('instattrib' | 'instanceattrib') COMMA attributeType;
        formAttribType:'formattrib' COMMA attributeType;
        mandatorAttribType: 'mandatorattrib' COMMA attributeType;
        attributeType:ID '#' ID;
        
         function:
                        commandIsSet            #IsSet
                        | commandIsEmpty    #IsEmpty
                        | commandIsEqual  #IsEqual
                        ;
        commandIsSet: IS_SET LPAREN parameter RPAREN;
        commandIsEmpty: IS_EMPTY LPAREN parameter RPAREN;
        commandIsEqual: IS_EQUAL LPAREN twoParameterList RPAREN;
        
        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]+;
        NEWLINE: '\r'? '\n';
        IS_SET:'isSet';
        IS_EMPTY:'isEmpty';
        IS_EQUAL:'isEqual';
        WS: (' '|'\t' | '\n' | '\r' )+ -> skip;
        
        ID
        :   JavaLetter JavaLetterOrDigit*
        ;
        
        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.
바트 키 어스

입력 set(buffer,variableX|"foo");은 다음으로 구문 분석 할 수 없습니다.

setCommand: 'set' LPAREN variableType '|' parameter RPAREN SEMI;

다음 buffer,variableX|"foo"과 일치 하기 때문 입니다.

bufferType: 'buffer' COMMA ID '|' parameter;

어떤 원인 '|' parameter로부터는 setCommand아무것도 일치하지 못할 수 있습니다. 입력이와 같은 경우 set(buffer,variableX|"foo"|"bar");성공적으로 구문 분석됩니다. 또는 규칙 또는 규칙 '|' parameter에서 제거하십시오 .setCommandbufferType

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 ANTLR4 문법이 모호한 이유는 무엇입니까?

분류에서Dev

이것이 유효한 날짜 / 시간으로 인식되지 않는 이유는 무엇입니까?

분류에서Dev

밀리 초가있는 ParseExact에서 문자열이 유효한 DateTime으로 인식되지 않았습니다.

분류에서Dev

`json.dump ()`가`\ n`으로 끝나지 않는 이유는 무엇입니까?

분류에서Dev

NewGuid ()에 의해 생성되지 않으면 Guid가 인식되지 않는 이유는 무엇입니까?

분류에서Dev

정수가 0보다 큰 것으로 인식되지 않는 이유는 무엇입니까?

분류에서Dev

Coq가 인정하는 정리가 Linux 및 Windows에서 QED로 끝나는 것을 허용하지 않는 이유는 무엇입니까?

분류에서Dev

형식 입력이 끝날 때 scanf가 공백으로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

"3"인수가있는 powershell "ParseExact": "문자열이 유효한 DateTime으로 인식되지 않았습니다.

분류에서Dev

ANTLR4에서 getChild 메서드가 ParseRuleContext가 아닌 ParseTree를 반환하는 이유는 무엇입니까?

분류에서Dev

ViewState 문자열을 사용하는 것이 유효한 datetime으로 인식되지 않았습니다.

분류에서Dev

Windows 배치 파일의 줄 바꿈으로 인해 괄호가 인식되지 않는 이유는 무엇입니까?

분류에서Dev

Idea가 ANTLR4에서 생성 된 소스를 찾을 수없는 이유는 무엇입니까?

분류에서Dev

elixir 함수의 유형 사양 끝에 () 또는 괄호가있는 이유는 무엇입니까?

분류에서Dev

./가 내 PHP 파일에서 현재 디렉토리로 인식되지 않는 이유는 무엇입니까?

분류에서Dev

pip가 내 경로에 있는데도 여전히 인식되지 않는 이유는 무엇입니까?

분류에서Dev

antlr4 : 토큰이 의도 한대로 인식되지 않습니다.

분류에서Dev

libtiff.so.4가 인식되지 않는 이유는 무엇입니까?

분류에서Dev

이 스크립트가 무한 루프로 끝나지 않는 이유는 무엇입니까?

분류에서Dev

경로가 인식되지 않는 이유는 무엇입니까?

분류에서Dev

'+'로 시작하는이 문자열 추가를 유효한 문으로 만드는 것은 무엇입니까?

분류에서Dev

이것들이 같은 방식으로 평가되지 않는 이유는 무엇입니까?

분류에서Dev

시맨틱 술어가 ANTLR4에서 작동하지 않는 이유

분류에서Dev

끝에 빈 문자열을 추가하지 않으면 동적 src 경로가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

IDEA가 Android 프로젝트에서 Java 파일을 유효하지 않은 것으로 표시하는 이유는 무엇입니까?

분류에서Dev

C ++ : 괄호가 비어 있으면 오류 개체가 throw되지 않는 이유는 무엇입니까?

분류에서Dev

while 루프가 끝날 때까지 UI가로드되지 않는 이유는 무엇입니까?

분류에서Dev

대괄호 표기법으로 유형을 전달할 때 Angular에서 확인란이 예상대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

C에서 자식 프로세스가 자동으로 수확되지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    이 ANTLR4 문법이 모호한 이유는 무엇입니까?

  2. 2

    이것이 유효한 날짜 / 시간으로 인식되지 않는 이유는 무엇입니까?

  3. 3

    밀리 초가있는 ParseExact에서 문자열이 유효한 DateTime으로 인식되지 않았습니다.

  4. 4

    `json.dump ()`가`\ n`으로 끝나지 않는 이유는 무엇입니까?

  5. 5

    NewGuid ()에 의해 생성되지 않으면 Guid가 인식되지 않는 이유는 무엇입니까?

  6. 6

    정수가 0보다 큰 것으로 인식되지 않는 이유는 무엇입니까?

  7. 7

    Coq가 인정하는 정리가 Linux 및 Windows에서 QED로 끝나는 것을 허용하지 않는 이유는 무엇입니까?

  8. 8

    형식 입력이 끝날 때 scanf가 공백으로 작동하지 않는 이유는 무엇입니까?

  9. 9

    "3"인수가있는 powershell "ParseExact": "문자열이 유효한 DateTime으로 인식되지 않았습니다.

  10. 10

    ANTLR4에서 getChild 메서드가 ParseRuleContext가 아닌 ParseTree를 반환하는 이유는 무엇입니까?

  11. 11

    ViewState 문자열을 사용하는 것이 유효한 datetime으로 인식되지 않았습니다.

  12. 12

    Windows 배치 파일의 줄 바꿈으로 인해 괄호가 인식되지 않는 이유는 무엇입니까?

  13. 13

    Idea가 ANTLR4에서 생성 된 소스를 찾을 수없는 이유는 무엇입니까?

  14. 14

    elixir 함수의 유형 사양 끝에 () 또는 괄호가있는 이유는 무엇입니까?

  15. 15

    ./가 내 PHP 파일에서 현재 디렉토리로 인식되지 않는 이유는 무엇입니까?

  16. 16

    pip가 내 경로에 있는데도 여전히 인식되지 않는 이유는 무엇입니까?

  17. 17

    antlr4 : 토큰이 의도 한대로 인식되지 않습니다.

  18. 18

    libtiff.so.4가 인식되지 않는 이유는 무엇입니까?

  19. 19

    이 스크립트가 무한 루프로 끝나지 않는 이유는 무엇입니까?

  20. 20

    경로가 인식되지 않는 이유는 무엇입니까?

  21. 21

    '+'로 시작하는이 문자열 추가를 유효한 문으로 만드는 것은 무엇입니까?

  22. 22

    이것들이 같은 방식으로 평가되지 않는 이유는 무엇입니까?

  23. 23

    시맨틱 술어가 ANTLR4에서 작동하지 않는 이유

  24. 24

    끝에 빈 문자열을 추가하지 않으면 동적 src 경로가 작동하지 않는 이유는 무엇입니까?

  25. 25

    IDEA가 Android 프로젝트에서 Java 파일을 유효하지 않은 것으로 표시하는 이유는 무엇입니까?

  26. 26

    C ++ : 괄호가 비어 있으면 오류 개체가 throw되지 않는 이유는 무엇입니까?

  27. 27

    while 루프가 끝날 때까지 UI가로드되지 않는 이유는 무엇입니까?

  28. 28

    대괄호 표기법으로 유형을 전달할 때 Angular에서 확인란이 예상대로 작동하지 않는 이유는 무엇입니까?

  29. 29

    C에서 자식 프로세스가 자동으로 수확되지 않는 이유는 무엇입니까?

뜨겁다태그

보관