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

型から追加先を判断する表現 #33

@RYOSKATE

Description

@RYOSKATE

UniClassDecextends 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 '}'
    ;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions