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
67 abstract class TokenKeyword
71 return "keyword '{text}'"
245 abstract class TokenOperator
249 return "operator '{text}'"
316 do return "type identifier '{text}'"
323 do return "identifier '{text}'"
330 do return "attribute '{text}'"
333 abstract class TokenLiteral
337 do return "literal value '{text}'"
365 do return "malformed string {text}"
372 do return "malformed character {text}"
375 class TExternCodeSegment
397 readable var _n_moduledecl
: nullable AModuledecl = null
398 readable var _n_imports
: List[AImport] = new List[AImport]
399 readable var _n_extern_code_blocks
: List[AExternCodeBlock] = new List[AExternCodeBlock]
400 readable var _n_classdefs
: List[AClassdef] = new List[AClassdef]
404 readable var _n_doc
: nullable ADoc = null
405 readable var _n_kwmodule
: TKwmodule
406 readable var _n_name
: AModuleName
408 abstract class AImport super Prod end
411 readable var _n_visibility
: AVisibility
412 readable var _n_kwimport
: TKwimport
413 readable var _n_name
: AModuleName
417 readable var _n_visibility
: AVisibility
418 readable var _n_kwimport
: TKwimport
419 readable var _n_kwend
: TKwend
421 abstract class AVisibility super Prod end
422 class APublicVisibility
425 class APrivateVisibility
427 readable var _n_kwprivate
: TKwprivate
429 class AProtectedVisibility
431 readable var _n_kwprotected
: TKwprotected
433 class AIntrudeVisibility
435 readable var _n_kwintrude
: TKwintrude
437 abstract class AClassdef super Prod
438 readable var _n_propdefs
: List[APropdef] = new List[APropdef]
442 readable var _n_doc
: nullable ADoc = null
443 readable var _n_kwredef
: nullable TKwredef = null
444 readable var _n_visibility
: AVisibility
445 readable var _n_classkind
: AClasskind
446 readable var _n_id
: nullable TClassid = null
447 readable var _n_formaldefs
: List[AFormaldef] = new List[AFormaldef]
448 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
449 readable var _n_superclasses
: List[ASuperclass] = new List[ASuperclass]
450 readable var _n_kwend
: TKwend
451 redef fun hot_location
do return n_id
.location
459 abstract class AClasskind super Prod end
460 class AConcreteClasskind
462 readable var _n_kwclass
: TKwclass
464 class AAbstractClasskind
466 readable var _n_kwabstract
: TKwabstract
467 readable var _n_kwclass
: TKwclass
469 class AInterfaceClasskind
471 readable var _n_kwinterface
: TKwinterface
475 readable var _n_kwenum
: TKwenum
477 class AExternClasskind
479 readable var _n_kwextern
: TKwextern
480 readable var _n_kwclass
: nullable TKwclass = null
484 readable var _n_id
: TClassid
485 readable var _n_type
: nullable AType = null
489 readable var _n_kwsuper
: TKwsuper
490 readable var _n_type
: AType
492 abstract class APropdef super Prod
493 readable var _n_doc
: nullable ADoc = null
497 readable var _n_kwredef
: nullable TKwredef = null
498 readable var _n_visibility
: AVisibility
499 readable var _n_kwvar
: TKwvar
500 readable var _n_id
: nullable TAttrid
501 readable var _n_id2
: nullable TId
502 readable var _n_type
: nullable AType = null
503 readable var _n_readable
: nullable AAble = null
504 readable var _n_writable
: nullable AAble = null
505 readable var _n_expr
: nullable AExpr = null
506 redef fun hot_location
508 if n_id
!= null then return n_id
.location
else return n_id2
.location
511 abstract class AMethPropdef
513 readable var _n_kwredef
: nullable TKwredef = null
514 readable var _n_visibility
: nullable AVisibility
515 readable var _n_methid
: nullable AMethid = null
516 readable var _n_signature
: nullable ASignature
517 redef fun hot_location
519 if n_methid
!= null then
520 return n_methid
.location
526 class ADeferredMethPropdef
528 readable var _n_kwmeth
: TKwmeth
530 class AInternMethPropdef
532 readable var _n_kwmeth
: TKwmeth
534 abstract class AExternPropdef
536 readable var _n_extern
: nullable TString = null
537 readable var _n_extern_calls
: nullable AExternCalls = null
538 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
540 class AExternMethPropdef
543 readable var _n_kwmeth
: TKwmeth
545 class AConcreteMethPropdef
547 readable var _n_kwmeth
: nullable TKwmeth
548 readable var _n_block
: nullable AExpr = null
550 abstract class AInitPropdef
553 class AConcreteInitPropdef
554 super AConcreteMethPropdef
556 readable var _n_kwinit
: TKwinit
557 redef fun hot_location
do return n_kwinit
.location
559 class AExternInitPropdef
562 readable var _n_kwnew
: TKwnew
564 class AMainMethPropdef
565 super AConcreteMethPropdef
569 readable var _n_kwimport
: TKwimport
570 readable var _n_extern_calls
: List[AExternCall] = new List[AExternCall]
572 abstract class AExternCall
575 abstract class APropExternCall
578 class ALocalPropExternCall
579 super APropExternCall
580 readable var _n_methid
: AMethid
582 class AFullPropExternCall
583 super APropExternCall
584 readable var _n_classid
: TClassid
585 readable var _n_quad
: nullable TQuad = null
586 readable var _n_methid
: AMethid
588 class AInitPropExternCall
589 super APropExternCall
590 readable var _n_classid
: TClassid
592 class ASuperExternCall
594 readable var _n_kwsuper
: TKwsuper
596 abstract class ACastExternCall
599 class ACastAsExternCall
600 super ACastExternCall
601 readable var _n_from_type
: AType
602 readable var _n_kwas
: TKwas
603 readable var _n_to_type
: AType
605 class AAsNullableExternCall
606 super ACastExternCall
607 readable var _n_type
: AType
608 readable var _n_kwas
: TKwas
609 readable var _n_kwnullable
: TKwnullable
611 class AAsNotNullableExternCall
612 super ACastExternCall
613 readable var _n_type
: AType
614 readable var _n_kwas
: TKwas
615 readable var _n_kwnot
: TKwnot
616 readable var _n_kwnullable
: TKwnullable
620 readable var _n_kwredef
: nullable TKwredef = null
621 readable var _n_visibility
: AVisibility
622 readable var _n_kwtype
: TKwtype
623 readable var _n_id
: TClassid
624 readable var _n_type
: AType
626 abstract class AAble super Prod
627 readable var _n_visibility
: nullable AVisibility = null
628 readable var _n_kwredef
: nullable TKwredef = null
632 readable var _n_kwreadable
: TKwreadable
636 readable var _n_kwwritable
: TKwwritable
638 abstract class AMethid super Prod end
641 readable var _n_id
: TId
645 readable var _n_plus
: TPlus
649 readable var _n_minus
: TMinus
653 readable var _n_star
: TStar
657 readable var _n_slash
: TSlash
661 readable var _n_percent
: TPercent
665 readable var _n_eq
: TEq
669 readable var _n_ne
: TNe
673 readable var _n_le
: TLe
677 readable var _n_ge
: TGe
681 readable var _n_lt
: TLt
685 readable var _n_gt
: TGt
689 readable writable var _n_ll
: TLl
693 readable writable var _n_gg
: TGg
697 readable var _n_obra
: TObra
698 readable var _n_cbra
: TCbra
700 class AStarshipMethid
702 readable var _n_starship
: TStarship
706 readable var _n_id
: TId
707 readable var _n_assign
: TAssign
709 class ABraassignMethid
711 readable var _n_obra
: TObra
712 readable var _n_cbra
: TCbra
713 readable var _n_assign
: TAssign
717 readable var _n_opar
: nullable TOpar = null
718 readable var _n_params
: List[AParam] = new List[AParam]
719 readable var _n_cpar
: nullable TCpar = null
720 readable var _n_type
: nullable AType = null
721 readable var _n_closure_decls
: List[AClosureDecl] = new List[AClosureDecl]
725 readable var _n_id
: TId
726 readable var _n_type
: nullable AType = null
727 readable var _n_dotdotdot
: nullable TDotdotdot = null
731 readable var _n_kwbreak
: nullable TKwbreak = null
732 readable var _n_bang
: TBang
733 readable var _n_id
: TId
734 readable var _n_signature
: ASignature
735 readable var _n_expr
: nullable AExpr = null
739 readable var _n_kwnullable
: nullable TKwnullable = null
740 readable var _n_id
: TClassid
741 readable var _n_types
: List[AType] = new List[AType]
745 readable var _n_kwlabel
: TKwlabel
746 readable var _n_id
: TId
748 abstract class AExpr super Prod end
751 readable var _n_expr
: List[AExpr] = new List[AExpr]
752 readable var _n_kwend
: nullable TKwend = null
756 readable var _n_kwvar
: TKwvar
757 readable var _n_id
: TId
758 readable var _n_type
: nullable AType = null
759 readable var _n_assign
: nullable TAssign = null
760 readable var _n_expr
: nullable AExpr = null
764 readable var _n_kwreturn
: nullable TKwreturn = null
765 readable var _n_expr
: nullable AExpr = null
767 abstract class ALabelable
769 readable var _n_label
: nullable ALabel = null
774 readable var _n_kwbreak
: TKwbreak
775 readable var _n_expr
: nullable AExpr = null
779 readable var _n_kwabort
: TKwabort
784 readable var _n_kwcontinue
: nullable TKwcontinue = null
785 readable var _n_expr
: nullable AExpr = null
790 readable var _n_kwdo
: TKwdo
791 readable var _n_block
: nullable AExpr = null
795 readable var _n_kwif
: TKwif
796 readable var _n_expr
: AExpr
797 readable var _n_then
: nullable AExpr = null
798 readable var _n_else
: nullable AExpr = null
802 readable var _n_kwif
: TKwif
803 readable var _n_expr
: AExpr
804 readable var _n_kwthen
: TKwthen
805 readable var _n_then
: AExpr
806 readable var _n_kwelse
: TKwelse
807 readable var _n_else
: AExpr
812 readable var _n_kwwhile
: TKwwhile
813 readable var _n_expr
: AExpr
814 readable var _n_kwdo
: TKwdo
815 readable var _n_block
: nullable AExpr = null
820 readable var _n_kwloop
: TKwloop
821 readable var _n_block
: nullable AExpr = null
826 readable var _n_kwfor
: TKwfor
827 readable var _n_ids
: List[TId] = new List[TId]
828 readable var _n_expr
: AExpr
829 readable var _n_kwdo
: TKwdo
830 readable var _n_block
: nullable AExpr = null
834 readable var _n_kwassert
: TKwassert
835 readable var _n_id
: nullable TId = null
836 readable var _n_expr
: AExpr
837 readable var _n_else
: nullable AExpr = null
839 abstract class AAssignFormExpr
841 readable var _n_assign
: TAssign
842 readable var _n_value
: AExpr
844 abstract class AReassignFormExpr
846 readable var _n_assign_op
: AAssignOp
847 readable var _n_value
: AExpr
851 readable var _n_kwonce
: TKwonce
853 abstract class ASendExpr
855 readable var _n_expr
: AExpr
856 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
858 abstract class ABinopExpr
860 readable var _n_expr2
: AExpr
862 abstract class ABoolExpr
867 readable var _n_expr
: AExpr
868 readable var _n_expr2
: AExpr
872 readable var _n_expr
: AExpr
873 readable var _n_expr2
: AExpr
877 readable var _n_expr
: AExpr
878 readable var _n_expr2
: AExpr
882 readable var _n_kwnot
: TKwnot
883 readable var _n_expr
: AExpr
890 readable var _n_expr
: AExpr
891 readable var _n_expr2
: AExpr
916 readable var _n_expr
: AExpr
917 readable var _n_type
: AType
939 readable var _n_minus
: TMinus
943 readable var _n_kwnew
: TKwnew
944 readable var _n_type
: AType
945 readable var _n_id
: nullable TId = null
946 readable var _n_args
: AExprs
948 abstract class AAttrFormExpr
950 readable var _n_expr
: AExpr
951 readable var _n_id
: TAttrid
956 class AAttrAssignExpr
958 super AAssignFormExpr
960 abstract class ACallFormExpr
962 readable var _n_id
: TId
963 readable var _n_args
: AExprs
965 abstract class ASendReassignFormExpr
967 super AReassignFormExpr
969 class AAttrReassignExpr
972 super AReassignFormExpr
977 class ACallAssignExpr
979 super AAssignFormExpr
981 class ACallReassignExpr
984 super ASendReassignFormExpr
988 readable var _n_qualified
: nullable AQualified = null
989 readable var _n_kwsuper
: TKwsuper
990 readable var _n_args
: AExprs
994 readable var _n_kwinit
: TKwinit
995 readable var _n_args
: AExprs
997 abstract class ABraFormExpr
999 readable var _n_args
: AExprs
1004 class ABraAssignExpr
1006 super AAssignFormExpr
1008 abstract class AVarFormExpr
1010 readable var _n_id
: TId
1012 class ABraReassignExpr
1014 super ASendReassignFormExpr
1016 class AClosureCallExpr
1018 readable var _n_id
: TId
1019 readable var _n_args
: AExprs
1020 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
1025 class AVarAssignExpr
1027 super AAssignFormExpr
1029 class AVarReassignExpr
1031 super AReassignFormExpr
1033 abstract class ARangeExpr
1035 readable var _n_expr
: AExpr
1036 readable var _n_expr2
: AExpr
1040 readable var _n_obra
: TObra
1041 readable var _n_cbra
: TCbra
1045 readable var _n_obra
: TObra
1046 readable var _n_cbra
: TObra
1050 readable var _n_exprs
: AExprs
1054 readable var _n_kwself
: nullable TKwself
1056 class AImplicitSelfExpr
1061 readable var _n_kwtrue
: TKwtrue
1065 readable var _n_kwfalse
: TKwfalse
1069 readable var _n_kwnull
: TKwnull
1073 readable var _n_number
: TNumber
1077 readable var _n_float
: TFloat
1081 readable var _n_char
: TChar
1083 abstract class AStringFormExpr
1085 readable var _n_string
: Token
1088 super AStringFormExpr
1090 class AStartStringExpr
1091 super AStringFormExpr
1093 class AMidStringExpr
1094 super AStringFormExpr
1096 class AEndStringExpr
1097 super AStringFormExpr
1099 class ASuperstringExpr
1101 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1105 readable var _n_opar
: TOpar
1106 readable var _n_cpar
: TCpar
1108 abstract class AProxyExpr
1110 readable var _n_expr
: AExpr
1114 readable var _n_expr
: AExpr
1115 readable var _n_kwas
: TKwas
1116 readable var _n_opar
: TOpar
1117 readable var _n_type
: AType
1118 readable var _n_cpar
: TCpar
1120 class AAsNotnullExpr
1122 readable var _n_expr
: AExpr
1123 readable var _n_kwas
: TKwas
1124 readable var _n_opar
: TOpar
1125 readable var _n_kwnot
: TKwnot
1126 readable var _n_kwnull
: TKwnull
1127 readable var _n_cpar
: TCpar
1129 class AIssetAttrExpr
1131 readable var _n_kwisset
: TKwisset
1133 abstract class AExprs
1135 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1137 class ADebugTypeExpr
1139 readable var _n_kwdebug
: TKwdebug
1140 readable var _n_kwtype
: TKwtype
1141 readable var _n_expr
: AExpr
1142 readable var _n_type
: AType
1149 readable var _n_opar
: TOpar
1150 readable var _n_cpar
: TCpar
1154 readable var _n_obra
: TObra
1155 readable var _n_cbra
: TCbra
1157 abstract class AAssignOp super Prod end
1160 readable var _n_pluseq
: TPluseq
1162 class AMinusAssignOp
1164 readable var _n_minuseq
: TMinuseq
1168 readable var _n_bang
: TBang
1169 readable var _n_id
: AClosureId
1170 readable var _n_ids
: List[TId] = new List[TId]
1171 readable var _n_kwdo
: nullable TKwdo = null
1172 readable var _n_expr
: nullable AExpr = null
1173 redef fun hot_location
do return n_id
.location
1175 abstract class AClosureId
1178 class ASimpleClosureId
1180 readable var _n_id
: TId
1182 class ABreakClosureId
1184 readable var _n_kwbreak
: TKwbreak
1188 readable var _n_quad
: nullable TQuad = null
1189 readable var _n_path
: List[TId] = new List[TId]
1190 readable var _n_id
: TId
1194 readable var _n_kwin
: TKwin
1195 readable var _n_string
: TString
1197 class AExternCodeBlock
1199 readable var _n_in_language
: nullable AInLanguage = null
1200 readable var _n_extern_code_segment
: TExternCodeSegment
1204 readable var _n_quad
: nullable TQuad = null
1205 readable var _n_id
: List[TId] = new List[TId]
1206 readable var _n_classid
: nullable TClassid = null
1210 readable var _n_comment
: List[TComment] = new List[TComment]
1215 readable var _n_base
: nullable AModule
1216 readable var _n_eof
: EOF
1217 init(n_base
: nullable AModule, n_eof
: EOF)
1219 self._n_base
= n_base