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")}"
40 # Parent of the node in the AST
41 readable writable var _parent
: nullable ANode
43 # Remove a child from the AST
44 fun remove_child
(child
: ANode)
46 replace_child
(child
, null)
49 # Replace a child with an other node in the AST
50 fun replace_child
(old_child
: ANode, new_child
: nullable ANode) is abstract
52 # Replace itself with an other node in the AST
53 fun replace_with
(node
: ANode)
55 if _parent
!= null then
56 _parent
.replace_child
(self, node
)
60 # Visit all nodes in order.
61 # Thus, call "v.visit(e)" for each node e
62 fun visit_all
(v
: Visitor) is abstract
65 # Ancestor of all tokens
68 fun text
: String is abstract
69 fun text
=(text
: String) is abstract
71 redef fun to_s
: String do
75 redef fun visit_all
(v
: Visitor) do end
76 redef fun replace_child
(old_child
: ANode, new_child
: nullable ANode) do end
79 # Ancestor of all productions
82 fun location
=(l
: Location) do _location
= l
83 readable var _n_annotations
: nullable AAnnotations = null
85 redef fun replace_with
(n
: ANode)
93 # Abstract standard visitor
94 abstract class Visitor
95 # What the visitor do when a node is visited
96 # Concrete visitors should redefine this method.
97 protected fun visit
(e
: nullable ANode) is abstract
99 # Ask the visitor to visit a given node.
100 # Usually automatically called by visit_all* methods.
101 # This methos should not be redefined
102 fun enter_visit
(e
: nullable ANode)
104 var old
= _current_node
110 # The current visited node
111 readable var _current_node
: nullable ANode = null
124 abstract class TokenKeyword
128 return "keyword '{text}'"
302 abstract class TokenOperator
306 return "operator '{text}'"
376 do return "type identifier '{text}'"
383 do return "identifier '{text}'"
390 do return "attribute '{text}'"
393 abstract class TokenLiteral
397 do return "literal value '{text}'"
425 do return "malformed string {text}"
432 do return "malformed character {text}"
435 class TExternCodeSegment
457 readable var _n_moduledecl
: nullable AModuledecl = null
458 readable var _n_imports
: List[AImport] = new List[AImport]
459 readable var _n_extern_code_blocks
: List[AExternCodeBlock] = new List[AExternCodeBlock]
460 readable var _n_classdefs
: List[AClassdef] = new List[AClassdef]
464 readable var _n_doc
: nullable ADoc = null
465 readable var _n_kwmodule
: TKwmodule
466 readable var _n_name
: AModuleName
468 abstract class AImport super Prod end
471 readable var _n_visibility
: AVisibility
472 readable var _n_kwimport
: TKwimport
473 readable var _n_name
: AModuleName
477 readable var _n_visibility
: AVisibility
478 readable var _n_kwimport
: TKwimport
479 readable var _n_kwend
: TKwend
481 abstract class AVisibility super Prod end
482 class APublicVisibility
485 class APrivateVisibility
487 readable var _n_kwprivate
: TKwprivate
489 class AProtectedVisibility
491 readable var _n_kwprotected
: TKwprotected
493 class AIntrudeVisibility
495 readable var _n_kwintrude
: TKwintrude
497 abstract class AClassdef super Prod
498 readable var _n_propdefs
: List[APropdef] = new List[APropdef]
502 readable var _n_doc
: nullable ADoc = null
503 readable var _n_kwredef
: nullable TKwredef = null
504 readable var _n_visibility
: AVisibility
505 readable var _n_classkind
: AClasskind
506 readable var _n_id
: nullable TClassid = null
507 readable var _n_formaldefs
: List[AFormaldef] = new List[AFormaldef]
508 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
509 readable var _n_superclasses
: List[ASuperclass] = new List[ASuperclass]
510 readable var _n_kwend
: TKwend
511 redef fun hot_location
do return n_id
.location
519 abstract class AClasskind super Prod end
520 class AConcreteClasskind
522 readable var _n_kwclass
: TKwclass
524 class AAbstractClasskind
526 readable var _n_kwabstract
: TKwabstract
527 readable var _n_kwclass
: TKwclass
529 class AInterfaceClasskind
531 readable var _n_kwinterface
: TKwinterface
535 readable var _n_kwenum
: TKwenum
537 class AExternClasskind
539 readable var _n_kwextern
: TKwextern
540 readable var _n_kwclass
: nullable TKwclass = null
544 readable var _n_id
: TClassid
545 readable var _n_type
: nullable AType = null
549 readable var _n_kwsuper
: TKwsuper
550 readable var _n_type
: AType
552 abstract class APropdef super Prod
553 readable var _n_doc
: nullable ADoc = null
557 readable var _n_kwredef
: nullable TKwredef = null
558 readable var _n_visibility
: AVisibility
559 readable var _n_kwvar
: TKwvar
560 readable var _n_id
: nullable TAttrid
561 readable var _n_id2
: nullable TId
562 readable var _n_type
: nullable AType = null
563 readable var _n_readable
: nullable AAble = null
564 readable var _n_writable
: nullable AAble = null
565 readable var _n_expr
: nullable AExpr = null
566 redef fun hot_location
568 if n_id
!= null then return n_id
.location
else return n_id2
.location
571 abstract class AMethPropdef
573 readable var _n_kwredef
: nullable TKwredef = null
574 readable var _n_visibility
: nullable AVisibility
575 readable var _n_methid
: nullable AMethid = null
576 readable var _n_signature
: nullable ASignature
577 redef fun hot_location
579 if n_methid
!= null then
580 return n_methid
.location
586 class ADeferredMethPropdef
588 readable var _n_kwmeth
: TKwmeth
590 class AInternMethPropdef
592 readable var _n_kwmeth
: TKwmeth
594 abstract class AExternPropdef
596 readable var _n_extern
: nullable TString = null
597 readable var _n_extern_calls
: nullable AExternCalls = null
598 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
600 class AExternMethPropdef
602 readable var _n_kwmeth
: TKwmeth
604 class AConcreteMethPropdef
606 readable var _n_kwmeth
: nullable TKwmeth
607 readable var _n_block
: nullable AExpr = null
609 abstract class AInitPropdef
612 class AConcreteInitPropdef
613 super AConcreteMethPropdef
615 readable var _n_kwinit
: TKwinit
616 redef fun hot_location
do return n_kwinit
.location
618 class AExternInitPropdef
621 readable var _n_kwnew
: TKwnew
623 class AMainMethPropdef
624 super AConcreteMethPropdef
628 readable var _n_kwimport
: TKwimport
629 readable var _n_extern_calls
: List[AExternCall] = new List[AExternCall]
631 abstract class AExternCall
634 abstract class APropExternCall
637 class ALocalPropExternCall
638 super APropExternCall
639 readable var _n_methid
: AMethid
641 class AFullPropExternCall
642 super APropExternCall
643 readable var _n_classid
: TClassid
644 readable var _n_quad
: nullable TQuad = null
645 readable var _n_methid
: AMethid
647 class AInitPropExternCall
648 super APropExternCall
649 readable var _n_classid
: TClassid
651 class ASuperExternCall
653 readable var _n_kwsuper
: TKwsuper
655 abstract class ACastExternCall
658 class ACastAsExternCall
659 super ACastExternCall
660 readable var _n_from_type
: AType
661 readable var _n_kwas
: TKwas
662 readable var _n_to_type
: AType
664 class AAsNullableExternCall
665 super ACastExternCall
666 readable var _n_type
: AType
667 readable var _n_kwas
: TKwas
668 readable var _n_kwnullable
: TKwnullable
670 class AAsNotNullableExternCall
671 super ACastExternCall
672 readable var _n_type
: AType
673 readable var _n_kwas
: TKwas
674 readable var _n_kwnot
: TKwnot
675 readable var _n_kwnullable
: TKwnullable
679 readable var _n_kwredef
: nullable TKwredef = null
680 readable var _n_visibility
: AVisibility
681 readable var _n_kwtype
: TKwtype
682 readable var _n_id
: TClassid
683 readable var _n_type
: AType
685 abstract class AAble super Prod
686 readable var _n_visibility
: nullable AVisibility = null
687 readable var _n_kwredef
: nullable TKwredef = null
691 readable var _n_kwreadable
: TKwreadable
695 readable var _n_kwwritable
: TKwwritable
697 abstract class AMethid super Prod end
700 readable var _n_id
: TId
704 readable var _n_plus
: TPlus
708 readable var _n_minus
: TMinus
712 readable var _n_star
: TStar
716 readable var _n_slash
: TSlash
720 readable var _n_percent
: TPercent
724 readable var _n_eq
: TEq
728 readable var _n_ne
: TNe
732 readable var _n_le
: TLe
736 readable var _n_ge
: TGe
740 readable var _n_lt
: TLt
744 readable var _n_gt
: TGt
748 readable writable var _n_ll
: TLl
752 readable writable var _n_gg
: TGg
756 readable var _n_obra
: TObra
757 readable var _n_cbra
: TCbra
759 class AStarshipMethid
761 readable var _n_starship
: TStarship
765 readable var _n_id
: TId
766 readable var _n_assign
: TAssign
768 class ABraassignMethid
770 readable var _n_obra
: TObra
771 readable var _n_cbra
: TCbra
772 readable var _n_assign
: TAssign
776 readable var _n_opar
: nullable TOpar = null
777 readable var _n_params
: List[AParam] = new List[AParam]
778 readable var _n_cpar
: nullable TCpar = null
779 readable var _n_type
: nullable AType = null
780 readable var _n_closure_decls
: List[AClosureDecl] = new List[AClosureDecl]
784 readable var _n_id
: TId
785 readable var _n_type
: nullable AType = null
786 readable var _n_dotdotdot
: nullable TDotdotdot = null
790 readable var _n_kwbreak
: nullable TKwbreak = null
791 readable var _n_bang
: TBang
792 readable var _n_id
: TId
793 readable var _n_signature
: ASignature
794 readable var _n_expr
: nullable AExpr = null
798 readable var _n_kwnullable
: nullable TKwnullable = null
799 readable var _n_id
: TClassid
800 readable var _n_types
: List[AType] = new List[AType]
804 readable var _n_kwlabel
: TKwlabel
805 readable var _n_id
: TId
807 abstract class AExpr super Prod end
810 readable var _n_expr
: List[AExpr] = new List[AExpr]
811 readable var _n_kwend
: nullable TKwend = null
815 readable var _n_kwvar
: TKwvar
816 readable var _n_id
: TId
817 readable var _n_type
: nullable AType = null
818 readable var _n_assign
: nullable TAssign = null
819 readable var _n_expr
: nullable AExpr = null
823 readable var _n_kwreturn
: nullable TKwreturn = null
824 readable var _n_expr
: nullable AExpr = null
826 abstract class ALabelable
828 readable var _n_label
: nullable ALabel = null
833 readable var _n_kwbreak
: TKwbreak
834 readable var _n_expr
: nullable AExpr = null
838 readable var _n_kwabort
: TKwabort
843 readable var _n_kwcontinue
: nullable TKwcontinue = null
844 readable var _n_expr
: nullable AExpr = null
849 readable var _n_kwdo
: TKwdo
850 readable var _n_block
: nullable AExpr = null
854 readable var _n_kwif
: TKwif
855 readable var _n_expr
: AExpr
856 readable var _n_then
: nullable AExpr = null
857 readable var _n_else
: nullable AExpr = null
861 readable var _n_kwif
: TKwif
862 readable var _n_expr
: AExpr
863 readable var _n_kwthen
: TKwthen
864 readable var _n_then
: AExpr
865 readable var _n_kwelse
: TKwelse
866 readable var _n_else
: AExpr
871 readable var _n_kwwhile
: TKwwhile
872 readable var _n_expr
: AExpr
873 readable var _n_kwdo
: TKwdo
874 readable var _n_block
: nullable AExpr = null
879 readable var _n_kwloop
: TKwloop
880 readable var _n_block
: nullable AExpr = null
885 readable var _n_kwfor
: TKwfor
886 readable var _n_ids
: List[TId] = new List[TId]
887 readable var _n_expr
: AExpr
888 readable var _n_kwdo
: TKwdo
889 readable var _n_block
: nullable AExpr = null
893 readable var _n_kwassert
: TKwassert
894 readable var _n_id
: nullable TId = null
895 readable var _n_expr
: AExpr
896 readable var _n_else
: nullable AExpr = null
898 abstract class AAssignFormExpr
900 readable var _n_assign
: TAssign
901 readable var _n_value
: AExpr
903 abstract class AReassignFormExpr
905 readable var _n_assign_op
: AAssignOp
906 readable var _n_value
: AExpr
910 readable var _n_kwonce
: TKwonce
912 abstract class ASendExpr
914 readable var _n_expr
: AExpr
915 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
917 abstract class ABinopExpr
919 readable var _n_expr2
: AExpr
921 abstract class ABoolExpr
926 readable var _n_expr
: AExpr
927 readable var _n_expr2
: AExpr
931 readable var _n_expr
: AExpr
932 readable var _n_expr2
: AExpr
936 readable var _n_expr
: AExpr
937 readable var _n_expr2
: AExpr
941 readable var _n_kwnot
: TKwnot
942 readable var _n_expr
: AExpr
949 readable var _n_expr
: AExpr
950 readable var _n_expr2
: AExpr
975 readable var _n_expr
: AExpr
976 readable var _n_type
: AType
998 readable var _n_minus
: TMinus
1002 readable var _n_kwnew
: TKwnew
1003 readable var _n_type
: AType
1004 readable var _n_id
: nullable TId = null
1005 readable var _n_args
: AExprs
1007 abstract class AAttrFormExpr
1009 readable var _n_expr
: AExpr
1010 readable var _n_id
: TAttrid
1015 class AAttrAssignExpr
1017 super AAssignFormExpr
1019 abstract class ACallFormExpr
1021 readable var _n_id
: TId
1022 readable var _n_args
: AExprs
1024 abstract class ASendReassignFormExpr
1026 super AReassignFormExpr
1028 class AAttrReassignExpr
1030 super AReassignFormExpr
1035 class ACallAssignExpr
1037 super AAssignFormExpr
1039 class ACallReassignExpr
1041 super ASendReassignFormExpr
1045 readable var _n_qualified
: nullable AQualified = null
1046 readable var _n_kwsuper
: TKwsuper
1047 readable var _n_args
: AExprs
1051 readable var _n_kwinit
: TKwinit
1052 readable var _n_args
: AExprs
1054 abstract class ABraFormExpr
1056 readable var _n_args
: AExprs
1061 class ABraAssignExpr
1063 super AAssignFormExpr
1065 abstract class AVarFormExpr
1067 readable var _n_id
: TId
1069 class ABraReassignExpr
1071 super ASendReassignFormExpr
1073 class AClosureCallExpr
1075 readable var _n_id
: TId
1076 readable var _n_args
: AExprs
1077 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
1082 class AVarAssignExpr
1084 super AAssignFormExpr
1086 class AVarReassignExpr
1088 super AReassignFormExpr
1090 abstract class ARangeExpr
1092 readable var _n_expr
: AExpr
1093 readable var _n_expr2
: AExpr
1097 readable var _n_obra
: TObra
1098 readable var _n_cbra
: TCbra
1102 readable var _n_obra
: TObra
1103 readable var _n_cbra
: TObra
1107 readable var _n_exprs
: AExprs
1111 readable var _n_kwself
: nullable TKwself
1113 class AImplicitSelfExpr
1118 readable var _n_kwtrue
: TKwtrue
1122 readable var _n_kwfalse
: TKwfalse
1126 readable var _n_kwnull
: TKwnull
1130 readable var _n_number
: TNumber
1134 readable var _n_float
: TFloat
1138 readable var _n_char
: TChar
1140 abstract class AStringFormExpr
1142 readable var _n_string
: Token
1145 super AStringFormExpr
1147 class AStartStringExpr
1148 super AStringFormExpr
1150 class AMidStringExpr
1151 super AStringFormExpr
1153 class AEndStringExpr
1154 super AStringFormExpr
1156 class ASuperstringExpr
1158 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1162 readable var _n_opar
: TOpar
1163 readable var _n_cpar
: TCpar
1165 abstract class AProxyExpr
1167 readable var _n_expr
: AExpr
1171 readable var _n_expr
: AExpr
1172 readable var _n_kwas
: TKwas
1173 readable var _n_opar
: TOpar
1174 readable var _n_type
: AType
1175 readable var _n_cpar
: TCpar
1177 class AAsNotnullExpr
1179 readable var _n_expr
: AExpr
1180 readable var _n_kwas
: TKwas
1181 readable var _n_opar
: TOpar
1182 readable var _n_kwnot
: TKwnot
1183 readable var _n_kwnull
: TKwnull
1184 readable var _n_cpar
: TCpar
1186 class AIssetAttrExpr
1188 readable var _n_kwisset
: TKwisset
1190 abstract class AExprs
1192 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1194 class ADebugTypeExpr
1196 readable var _n_kwdebug
: TKwdebug
1197 readable var _n_kwtype
: TKwtype
1198 readable var _n_expr
: AExpr
1199 readable var _n_type
: AType
1206 readable var _n_opar
: TOpar
1207 readable var _n_cpar
: TCpar
1211 readable var _n_obra
: TObra
1212 readable var _n_cbra
: TCbra
1214 abstract class AAssignOp super Prod end
1217 readable var _n_pluseq
: TPluseq
1219 class AMinusAssignOp
1221 readable var _n_minuseq
: TMinuseq
1225 readable var _n_bang
: TBang
1226 readable var _n_id
: AClosureId
1227 readable var _n_ids
: List[TId] = new List[TId]
1228 readable var _n_kwdo
: nullable TKwdo = null
1229 readable var _n_expr
: nullable AExpr = null
1230 redef fun hot_location
do return n_id
.location
1232 abstract class AClosureId
1235 class ASimpleClosureId
1237 readable var _n_id
: TId
1239 class ABreakClosureId
1241 readable var _n_kwbreak
: TKwbreak
1245 readable var _n_quad
: nullable TQuad = null
1246 readable var _n_path
: List[TId] = new List[TId]
1247 readable var _n_id
: TId
1251 readable var _n_kwin
: TKwin
1252 readable var _n_string
: TString
1254 class AExternCodeBlock
1256 readable var _n_in_language
: nullable AInLanguage = null
1257 readable var _n_extern_code_segment
: TExternCodeSegment
1261 readable var _n_quad
: nullable TQuad = null
1262 readable var _n_id
: List[TId] = new List[TId]
1263 readable var _n_classid
: nullable TClassid = null
1267 readable var _n_comment
: List[TComment] = new List[TComment]
1272 readable var _n_at
: nullable TAt = null
1273 readable var _n_opar
: nullable TOpar = null
1274 readable var _n_items
: List[AAnnotation] = new List[AAnnotation]
1275 readable var _n_cpar
: nullable TCpar = null
1279 readable var _n_atid
: AAtid
1280 readable var _n_opar
: nullable TOpar = null
1281 readable var _n_args
: List[AAtArg] = new List[AAtArg]
1282 readable var _n_cpar
: nullable TCpar = null
1284 abstract class AAtArg
1289 readable var _n_type
: AType
1293 readable var _n_expr
: AExpr
1298 abstract class AAtid
1300 readable var _n_id
: Token
1311 class AKwreadableAtid
1314 class AKwwritableAtid
1323 readable var _n_base
: nullable AModule
1324 readable var _n_eof
: EOF
1325 init(n_base
: nullable AModule, n_eof
: EOF)
1327 self._n_base
= n_base