parser: extends grammar to support annotations
[nit.git] / src / parser / parser_nodes.nit
index 6178ce6..12bc9a9 100644 (file)
@@ -27,169 +27,195 @@ abstract class ANode
        # Location is set during AST building. Once built, location cannon be null
        # However, manual instanciated nodes may need mode care
        fun location: Location do return _location.as(not null)
+       # The location of the important part of the node (identifier or whatever)
+       fun hot_location: Location do return location
+       init do end
+
+       # Display a message for the colored location of the node
+       fun debug(message: String)
+       do
+               print "{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}"
+       end
 end
 
 # Ancestor of all tokens
 abstract class Token
        super ANode
+       fun text: String is abstract
+
+       redef fun to_s: String do
+               return "'{text}'"
+       end
 end
 
 # Ancestor of all productions
 abstract class Prod
        super ANode
        fun location=(l: Location) do _location = l
+       readable var _n_annotations: nullable AAnnotations = null
 end
 class TEol
        super Token
+       redef fun to_s
+       do
+               return "end of line"
+       end
 end
 class TComment
        super Token
 end
-class TKwmodule
+abstract class TokenKeyword
        super Token
+       redef fun to_s
+       do
+               return "keyword '{text}'"
+       end
+end
+class TKwmodule
+       super TokenKeyword
 end
 class TKwimport
-       super Token
+       super TokenKeyword
 end
 class TKwclass
-       super Token
+       super TokenKeyword
 end
 class TKwabstract
-       super Token
+       super TokenKeyword
 end
 class TKwinterface
-       super Token
+       super TokenKeyword
 end
 class TKwenum
-       super Token
-end
-class TKwspecial
-       super Token
+       super TokenKeyword
 end
 class TKwend
-       super Token
+       super TokenKeyword
 end
 class TKwmeth
-       super Token
+       super TokenKeyword
 end
 class TKwtype
-       super Token
+       super TokenKeyword
 end
 class TKwinit
-       super Token
+       super TokenKeyword
 end
 class TKwredef
-       super Token
+       super TokenKeyword
 end
 class TKwis
-       super Token
+       super TokenKeyword
 end
 class TKwdo
-       super Token
+       super TokenKeyword
 end
 class TKwreadable
-       super Token
+       super TokenKeyword
 end
 class TKwwritable
-       super Token
+       super TokenKeyword
 end
 class TKwvar
-       super Token
+       super TokenKeyword
 end
 class TKwintern
-       super Token
+       super TokenKeyword
 end
 class TKwextern
-       super Token
+       super TokenKeyword
 end
 class TKwprotected
-       super Token
+       super TokenKeyword
 end
 class TKwprivate
-       super Token
+       super TokenKeyword
 end
 class TKwintrude
-       super Token
+       super TokenKeyword
 end
 class TKwif
-       super Token
+       super TokenKeyword
 end
 class TKwthen
-       super Token
+       super TokenKeyword
 end
 class TKwelse
-       super Token
+       super TokenKeyword
 end
 class TKwwhile
-       super Token
+       super TokenKeyword
 end
 class TKwloop
-       super Token
+       super TokenKeyword
 end
 class TKwfor
-       super Token
+       super TokenKeyword
 end
 class TKwin
-       super Token
+       super TokenKeyword
 end
 class TKwand
-       super Token
+       super TokenKeyword
 end
 class TKwor
-       super Token
+       super TokenKeyword
 end
 class TKwnot
-       super Token
+       super TokenKeyword
 end
 class TKwreturn
-       super Token
+       super TokenKeyword
 end
 class TKwcontinue
-       super Token
+       super TokenKeyword
 end
 class TKwbreak
-       super Token
+       super TokenKeyword
 end
 class TKwabort
-       super Token
+       super TokenKeyword
 end
 class TKwassert
-       super Token
+       super TokenKeyword
 end
 class TKwnew
-       super Token
+       super TokenKeyword
 end
 class TKwisa
-       super Token
+       super TokenKeyword
 end
 class TKwonce
-       super Token
+       super TokenKeyword
 end
 class TKwsuper
-       super Token
+       super TokenKeyword
 end
 class TKwself
-       super Token
+       super TokenKeyword
 end
 class TKwtrue
-       super Token
+       super TokenKeyword
 end
 class TKwfalse
-       super Token
+       super TokenKeyword
 end
 class TKwnull
-       super Token
+       super TokenKeyword
 end
 class TKwas
-       super Token
+       super TokenKeyword
 end
 class TKwnullable
-       super Token
+       super TokenKeyword
 end
 class TKwisset
-       super Token
+       super TokenKeyword
 end
 class TKwlabel
+       super TokenKeyword
+end
+class TKwdebug
        super Token
 end
 class TOpar
@@ -216,99 +242,149 @@ end
 class TAssign
        super Token
 end
-class TPluseq
+abstract class TokenOperator
        super Token
+       redef fun to_s
+       do
+               return "operator '{text}'"
+       end
+end
+class TPluseq
+       super TokenOperator
 end
 class TMinuseq
-       super Token
+       super TokenOperator
 end
 class TDotdotdot
-       super Token
+       super TokenOperator
 end
 class TDotdot
-       super Token
+       super TokenOperator
 end
 class TDot
-       super Token
+       super TokenOperator
 end
 class TPlus
-       super Token
+       super TokenOperator
 end
 class TMinus
-       super Token
+       super TokenOperator
 end
 class TStar
-       super Token
+       super TokenOperator
 end
 class TSlash
-       super Token
+       super TokenOperator
 end
 class TPercent
-       super Token
+       super TokenOperator
 end
 class TEq
-       super Token
+       super TokenOperator
 end
 class TNe
-       super Token
+       super TokenOperator
 end
 class TLt
-       super Token
+       super TokenOperator
 end
 class TLe
-       super Token
+       super TokenOperator
 end
 class TLl
-       super Token
+       super TokenOperator
 end
 class TGt
-       super Token
+       super TokenOperator
 end
 class TGe
-       super Token
+       super TokenOperator
 end
 class TGg
-       super Token
+       super TokenOperator
 end
 class TStarship
-       super Token
+       super TokenOperator
 end
 class TBang
+       super TokenOperator
+end
+class TAt
        super Token
 end
 class TClassid
        super Token
+       redef fun to_s
+       do
+               do return "type identifier '{text}'"
+       end
 end
 class TId
        super Token
+       redef fun to_s
+       do
+               do return "identifier '{text}'"
+       end
 end
 class TAttrid
        super Token
+       redef fun to_s
+       do
+               do return "attribute '{text}'"
+       end
 end
-class TNumber
+abstract class TokenLiteral
        super Token
+       redef fun to_s
+       do
+               do return "literal value '{text}'"
+       end
+end
+class TNumber
+       super TokenLiteral
 end
 class TFloat
-       super Token
+       super TokenLiteral
 end
 class TChar
-       super Token
+       super TokenLiteral
 end
 class TString
-       super Token
+       super TokenLiteral
 end
 class TStartString
-       super Token
+       super TokenLiteral
 end
 class TMidString
-       super Token
+       super TokenLiteral
 end
 class TEndString
        super Token
 end
+class TBadString
+       super Token
+       redef fun to_s
+       do
+               do return "malformed string {text}"
+       end
+end
+class TBadChar
+       super Token
+       redef fun to_s
+       do
+               do return "malformed character {text}"
+       end
+end
+class TExternCodeSegment
+       super Token
+end
 class EOF
        super Token
 private init noinit do end
+       redef fun to_s
+       do
+               return "end of file"
+       end
 end
 class AError
        super EOF
@@ -319,20 +395,21 @@ class AModule
        super Prod
     readable var _n_moduledecl: nullable AModuledecl = null
     readable var _n_imports: List[AImport] = new List[AImport]
+       readable var _n_extern_code_blocks: List[AExternCodeBlock] = new List[AExternCodeBlock]
     readable var _n_classdefs: List[AClassdef] = new List[AClassdef]
 end
 class AModuledecl
        super Prod
     readable var _n_doc: nullable ADoc = null
     readable var _n_kwmodule: TKwmodule
-    readable var _n_id: TId
+    readable var _n_name: AModuleName
 end
-class AImport super Prod end
+abstract class AImport super Prod end
 class AStdImport
        super AImport
     readable var _n_visibility: AVisibility
     readable var _n_kwimport: TKwimport
-    readable var _n_id: TId
+    readable var _n_name: AModuleName
 end
 class ANoImport
        super AImport
