1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2008-2009 Jean Privat <jean@pryen.org>
4 # Copyright 2009 Jean-Sebastien Gelinas <calestar@gmail.com>
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
18 # AST nodes of the Nit language
19 # Was previously based on parser_abs.nit.
24 # Root of the AST hierarchy
26 var _location
: nullable Location
27 # Location is set during AST building. Once built, location cannon be null
28 # However, manual instanciated nodes may need mode care
29 fun location
: Location do return _location
.as(not null)
30 # The location of the important part of the node (identifier or whatever)
31 fun hot_location
: Location do return location
34 # Display a message for the colored location of the node
35 fun debug
(message
: String)
37 print
"{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}"
41 # Ancestor of all tokens
44 fun text
: String is abstract
45 fun text
=(text
: String) is abstract
47 redef fun to_s
: String do
52 # Ancestor of all productions
55 fun location
=(l
: Location) do _location
= l
56 readable var _n_annotations
: nullable AAnnotations = null
68 abstract class TokenKeyword
72 return "keyword '{text}'"
246 abstract class TokenOperator
250 return "operator '{text}'"
320 do return "type identifier '{text}'"
327 do return "identifier '{text}'"
334 do return "attribute '{text}'"
337 abstract class TokenLiteral
341 do return "literal value '{text}'"
369 do return "malformed string {text}"
376 do return "malformed character {text}"
379 class TExternCodeSegment
401 readable var _n_moduledecl
: nullable AModuledecl = null
402 readable var _n_imports
: List[AImport] = new List[AImport]
403 readable var _n_extern_code_blocks
: List[AExternCodeBlock] = new List[AExternCodeBlock]
404 readable var _n_classdefs
: List[AClassdef] = new List[AClassdef]
408 readable var _n_doc
: nullable ADoc = null
409 readable var _n_kwmodule
: TKwmodule
410 readable var _n_name
: AModuleName
412 abstract class AImport super Prod end
415 readable var _n_visibility
: AVisibility
416 readable var _n_kwimport
: TKwimport
417 readable var _n_name
: AModuleName
421 readable var _n_visibility
: AVisibility
422 readable var _n_kwimport
: TKwimport
423 readable var _n_kwend
: TKwend
425 abstract class AVisibility super Prod end
426 class APublicVisibility
429 class APrivateVisibility
431 readable var _n_kwprivate
: TKwprivate
433 class AProtectedVisibility
435 readable var _n_kwprotected
: TKwprotected
437 class AIntrudeVisibility
439 readable var _n_kwintrude
: TKwintrude
441 abstract class AClassdef super Prod
442 readable var _n_propdefs
: List[APropdef] = new List[APropdef]
446 readable var _n_doc
: nullable ADoc = null
447 readable var _n_kwredef
: nullable TKwredef = null
448 readable var _n_visibility
: AVisibility
449 readable var _n_classkind
: AClasskind
450 readable var _n_id
: nullable TClassid = null
451 readable var _n_formaldefs
: List[AFormaldef] = new List[AFormaldef]
452 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
453 readable var _n_superclasses
: List[ASuperclass] = new List[ASuperclass]
454 readable var _n_kwend
: TKwend
455 redef fun hot_location
do return n_id
.location
463 abstract class AClasskind super Prod end
464 class AConcreteClasskind
466 readable var _n_kwclass
: TKwclass
468 class AAbstractClasskind
470 readable var _n_kwabstract
: TKwabstract
471 readable var _n_kwclass
: TKwclass
473 class AInterfaceClasskind
475 readable var _n_kwinterface
: TKwinterface
479 readable var _n_kwenum
: TKwenum
481 class AExternClasskind
483 readable var _n_kwextern
: TKwextern
484 readable var _n_kwclass
: nullable TKwclass = null
488 readable var _n_id
: TClassid
489 readable var _n_type
: nullable AType = null
493 readable var _n_kwsuper
: TKwsuper
494 readable var _n_type
: AType
496 abstract class APropdef super Prod
497 readable var _n_doc
: nullable ADoc = null
501 readable var _n_kwredef
: nullable TKwredef = null
502 readable var _n_visibility
: AVisibility
503 readable var _n_kwvar
: TKwvar
504 readable var _n_id
: nullable TAttrid
505 readable var _n_id2
: nullable TId
506 readable var _n_type
: nullable AType = null
507 readable var _n_readable
: nullable AAble = null
508 readable var _n_writable
: nullable AAble = null
509 readable var _n_expr
: nullable AExpr = null
510 redef fun hot_location
512 if n_id
!= null then return n_id
.location
else return n_id2
.location
515 abstract class AMethPropdef
517 readable var _n_kwredef
: nullable TKwredef = null
518 readable var _n_visibility
: nullable AVisibility
519 readable var _n_methid
: nullable AMethid = null
520 readable var _n_signature
: nullable ASignature
521 redef fun hot_location
523 if n_methid
!= null then
524 return n_methid
.location
530 class ADeferredMethPropdef
532 readable var _n_kwmeth
: TKwmeth
534 class AInternMethPropdef
536 readable var _n_kwmeth
: TKwmeth
538 abstract class AExternPropdef
540 readable var _n_extern
: nullable TString = null
541 readable var _n_extern_calls
: nullable AExternCalls = null
542 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
544 class AExternMethPropdef
547 readable var _n_kwmeth
: TKwmeth
549 class AConcreteMethPropdef
551 readable var _n_kwmeth
: nullable TKwmeth
552 readable var _n_block
: nullable AExpr = null
554 abstract class AInitPropdef
557 class AConcreteInitPropdef
558 super AConcreteMethPropdef
560 readable var _n_kwinit
: TKwinit
561 redef fun hot_location
do return n_kwinit
.location
563 class AExternInitPropdef
566 readable var _n_kwnew
: TKwnew
568 class AMainMethPropdef
569 super AConcreteMethPropdef
573 readable var _n_kwimport
: TKwimport
574 readable var _n_extern_calls
: List[AExternCall] = new List[AExternCall]
576 abstract class AExternCall
579 abstract class APropExternCall
582 class ALocalPropExternCall
583 super APropExternCall
584 readable var _n_methid
: AMethid
586 class AFullPropExternCall
587 super APropExternCall
588 readable var _n_classid
: TClassid
589 readable var _n_quad
: nullable TQuad = null
590 readable var _n_methid
: AMethid
592 class AInitPropExternCall
593 super APropExternCall
594 readable var _n_classid
: TClassid
596 class ASuperExternCall
598 readable var _n_kwsuper
: TKwsuper
600 abstract class ACastExternCall
603 class ACastAsExternCall
604 super ACastExternCall
605 readable var _n_from_type
: AType
606 readable var _n_kwas
: TKwas
607 readable var _n_to_type
: AType
609 class AAsNullableExternCall
610 super ACastExternCall
611 readable var _n_type
: AType
612 readable var _n_kwas
: TKwas
613 readable var _n_kwnullable
: TKwnullable
615 class AAsNotNullableExternCall
616 super ACastExternCall
617 readable var _n_type
: AType
618 readable var _n_kwas
: TKwas
619 readable var _n_kwnot
: TKwnot
620 readable var _n_kwnullable
: TKwnullable
624 readable var _n_kwredef
: nullable TKwredef = null
625 readable var _n_visibility
: AVisibility
626 readable var _n_kwtype
: TKwtype
627 readable var _n_id
: TClassid
628 readable var _n_type
: AType
630 abstract class AAble super Prod
631 readable var _n_visibility
: nullable AVisibility = null
632 readable var _n_kwredef
: nullable TKwredef = null
636 readable var _n_kwreadable
: TKwreadable
640 readable var _n_kwwritable
: TKwwritable
642 abstract class AMethid super Prod end
645 readable var _n_id
: TId
649 readable var _n_plus
: TPlus
653 readable var _n_minus
: TMinus
657 readable var _n_star
: TStar
661 readable var _n_slash
: TSlash
665 readable var _n_percent
: TPercent
669 readable var _n_eq
: TEq
673 readable var _n_ne
: TNe
677 readable var _n_le
: TLe
681 readable var _n_ge
: TGe
685 readable var _n_lt
: TLt
689 readable var _n_gt
: TGt
693 readable writable var _n_ll
: TLl
697 readable writable var _n_gg
: TGg
701 readable var _n_obra
: TObra
702 readable var _n_cbra
: TCbra
704 class AStarshipMethid
706 readable var _n_starship
: TStarship
710 readable var _n_id
: TId
711 readable var _n_assign
: TAssign
713 class ABraassignMethid
715 readable var _n_obra
: TObra
716 readable var _n_cbra
: TCbra
717 readable var _n_assign
: TAssign
721 readable var _n_opar
: nullable TOpar = null
722 readable var _n_params
: List[AParam] = new List[AParam]
723 readable var _n_cpar
: nullable TCpar = null
724 readable var _n_type
: nullable AType = null
725 readable var _n_closure_decls
: List[AClosureDecl] = new List[AClosureDecl]
729 readable var _n_id
: TId
730 readable var _n_type
: nullable AType = null
731 readable var _n_dotdotdot
: nullable TDotdotdot = null
735 readable var _n_kwbreak
: nullable TKwbreak = null
736 readable var _n_bang
: TBang
737 readable var _n_id
: TId
738 readable var _n_signature
: ASignature
739 readable var _n_expr
: nullable AExpr = null
743 readable var _n_kwnullable
: nullable TKwnullable = null
744 readable var _n_id
: TClassid
745 readable var _n_types
: List[AType] = new List[AType]
749 readable var _n_kwlabel
: TKwlabel
750 readable var _n_id
: TId
752 abstract class AExpr super Prod end
755 readable var _n_expr
: List[AExpr] = new List[AExpr]
756 readable var _n_kwend
: nullable TKwend = null
760 readable var _n_kwvar
: TKwvar
761 readable var _n_id
: TId
762 readable var _n_type
: nullable AType = null
763 readable var _n_assign
: nullable TAssign = null
764 readable var _n_expr
: nullable AExpr = null
768 readable var _n_kwreturn
: nullable TKwreturn = null
769 readable var _n_expr
: nullable AExpr = null
771 abstract class ALabelable
773 readable var _n_label
: nullable ALabel = null
778 readable var _n_kwbreak
: TKwbreak
779 readable var _n_expr
: nullable AExpr = null
783 readable var _n_kwabort
: TKwabort
788 readable var _n_kwcontinue
: nullable TKwcontinue = null
789 readable var _n_expr
: nullable AExpr = null
794 readable var _n_kwdo
: TKwdo
795 readable var _n_block
: nullable AExpr = null
799 readable var _n_kwif
: TKwif
800 readable var _n_expr
: AExpr
801 readable var _n_then
: nullable AExpr = null
802 readable var _n_else
: nullable AExpr = null
806 readable var _n_kwif
: TKwif
807 readable var _n_expr
: AExpr
808 readable var _n_kwthen
: TKwthen
809 readable var _n_then
: AExpr
810 readable var _n_kwelse
: TKwelse
811 readable var _n_else
: AExpr
816 readable var _n_kwwhile
: TKwwhile
817 readable var _n_expr
: AExpr
818 readable var _n_kwdo
: TKwdo
819 readable var _n_block
: nullable AExpr = null
824 readable var _n_kwloop
: TKwloop
825 readable var _n_block
: nullable AExpr = null
830 readable var _n_kwfor
: TKwfor
831 readable var _n_ids
: List[TId] = new List[TId]
832 readable var _n_expr
: AExpr
833 readable var _n_kwdo
: TKwdo
834 readable var _n_block
: nullable AExpr = null
838 readable var _n_kwassert
: TKwassert
839 readable var _n_id
: nullable TId = null
840 readable var _n_expr
: AExpr
841 readable var _n_else
: nullable AExpr = null
843 abstract class AAssignFormExpr
845 readable var _n_assign
: TAssign
846 readable var _n_value
: AExpr
848 abstract class AReassignFormExpr
850 readable var _n_assign_op
: AAssignOp
851 readable var _n_value
: AExpr
855 readable var _n_kwonce
: TKwonce
857 abstract class ASendExpr
859 readable var _n_expr
: AExpr
860 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
862 abstract class ABinopExpr
864 readable var _n_expr2
: AExpr
866 abstract class ABoolExpr
871 readable var _n_expr
: AExpr
872 readable var _n_expr2
: AExpr
876 readable var _n_expr
: AExpr
877 readable var _n_expr2
: AExpr
881 readable var _n_expr
: AExpr
882 readable var _n_expr2
: AExpr
886 readable var _n_kwnot
: TKwnot
887 readable var _n_expr
: AExpr
894 readable var _n_expr
: AExpr
895 readable var _n_expr2
: AExpr
920 readable var _n_expr
: AExpr
921 readable var _n_type
: AType
943 readable var _n_minus
: TMinus
947 readable var _n_kwnew
: TKwnew
948 readable var _n_type
: AType
949 readable var _n_id
: nullable TId = null
950 readable var _n_args
: AExprs
952 abstract class AAttrFormExpr
954 readable var _n_expr
: AExpr
955 readable var _n_id
: TAttrid
960 class AAttrAssignExpr
962 super AAssignFormExpr
964 abstract class ACallFormExpr
966 readable var _n_id
: TId
967 readable var _n_args
: AExprs
969 abstract class ASendReassignFormExpr
971 super AReassignFormExpr
973 class AAttrReassignExpr
976 super AReassignFormExpr
981 class ACallAssignExpr
983 super AAssignFormExpr
985 class ACallReassignExpr
988 super ASendReassignFormExpr
992 readable var _n_qualified
: nullable AQualified = null
993 readable var _n_kwsuper
: TKwsuper
994 readable var _n_args
: AExprs
998 readable var _n_kwinit
: TKwinit
999 readable var _n_args
: AExprs
1001 abstract class ABraFormExpr
1003 readable var _n_args
: AExprs
1008 class ABraAssignExpr
1010 super AAssignFormExpr
1012 abstract class AVarFormExpr
1014 readable var _n_id
: TId
1016 class ABraReassignExpr
1018 super ASendReassignFormExpr
1020 class AClosureCallExpr
1022 readable var _n_id
: TId
1023 readable var _n_args
: AExprs
1024 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
1029 class AVarAssignExpr
1031 super AAssignFormExpr
1033 class AVarReassignExpr
1035 super AReassignFormExpr
1037 abstract class ARangeExpr
1039 readable var _n_expr
: AExpr
1040 readable var _n_expr2
: AExpr
1044 readable var _n_obra
: TObra
1045 readable var _n_cbra
: TCbra
1049 readable var _n_obra
: TObra
1050 readable var _n_cbra
: TObra
1054 readable var _n_exprs
: AExprs
1058 readable var _n_kwself
: nullable TKwself
1060 class AImplicitSelfExpr
1065 readable var _n_kwtrue
: TKwtrue
1069 readable var _n_kwfalse
: TKwfalse
1073 readable var _n_kwnull
: TKwnull
1077 readable var _n_number
: TNumber
1081 readable var _n_float
: TFloat
1085 readable var _n_char
: TChar
1087 abstract class AStringFormExpr
1089 readable var _n_string
: Token
1092 super AStringFormExpr
1094 class AStartStringExpr
1095 super AStringFormExpr
1097 class AMidStringExpr
1098 super AStringFormExpr
1100 class AEndStringExpr
1101 super AStringFormExpr
1103 class ASuperstringExpr
1105 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1109 readable var _n_opar
: TOpar
1110 readable var _n_cpar
: TCpar
1112 abstract class AProxyExpr
1114 readable var _n_expr
: AExpr
1118 readable var _n_expr
: AExpr
1119 readable var _n_kwas
: TKwas
1120 readable var _n_opar
: TOpar
1121 readable var _n_type
: AType
1122 readable var _n_cpar
: TCpar
1124 class AAsNotnullExpr
1126 readable var _n_expr
: AExpr
1127 readable var _n_kwas
: TKwas
1128 readable var _n_opar
: TOpar
1129 readable var _n_kwnot
: TKwnot
1130 readable var _n_kwnull
: TKwnull
1131 readable var _n_cpar
: TCpar
1133 class AIssetAttrExpr
1135 readable var _n_kwisset
: TKwisset
1137 abstract class AExprs
1139 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1141 class ADebugTypeExpr
1143 readable var _n_kwdebug
: TKwdebug
1144 readable var _n_kwtype
: TKwtype
1145 readable var _n_expr
: AExpr
1146 readable var _n_type
: AType
1153 readable var _n_opar
: TOpar
1154 readable var _n_cpar
: TCpar
1158 readable var _n_obra
: TObra
1159 readable var _n_cbra
: TCbra
1161 abstract class AAssignOp super Prod end
1164 readable var _n_pluseq
: TPluseq
1166 class AMinusAssignOp
1168 readable var _n_minuseq
: TMinuseq
1172 readable var _n_bang
: TBang
1173 readable var _n_id
: AClosureId
1174 readable var _n_ids
: List[TId] = new List[TId]
1175 readable var _n_kwdo
: nullable TKwdo = null
1176 readable var _n_expr
: nullable AExpr = null
1177 redef fun hot_location
do return n_id
.location
1179 abstract class AClosureId
1182 class ASimpleClosureId
1184 readable var _n_id
: TId
1186 class ABreakClosureId
1188 readable var _n_kwbreak
: TKwbreak
1192 readable var _n_quad
: nullable TQuad = null
1193 readable var _n_path
: List[TId] = new List[TId]
1194 readable var _n_id
: TId
1198 readable var _n_kwin
: TKwin
1199 readable var _n_string
: TString
1201 class AExternCodeBlock
1203 readable var _n_in_language
: nullable AInLanguage = null
1204 readable var _n_extern_code_segment
: TExternCodeSegment
1208 readable var _n_quad
: nullable TQuad = null
1209 readable var _n_id
: List[TId] = new List[TId]
1210 readable var _n_classid
: nullable TClassid = null
1214 readable var _n_comment
: List[TComment] = new List[TComment]
1219 readable var _n_at
: nullable TAt = null
1220 readable var _n_opar
: nullable TOpar = null
1221 readable var _n_items
: List[AAnnotation] = new List[AAnnotation]
1222 readable var _n_cpar
: nullable TCpar = null
1226 readable var _n_atid
: AAtid
1227 readable var _n_opar
: nullable TOpar = null
1228 readable var _n_args
: List[AAtArg] = new List[AAtArg]
1229 readable var _n_cpar
: nullable TCpar = null
1231 abstract class AAtArg
1236 readable var _n_type
: AType
1240 readable var _n_expr
: AExpr
1245 abstract class AAtid
1247 readable var _n_id
: Token
1258 class AKwreadableAtid
1261 class AKwwritableAtid
1270 readable var _n_base
: nullable AModule
1271 readable var _n_eof
: EOF
1272 init(n_base
: nullable AModule, n_eof
: EOF)
1274 self._n_base
= n_base