This repository was archived by the owner on Nov 25, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
This repository was archived by the owner on Nov 25, 2025. It is now read-only.
再帰的に呼ばれる場合の表現 #34
Copy link
Copy link
Open
Description
C/C++のg4ファイルだと例えば以下のように
本来ならそれぞれUniUnaryOp,UniFieldAccess,UniMethodCall,UniCast,UniBinOpなどにしたいものが一箇所にまとまっており現在はとりあえず全てUniBinOpとして認識させている。
postfixexpression => UniBinOp
:
primaryexpression$RETURN
| postfixexpression$left LeftBracket$operator assignmentexpression$right RightBracket$operator
| postfixexpression '[' bracedinitlist ']'
| postfixexpression$left LeftParen$operator expressionlist?$right RightParen$operator
| simpletypespecifier '(' expressionlist? ')'
| typenamespecifier '(' expressionlist? ')'
| simpletypespecifier bracedinitlist
| typenamespecifier bracedinitlist
| postfixexpression$left Dot$operator Template? idexpressionlapper$right
| postfixexpression$left Arrow$operator Template? idexpressionlapper$right
| postfixexpression$left Dot$operator pseudodestructorname$right
| postfixexpression$left Arrow$operator pseudodestructorname$right
| postfixexpression '++'
| postfixexpression '--'
| Dynamic_cast '<' typeid '>' '(' expression ')'
| Static_cast '<' typeid '>' '(' expression ')'
| Reinterpret_cast '<' typeid '>' '(' expression ')'
| Const_cast '<' typeid '>' '(' expression ')'
| Typeid '(' expression ')'
| Typeid '(' typeid ')'
;
これを例えば以下のようにしてもpostfixexpressionが再帰的に呼ばれる場合のためか認識されない。
postfixexpression => UniBinOp
:
primaryexpression$RETURN
| fieldaccessexpression$RETURN
| postfixexpression '[' bracedinitlist ']'
| methodcallexpression$RETURN
| simpletypespecifier bracedinitlist
| typenamespecifier bracedinitlist
| postincrementexpression$RETURN
| Dynamic_cast '<' typeid '>' '(' expression ')'
| Static_cast '<' typeid '>' '(' expression ')'
| Reinterpret_cast '<' typeid '>' '(' expression ')'
| Const_cast '<' typeid '>' '(' expression ')'
| Typeid '(' expression ')'
| Typeid '(' typeid ')'
;
fieldaccessexpression => UniFieldAccess
:
postfixexpression$fieldName LeftBracketassignmentexpression$index RightBracket
| postfixexpression$receiver DotTemplate? idexpressionlapper$fieldName
| postfixexpression$receiver ArrowTemplate? idexpressionlapper$fieldName
| postfixexpression$receiver Dotpseudodestructorname$fieldName
| postfixexpression$receiver Arrowpseudodestructorname$fieldName
;
methodcallexpression => UniMethodCall
:
postfixexpression$methodName '(' expressionlist?$args ')'
| simpletypespecifier$methodName '(' expressionlist?$args ')'
| typenamespecifier$methodName '(' expressionlist?$args ')'
;
postincrementexpression => UniUnaryOp
:
postfixexpression$value PlusPlus$operator
| postfixexpression$value MinusMinus$operator
;
Metadata
Metadata
Assignees
Labels
No labels