@@ -340,7 +417,7 @@ class ANoImport
     readable var _n_kwimport: TKwimport
     readable var _n_kwend: TKwend
 end
-class AVisibility super Prod end
+abstract class AVisibility super Prod end
 class APublicVisibility
        super AVisibility
 end
@@ -356,7 +433,9 @@ class AIntrudeVisibility
        super AVisibility
     readable var _n_kwintrude: TKwintrude
 end
-class AClassdef super Prod end
+abstract class AClassdef super Prod
+    readable var _n_propdefs: List[APropdef] = new List[APropdef]
+end
 class AStdClassdef
        super AClassdef
     readable var _n_doc: nullable ADoc = null
@@ -365,18 +444,18 @@ class AStdClassdef
     readable var _n_classkind: AClasskind
     readable var _n_id: nullable TClassid = null
     readable var _n_formaldefs: List[AFormaldef] = new List[AFormaldef]
+       readable var _n_extern_code_block: nullable AExternCodeBlock = null
     readable var _n_superclasses: List[ASuperclass] = new List[ASuperclass]
-    readable var _n_propdefs: List[APropdef] = new List[APropdef]
+    readable var _n_kwend: TKwend
+    redef fun hot_location do return n_id.location
 end
 class ATopClassdef
        super AClassdef
-    readable var _n_propdefs: List[APropdef] = new List[APropdef]
 end
 class AMainClassdef
        super AClassdef
-    readable var _n_propdefs: List[APropdef] = new List[APropdef]
 end
-class AClasskind super Prod end
+abstract class AClasskind super Prod end
 class AConcreteClasskind
        super AClasskind
     readable var _n_kwclass: TKwclass
@@ -394,6 +473,11 @@ class AEnumClasskind
        super AClasskind
     readable var _n_kwenum: TKwenum
 end
+class AExternClasskind
+       super AClasskind
+    readable var _n_kwextern: TKwextern
+    readable var _n_kwclass: nullable TKwclass = null
+end
 class AFormaldef
        super Prod
     readable var _n_id: TClassid
@@ -401,11 +485,10 @@ class AFormaldef
 end
 class ASuperclass
        super Prod
-    readable var _n_kwspecial: nullable TKwspecial = null
-    readable var _n_kwsuper: nullable TKwsuper = null
+    readable var _n_kwsuper: TKwsuper
     readable var _n_type: AType
 end
-class APropdef super Prod
+abstract class APropdef super Prod
     readable var _n_doc: nullable ADoc = null
 end
 class AAttrPropdef
@@ -419,13 +502,25 @@ class AAttrPropdef
     readable var _n_readable: nullable AAble = null
     readable var _n_writable: nullable AAble = null
     readable var _n_expr: nullable AExpr = null
+    redef fun hot_location
+    do
+           if n_id != null then return n_id.location else return n_id2.location
+    end
 end
-class AMethPropdef
+abstract class AMethPropdef
        super APropdef
     readable var _n_kwredef: nullable TKwredef = null
     readable var _n_visibility: nullable AVisibility
     readable var _n_methid: nullable AMethid = null
     readable var _n_signature: nullable ASignature
+    redef fun hot_location
+    do
+           if n_methid != null then
+                   return n_methid.location
+           else
+                   return location
+           end
+    end
 end
 class ADeferredMethPropdef
        super AMethPropdef
@@ -435,23 +530,90 @@ class AInternMethPropdef
        super AMethPropdef
     readable var _n_kwmeth: TKwmeth
 end
+abstract class AExternPropdef
+       super AMethPropdef
+    readable var _n_extern: nullable TString = null
+    readable var _n_extern_calls: nullable AExternCalls = null
+    readable var _n_extern_code_block: nullable AExternCodeBlock = null
+end
 class AExternMethPropdef
        super AMethPropdef
+       super AExternPropdef
     readable var _n_kwmeth: TKwmeth
-    readable var _n_extern: nullable TString = null
 end
 class AConcreteMethPropdef
        super AMethPropdef
     readable var _n_kwmeth: nullable TKwmeth
     readable var _n_block: nullable AExpr = null
 end
+abstract class AInitPropdef
+       super AMethPropdef
+end
 class AConcreteInitPropdef
        super AConcreteMethPropdef
+       super AInitPropdef
     readable var _n_kwinit: TKwinit
