This repository was archived by the owner on Nov 25, 2025. It is now read-only.

Description
UniClassDec を extends UniExpr にした場合、
List<UniMemberDec> members;
List<UniClassDec> innerClasses;
というフィールドがあるが、g4ファイルが
normalClassDeclaration => UniClassDec
:
classModifiers$modifiers 'class' className$className typeParameters?
superclass?$superClass superinterfaces?$interfaces classBody$members
;
classBody => List<UniMemberDec>
: '{' classBodyDeclaration*$ADD '}'
;
classBodyDeclaration => List<UniMemberDec>
: classMemberDeclaration$ADD
| instanceInitializer
| staticInitializer
| constructorDeclaration$ADD
;
classMemberDeclaration => List<UniMemberDec>
: fieldDeclaration$ADD
| methodDeclaration$ADD
| classDeclaration←インナークラス
| interfaceDeclaration
| ';'
;
のような状態のためインナークラスをmembersにもinnerClasses加えることが難しい。
解決策として
$ADDするものの型からどちらのListに追加するのか判断するような表現を可能にしたい。
classBody$(members|innerClasses)
classBody => List<UniMemberDec> | List<UniClassDec>
: '{' classBodyDeclaration*$ADD '}'
;