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
46 redef fun to_s
: String do
51 # Ancestor of all productions
54 fun location
=(l
: Location) do _location
= l
55 readable var _n_annotations
: nullable AAnnotations = null
67 abstract class TokenKeyword
71 return "keyword '{text}'"
245 abstract class TokenOperator
249 return "operator '{text}'"
319 do return "type identifier '{text}'"
326 do return "identifier '{text}'"
333 do return "attribute '{text}'"
336 abstract class TokenLiteral
340 do return "literal value '{text}'"
368 do return "malformed string {text}"
375 do return "malformed character {text}"
378 class TExternCodeSegment
383 private init noinit
do end
391 private init noinit
do end
396 readable var _n_moduledecl
: nullable AModuledecl = null
397 readable var _n_imports
: List[AImport] = new List[AImport]
398 readable var _n_extern_code_blocks
: List[AExternCodeBlock] = new List[AExternCodeBlock]
399 readable var _n_classdefs
: List[AClassdef] = new List[AClassdef]
403 readable var _n_doc
: nullable ADoc = null
404 readable var _n_kwmodule
: TKwmodule
405 readable var _n_name
: AModuleName
407 abstract class AImport super Prod end
410 readable var _n_visibility
: AVisibility
411 readable var _n_kwimport
: TKwimport
412 readable var _n_name
: AModuleName
416 readable var _n_visibility
: AVisibility
417 readable var _n_kwimport
: TKwimport
418 readable var _n_kwend
: TKwend
420 abstract class AVisibility super Prod end
421 class APublicVisibility
424 class APrivateVisibility
426 readable var _n_kwprivate
: TKwprivate
428 class AProtectedVisibility
430 readable var _n_kwprotected
: TKwprotected
432 class AIntrudeVisibility
434 readable var _n_kwintrude
: TKwintrude
436 abstract class AClassdef super Prod
437 readable var _n_propdefs
: List[APropdef] = new List[APropdef]
441 readable var _n_doc
: nullable ADoc = null
442 readable var _n_kwredef
: nullable TKwredef = null
443 readable var _n_visibility
: AVisibility
444 readable var _n_classkind
: AClasskind
445 readable var _n_id
: nullable TClassid = null
446 readable var _n_formaldefs
: List[AFormaldef] = new List[AFormaldef]
447 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
448 readable var _n_superclasses
: List[ASuperclass] = new List[ASuperclass]
449 readable var _n_kwend
: TKwend
450 redef fun hot_location
do return n_id
.location
458 abstract class AClasskind super Prod end
459 class AConcreteClasskind
461 readable var _n_kwclass
: TKwclass
463 class AAbstractClasskind
465 readable var _n_kwabstract
: TKwabstract
466 readable var _n_kwclass
: TKwclass
468 class AInterfaceClasskind
470 readable var _n_kwinterface
: TKwinterface
474 readable var _n_kwenum
: TKwenum
476 class AExternClasskind
478 readable var _n_kwextern
: TKwextern
479 readable var _n_kwclass
: nullable TKwclass = null
483 readable var _n_id
: TClassid
484 readable var _n_type
: nullable AType = null
488 readable var _n_kwsuper
: TKwsuper
489 readable var _n_type
: AType
491 abstract class APropdef super Prod
492 readable var _n_doc
: nullable ADoc = null
496 readable var _n_kwredef
: nullable TKwredef = null
497 readable var _n_visibility
: AVisibility
498 readable var _n_kwvar
: TKwvar
499 readable var _n_id
: nullable TAttrid
500 readable var _n_id2
: nullable TId
501 readable var _n_type
: nullable AType = null
502 readable var _n_readable
: nullable AAble = null
503 readable var _n_writable
: nullable AAble = null
504 readable var _n_expr
: nullable AExpr = null
505 redef fun hot_location
507 if n_id
!= null then return n_id
.location
else return n_id2
.location
510 abstract class AMethPropdef
512 readable var _n_kwredef
: nullable TKwredef = null
513 readable var _n_visibility
: nullable AVisibility
514 readable var _n_methid
: nullable AMethid = null
515 readable var _n_signature
: nullable ASignature
516 redef fun hot_location
518 if n_methid
!= null then
519 return n_methid
.location
525 class ADeferredMethPropdef
527 readable var _n_kwmeth
: TKwmeth
529 class AInternMethPropdef
531 readable var _n_kwmeth
: TKwmeth
533 abstract class AExternPropdef
535 readable var _n_extern
: nullable TString = null
536 readable var _n_extern_calls
: nullable AExternCalls = null
537 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
539 class AExternMethPropdef
542 readable var _n_kwmeth
: TKwmeth
544 class AConcreteMethPropdef
546 readable var _n_kwmeth
: nullable TKwmeth
547 readable var _n_block
: nullable AExpr = null
549 abstract class AInitPropdef
552 class AConcreteInitPropdef
553 super AConcreteMethPropdef
555 readable var _n_kwinit
: TKwinit
556 redef fun hot_location
do return n_kwinit
.location
558 class AExternInitPropdef
561 readable var _n_kwnew
: TKwnew
563 class AMainMethPropdef
564 super AConcreteMethPropdef
568 readable var _n_kwimport
: TKwimport
569 readable var _n_extern_calls
: List[AExternCall] = new List[AExternCall]
571 abstract class AExternCall
574 abstract class APropExternCall
577 class ALocalPropExternCall
578 super APropExternCall
579 readable var _n_methid
: AMethid
581 class AFullPropExternCall
582 super APropExternCall
583 readable var _n_classid
: TClassid
584 readable var _n_quad
: nullable TQuad = null
585 readable var _n_methid
: AMethid
587 class AInitPropExternCall
588 super APropExternCall
589 readable var _n_classid
: TClassid
591 class ASuperExternCall
593 readable var _n_kwsuper
: TKwsuper
595 abstract class ACastExternCall
598 class ACastAsExternCall
599 super ACastExternCall
600 readable var _n_from_type
: AType
601 readable var _n_kwas
: TKwas
602 readable var _n_to_type
: AType
604 class AAsNullableExternCall
605 super ACastExternCall
606 readable var _n_type
: AType
607 readable var _n_kwas
: TKwas
608 readable var _n_kwnullable
: TKwnullable
610 class AAsNotNullableExternCall
611 super ACastExternCall
612 readable var _n_type
: AType
613 readable var _n_kwas
: TKwas
614 readable var _n_kwnot
: TKwnot
615 readable var _n_kwnullable
: TKwnullable
619 readable var _n_kwredef
: nullable TKwredef = null
620 readable var _n_visibility
: AVisibility
621 readable var _n_kwtype
: TKwtype
622 readable var _n_id
: TClassid
623 readable var _n_type
: AType
625 abstract class AAble super Prod
626 readable var _n_visibility
: nullable AVisibility = null
627 readable var _n_kwredef
: nullable TKwredef = null
631 readable var _n_kwreadable
: TKwreadable
635 readable var _n_kwwritable
: TKwwritable
637 abstract class AMethid super Prod end
640 readable var _n_id
: TId
644 readable var _n_plus
: TPlus
648 readable var _n_minus
: TMinus
652 readable var _n_star
: TStar
656 readable var _n_slash
: TSlash
660 readable var _n_percent
: TPercent
664 readable var _n_eq
: TEq
668 readable var _n_ne
: TNe
672 readable var _n_le
: TLe
676 readable var _n_ge
: TGe
680 readable var _n_lt
: TLt
684 readable var _n_gt
: TGt
688 readable writable var _n_ll
: TLl
692 readable writable var _n_gg
: TGg
696 readable var _n_obra
: TObra
697 readable var _n_cbra
: TCbra
699 class AStarshipMethid
701 readable var _n_starship
: TStarship
705 readable var _n_id
: TId
706 readable var _n_assign
: TAssign
708 class ABraassignMethid
710 readable var _n_obra
: TObra
711 readable var _n_cbra
: TCbra
712 readable var _n_assign
: TAssign
716 readable var _n_opar
: nullable TOpar = null
717 readable var _n_params
: List[AParam] = new List[AParam]
718 readable var _n_cpar
: nullable TCpar = null
719 readable var _n_type
: nullable AType = null
720 readable var _n_closure_decls
: List[AClosureDecl] = new List[AClosureDecl]
724 readable var _n_id
: TId
725 readable var _n_type
: nullable AType = null
726 readable var _n_dotdotdot
: nullable TDotdotdot = null
730 readable var _n_kwbreak
: nullable TKwbreak = null
731 readable var _n_bang
: TBang
732 readable var _n_id
: TId
733 readable var _n_signature
: ASignature
734 readable var _n_expr
: nullable AExpr = null
738 readable var _n_kwnullable
: nullable TKwnullable = null
739 readable var _n_id
: TClassid
740 readable var _n_types
: List[AType] = new List[AType]
744 readable var _n_kwlabel
: TKwlabel
745 readable var _n_id
: TId
747 abstract class AExpr super Prod end
750 readable var _n_expr
: List[AExpr] = new List[AExpr]
751 readable var _n_kwend
: nullable TKwend = null
755 readable var _n_kwvar
: TKwvar
756 readable var _n_id
: TId
757 readable var _n_type
: nullable AType = null
758 readable var _n_assign
: nullable TAssign = null
759 readable var _n_expr
: nullable AExpr = null
763 readable var _n_kwreturn
: nullable TKwreturn = null
764 readable var _n_expr
: nullable AExpr = null
766 abstract class ALabelable
768 readable var _n_label
: nullable ALabel = null
773 readable var _n_kwbreak
: TKwbreak
774 readable var _n_expr
: nullable AExpr = null
778 readable var _n_kwabort
: TKwabort
783 readable var _n_kwcontinue
: nullable TKwcontinue = null
784 readable var _n_expr
: nullable AExpr = null
789 readable var _n_kwdo
: TKwdo
790 readable var _n_block
: nullable AExpr = null
794 readable var _n_kwif
: TKwif
795 readable var _n_expr
: AExpr
796 readable var _n_then
: nullable AExpr = null
797 readable var _n_else
: nullable AExpr = null
801 readable var _n_kwif
: TKwif
802 readable var _n_expr
: AExpr
803 readable var _n_kwthen
: TKwthen
804 readable var _n_then
: AExpr
805 readable var _n_kwelse
: TKwelse
806 readable var _n_else
: AExpr
811 readable var _n_kwwhile
: TKwwhile
812 readable var _n_expr
: AExpr
813 readable var _n_kwdo
: TKwdo
814 readable var _n_block
: nullable AExpr = null
819 readable var _n_kwloop
: TKwloop
820 readable var _n_block
: nullable AExpr = null
825 readable var _n_kwfor
: TKwfor
826 readable var _n_ids
: List[TId] = new List[TId]
827 readable var _n_expr
: AExpr
828 readable var _n_kwdo
: TKwdo
829 readable var _n_block
: nullable AExpr = null
833 readable var _n_kwassert
: TKwassert
834 readable var _n_id
: nullable TId = null
835 readable var _n_expr
: AExpr
836 readable var _n_else
: nullable AExpr = null
838 abstract class AAssignFormExpr
840 readable var _n_assign
: TAssign
841 readable var _n_value
: AExpr
843 abstract class AReassignFormExpr
845 readable var _n_assign_op
: AAssignOp
846 readable var _n_value
: AExpr
850 readable var _n_kwonce
: TKwonce
852 abstract class ASendExpr
854 readable var _n_expr
: AExpr
855 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
857 abstract class ABinopExpr
859 readable var _n_expr2
: AExpr
861 abstract class ABoolExpr
866 readable var _n_expr
: AExpr
867 readable var _n_expr2
: AExpr
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_kwnot
: TKwnot
882 readable var _n_expr
: AExpr
889 readable var _n_expr
: AExpr
890 readable var _n_expr2
: AExpr
915 readable var _n_expr
: AExpr
916 readable var _n_type
: AType
938 readable var _n_minus
: TMinus
942 readable var _n_kwnew
: TKwnew
943 readable var _n_type
: AType
944 readable var _n_id
: nullable TId = null
945 readable var _n_args
: AExprs
947 abstract class AAttrFormExpr
949 readable var _n_expr
: AExpr
950 readable var _n_id
: TAttrid
955 class AAttrAssignExpr
957 super AAssignFormExpr
959 abstract class ACallFormExpr
961 readable var _n_id
: TId
962 readable var _n_args
: AExprs
964 abstract class ASendReassignFormExpr
966 super AReassignFormExpr
968 class AAttrReassignExpr
971 super AReassignFormExpr
976 class ACallAssignExpr
978 super AAssignFormExpr
980 class ACallReassignExpr
983 super ASendReassignFormExpr
987 readable var _n_qualified
: nullable AQualified = null
988 readable var _n_kwsuper
: TKwsuper
989 readable var _n_args
: AExprs
993 readable var _n_kwinit
: TKwinit
994 readable var _n_args
: AExprs
996 abstract class ABraFormExpr
998 readable var _n_args
: AExprs
1003 class ABraAssignExpr
1005 super AAssignFormExpr
1007 abstract class AVarFormExpr
1009 readable var _n_id
: TId
1011 class ABraReassignExpr
1013 super ASendReassignFormExpr
1015 class AClosureCallExpr
1017 readable var _n_id
: TId
1018 readable var _n_args
: AExprs
1019 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
1024 class AVarAssignExpr
1026 super AAssignFormExpr
1028 class AVarReassignExpr
1030 super AReassignFormExpr
1032 abstract class ARangeExpr
1034 readable var _n_expr
: AExpr
1035 readable var _n_expr2
: AExpr
1039 readable var _n_obra
: TObra
1040 readable var _n_cbra
: TCbra
1044 readable var _n_obra
: TObra
1045 readable var _n_cbra
: TObra
1049 readable var _n_exprs
: AExprs
1053 readable var _n_kwself
: nullable TKwself
1055 class AImplicitSelfExpr
1060 readable var _n_kwtrue
: TKwtrue
1064 readable var _n_kwfalse
: TKwfalse
1068 readable var _n_kwnull
: TKwnull
1072 readable var _n_number
: TNumber
1076 readable var _n_float
: TFloat
1080 readable var _n_char
: TChar
1082 abstract class AStringFormExpr
1086 super AStringFormExpr
1087 readable var _n_string
: TString
1089 class AStartStringExpr
1090 super AStringFormExpr
1091 readable var _n_string
: TStartString
1093 class AMidStringExpr
1094 super AStringFormExpr
1095 readable var _n_string
: TMidString
1097 class AEndStringExpr
1098 super AStringFormExpr
1099 readable var _n_string
: TEndString
1101 class ASuperstringExpr
1103 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1107 readable var _n_opar
: TOpar
1108 readable var _n_cpar
: TCpar
1110 abstract class AProxyExpr
1112 readable var _n_expr
: AExpr
1116 readable var _n_expr
: AExpr
1117 readable var _n_kwas
: TKwas
1118 readable var _n_opar
: TOpar
1119 readable var _n_type
: AType
1120 readable var _n_cpar
: TCpar
1122 class AAsNotnullExpr
1124 readable var _n_expr
: AExpr
1125 readable var _n_kwas
: TKwas
1126 readable var _n_opar
: TOpar
1127 readable var _n_kwnot
: TKwnot
1128 readable var _n_kwnull
: TKwnull
1129 readable var _n_cpar
: TCpar
1131 class AIssetAttrExpr
1133 readable var _n_kwisset
: TKwisset
1135 abstract class AExprs
1137 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1139 class ADebugTypeExpr
1141 readable var _n_kwdebug
: TKwdebug
1142 readable var _n_kwtype
: TKwtype
1143 readable var _n_expr
: AExpr
1144 readable var _n_type
: AType
1151 readable var _n_opar
: TOpar
1152 readable var _n_cpar
: TCpar
1156 readable var _n_obra
: TObra
1157 readable var _n_cbra
: TCbra
1159 abstract class AAssignOp super Prod end
1162 readable var _n_pluseq
: TPluseq
1164 class AMinusAssignOp
1166 readable var _n_minuseq
: TMinuseq
1170 readable var _n_bang
: TBang
1171 readable var _n_id
: AClosureId
1172 readable var _n_ids
: List[TId] = new List[TId]
1173 readable var _n_kwdo
: nullable TKwdo = null
1174 readable var _n_expr
: nullable AExpr = null
1175 redef fun hot_location
do return n_id
.location
1177 abstract class AClosureId
1180 class ASimpleClosureId
1182 readable var _n_id
: TId
1184 class ABreakClosureId
1186 readable var _n_kwbreak
: TKwbreak
1190 readable var _n_quad
: nullable TQuad = null
1191 readable var _n_path
: List[TId] = new List[TId]
1192 readable var _n_id
: TId
1196 readable var _n_kwin
: TKwin
1197 readable var _n_string
: TString
1199 class AExternCodeBlock
1201 readable var _n_in_language
: nullable AInLanguage = null
1202 readable var _n_extern_code_segment
: TExternCodeSegment
1206 readable var _n_quad
: nullable TQuad = null
1207 readable var _n_id
: List[TId] = new List[TId]
1208 readable var _n_classid
: nullable TClassid = null
1212 readable var _n_comment
: List[TComment] = new List[TComment]
1217 readable var _n_at
: nullable TAt = null
1218 readable var _n_opar
: nullable TOpar = null
1219 readable var _n_items
: List[AAnnotation] = new List[AAnnotation]
1220 readable var _n_cpar
: nullable TCpar = null
1224 readable var _n_atid
: AAtid
1225 readable var _n_opar
: nullable TOpar = null
1226 readable var _n_args
: List[AAtArg] = new List[AAtArg]
1227 readable var _n_cpar
: nullable TCpar = null
1229 abstract class AAtArg
1234 readable var _n_type
: AType
1238 readable var _n_expr
: AExpr
1243 abstract class AAtid
1245 readable var _n_id
: Token
1256 class AKwreadableAtid
1259 class AKwwritableAtid
1268 readable var _n_base
: nullable AModule
1269 readable var _n_eof
: EOF
1270 init(n_base
: nullable AModule, n_eof
: EOF)
1272 self._n_base
= n_base