+    redef fun hot_location do return n_kwinit.location
+end
+class AExternInitPropdef
+       super AExternPropdef
+       super AInitPropdef
+    readable var _n_kwnew: TKwnew
 end
 class AMainMethPropdef
        super AConcreteMethPropdef
 end
+class AExternCalls
+       super Prod
+    readable var _n_kwimport: TKwimport
+    readable var _n_extern_calls: List[AExternCall] = new List[AExternCall]
+end
+abstract class AExternCall
+       super Prod
+end
+abstract class APropExternCall
+super AExternCall
+end
+class ALocalPropExternCall
+super APropExternCall
+    readable var _n_methid: AMethid
+end
+class AFullPropExternCall
+super APropExternCall
+    readable var _n_classid: TClassid
+    readable var _n_quad: nullable TQuad = null
+    readable var _n_methid: AMethid
+end
+class AInitPropExternCall
+super APropExternCall
+    readable var _n_classid: TClassid
+end
+class ASuperExternCall
+super AExternCall
+    readable var _n_kwsuper: TKwsuper
+end
+abstract class ACastExternCall
+super AExternCall
+end
+class ACastAsExternCall
+super ACastExternCall
+    readable var _n_from_type: AType
+    readable var _n_kwas: TKwas
+    readable var _n_to_type: AType
+end
+class AAsNullableExternCall
+super ACastExternCall
+    readable var _n_type: AType
+    readable var _n_kwas: TKwas
+    readable var _n_kwnullable: TKwnullable
+end
+class AAsNotNullableExternCall
+super ACastExternCall
+    readable var _n_type: AType
+    readable var _n_kwas: TKwas
+    readable var _n_kwnot: TKwnot
+    readable var _n_kwnullable: TKwnullable
+end
 class ATypePropdef
        super APropdef
     readable var _n_kwredef: nullable TKwredef = null
@@ -460,7 +622,7 @@ class ATypePropdef
     readable var _n_id: TClassid
     readable var _n_type: AType
 end
-class AAble super Prod
+abstract class AAble super Prod
     readable var _n_visibility: nullable AVisibility = null
     readable var _n_kwredef: nullable TKwredef = null
 end
@@ -472,7 +634,7 @@ class AWriteAble
        super AAble
     readable var _n_kwwritable: TKwwritable
 end
-class AMethid super Prod end
+abstract class AMethid super Prod end
 class AIdMethid
        super AMethid
     readable var _n_id: TId
@@ -551,7 +713,9 @@ class ABraassignMethid
 end
 class ASignature
        super Prod
+    readable var _n_opar: nullable TOpar = null
     readable var _n_params: List[AParam] = new List[AParam]
+    readable var _n_cpar: nullable TCpar = null
     readable var _n_type: nullable AType = null
     readable var _n_closure_decls: List[AClosureDecl] = new List[AClosureDecl]
 end
@@ -580,10 +744,11 @@ class ALabel
     readable var _n_kwlabel: TKwlabel
     readable var _n_id: TId
 end
-class AExpr super Prod end
+abstract class AExpr super Prod end
 class ABlockExpr
        super AExpr
     readable var _n_expr: List[AExpr] = new List[AExpr]
+    readable var _n_kwend: nullable TKwend = null
 end
 class AVardeclExpr
        super AExpr
@@ -598,7 +763,7 @@ class AReturnExpr
     readable var _n_kwreturn: nullable TKwreturn = null
     readable var _n_expr: nullable AExpr = null
 end
-class ALabelable
+abstract class ALabelable
        super Prod
     readable var _n_label: nullable ALabel = null
 end
@@ -670,12 +835,12 @@ class AAssertExpr
     readable var _n_expr: AExpr
     readable var _n_else: nullable AExpr = null
 end
-class AAssignFormExpr
+abstract class AAssignFormExpr
        super AExpr
     readable var _n_assign: TAssign
     readable var _n_value: AExpr
 end
-class AReassignFormExpr
+abstract class AReassignFormExpr
        super AExpr
     readable var _n_assign_op: AAssignOp
     readable var _n_value: AExpr
@@ -684,16 +849,16 @@ class AOnceExpr
        super AProxyExpr
     readable var _n_kwonce: TKwonce
 end
-class ASendExpr
+abstract class ASendExpr
        super AExpr
     readable var _n_expr: AExpr
     readable var _n_closure_defs: List[AClosureDef] = new List[AClosureDef]
 end
-class ABinopExpr
+abstract class ABinopExpr
        super ASendExpr
     readable var _n_expr2: AExpr
 end
-class ABoolExpr
+abstract class ABoolExpr
        super AExpr
 end
 class AOrExpr
@@ -777,9 +942,9 @@ class ANewExpr
     readable var _n_kwnew: TKwnew
     readable var _n_type: AType
     readable var _n_id: nullable TId = null
-    readable var _n_args: List[AExpr] = new List[AExpr]
+    readable var _n_args: AExprs
 end
-class AAttrFormExpr
+abstract class AAttrFormExpr
        super AExpr
     readable var _n_expr: AExpr
     readable var _n_id: TAttrid
@@ -791,10 +956,14 @@ class AAttrAssignExpr
        super AAttrFormExpr
        super AAssignFormExpr
 end
-class ACallFormExpr
+abstract class ACallFormExpr
        super ASendExpr
     readable var _n_id: TId
-    readable var _n_args: List[AExpr] = new List[AExpr]
+    readable var _n_args: AExprs
+end
+abstract class ASendReassignFormExpr
+       super ASendExpr
+       super AReassignFormExpr
 end
 class AAttrReassignExpr
        super AExpr
@@ -811,22 +980,22 @@ end
 class ACallReassignExpr
        super AExpr
        super ACallFormExpr
-       super AReassignFormExpr
+       super ASendReassignFormExpr
 end
 class ASuperExpr
        super AExpr
     readable var _n_qualified: nullable AQualified = null
     readable var _n_kwsuper: TKwsuper
-    readable var _n_args: List[AExpr] = new List[AExpr]
+    readable var _n_args: AExprs
 end
 class AInitExpr
        super ASendExpr
     readable var _n_kwinit: TKwinit
-    readable var _n_args: List[AExpr] = new List[AExpr]
+    readable var _n_args: AExprs
 end
-class ABraFormExpr
+abstract class ABraFormExpr
        super ASendExpr
-    readable var _n_args: List[AExpr] = new List[AExpr]
+    readable var _n_args: AExprs
 end
 class ABraExpr
        super ABraFormExpr
@@ -835,18 +1004,18 @@ class ABraAssignExpr
        super ABraFormExpr
        super AAssignFormExpr
 end
-class AVarFormExpr
+abstract class AVarFormExpr
        super AExpr
     readable var _n_id: TId
 end
 class ABraReassignExpr
        super ABraFormExpr
-       super AReassignFormExpr
+       super ASendReassignFormExpr
 end
 class AClosureCallExpr
        super AExpr
     readable var _n_id: TId
-    readable var _n_args: List[AExpr] = new List[AExpr]
+    readable var _n_args: AExprs
     readable var _n_closure_defs: List[AClosureDef] = new List[AClosureDef]
 end
 class AVarExpr
@@ -860,20 +1029,24 @@ class AVarReassignExpr
        super AVarFormExpr
        super AReassignFormExpr
 end
-class ARangeExpr
+abstract class ARangeExpr
        super AExpr
     readable var _n_expr: AExpr
     readable var _n_expr2: AExpr
 end
 class ACrangeExpr
        super ARangeExpr
+       readable var _n_obra: TObra
+       readable var _n_cbra: TCbra
 end
 class AOrangeExpr
        super ARangeExpr
+       readable var _n_obra: TObra
+       readable var _n_cbra: TObra
 end
 class AArrayExpr
        super AExpr
-    readable var _n_exprs: List[AExpr] = new List[AExpr]
+    readable var _n_exprs: AExprs
 end
 class ASelfExpr
        super AExpr
@@ -906,7 +1079,7 @@ class ACharExpr
        super AExpr
     readable var _n_char: TChar
 end
-class AStringFormExpr
+abstract class AStringFormExpr
        super AExpr
 end
 class AStringExpr
@@ -931,8 +1104,10 @@ class ASuperstringExpr
 end
 class AParExpr
        super AProxyExpr
+    readable var _n_opar: TOpar
+    readable var _n_cpar: TCpar
 end
-class AProxyExpr
+abstract class AProxyExpr
        super AExpr
     readable var _n_expr: AExpr
 end
@@ -940,20 +1115,48 @@ class AAsCastExpr
        super AExpr
     readable var _n_expr: AExpr
     readable var _n_kwas: TKwas
+    readable var _n_opar: TOpar
     readable var _n_type: AType
+    readable var _n_cpar: TCpar
 end
 class AAsNotnullExpr
        super AExpr
     readable var _n_expr: AExpr
     readable var _n_kwas: TKwas
+    readable var _n_opar: TOpar
     readable var _n_kwnot: TKwnot
     readable var _n_kwnull: TKwnull
+    readable var _n_cpar: TCpar
 end
 class AIssetAttrExpr
        super AAttrFormExpr
     readable var _n_kwisset: TKwisset
 end
-class AAssignOp super Prod end
+abstract class AExprs
+       super Prod 
+    readable var _n_exprs: List[AExpr] = new List[AExpr]
+end
+class ADebugTypeExpr
+       super AExpr
+    readable var _n_kwdebug: TKwdebug
+    readable var _n_kwtype: TKwtype
+    readable var _n_expr: AExpr
+    readable var _n_type: AType
+end
+class AListExprs
+       super AExprs
+end
+class AParExprs
+       super AExprs
+    readable var _n_opar: TOpar
+    readable var _n_cpar: TCpar
+end
+class ABraExprs
+       super AExprs
+    readable var _n_obra: TObra
+    readable var _n_cbra: TCbra
+end
+abstract class AAssignOp super Prod end
 class APlusAssignOp
        super AAssignOp
     readable var _n_pluseq: TPluseq
@@ -969,8 +1172,9 @@ class AClosureDef
     readable var _n_ids: List[TId] = new List[TId]
     readable var _n_kwdo: nullable TKwdo = null
     readable var _n_expr: nullable AExpr = null
+    redef fun hot_location do return n_id.location
 end
-class AClosureId
+abstract class AClosureId
        super Prod
 end
 class ASimpleClosureId
@@ -981,8 +1185,25 @@ class ABreakClosureId
        super AClosureId
     readable var _n_kwbreak: TKwbreak
 end
+class AModuleName
+super Prod
+    readable var _n_quad: nullable TQuad = null
+    readable var _n_path: List[TId] = new List[TId]
+    readable var _n_id: TId
+end
+class AInLanguage
+       super Prod
+    readable var _n_kwin: TKwin
+    readable var _n_string: TString
+end
+class AExternCodeBlock
+       super Prod
+    readable var _n_in_language: nullable AInLanguage = null
+    readable var _n_extern_code_segment: TExternCodeSegment
+end
 class AQualified
        super Prod
+    readable var _n_quad: nullable TQuad = null
     readable var _n_id: List[TId] = new List[TId]
     readable var _n_classid: nullable TClassid = null
 end
@@ -991,8 +1212,64 @@ class ADoc
     readable var _n_comment: List[TComment] = new List[TComment]
 end
 
+class AAnnotations
+       super Prod
+       readable var _n_at: nullable TAt = null
+       readable var _n_opar: nullable TOpar = null
+       readable var _n_items: List[AAnnotation] = new List[AAnnotation]
+       readable var _n_cpar: nullable TCpar = null
+end
+class AAnnotation
+       super Prod
+       readable var _n_atid: AAtid
+       readable var _n_opar: nullable TOpar = null
+       readable var _n_args: List[AAtArg] = new List[AAtArg]
+       readable var _n_cpar: nullable TCpar = null
+end
+abstract class AAtArg
+       super Prod
+end
+class ATypeAtArg
+       super AAtArg
+       readable var _n_type: AType
+end
+class AExprAtArg
+       super AAtArg
+       readable var _n_expr: AExpr
+end
+class AAtAtArg
+       super AAtArg
+end
+abstract class AAtid
+       super Prod
+       readable var _n_id: Token
+end
+class AIdAtid
+       super AAtid
+end
+class AKwexternAtid
+       super AAtid
+end
+class AKwinternAtid
+       super AAtid
+end
+class AKwreadableAtid
+       super AAtid
+end
+class AKwwritableAtid
+       super AAtid
+end
+class AKwimportAtid
+       super AAtid
+end
+
 class Start
        super Prod
     readable var _n_base: nullable AModule
     readable var _n_eof: EOF
+    init(n_base: nullable AModule, n_eof: EOF)
+    do
+           self._n_base = n_base
+           self._n_eof = n_eof
+    end
 end