775c1207c5036e80a4688743636377d38402882f
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
66 abstract class TokenKeyword
70 return "keyword '{text}'"
244 abstract class TokenOperator
248 return "operator '{text}'"
315 do return "type identifier '{text}'"
322 do return "identifier '{text}'"
329 do return "attribute '{text}'"
332 abstract class TokenLiteral
336 do return "literal value '{text}'"
364 do return "malformed string {text}"
371 do return "malformed character {text}"
374 class TExternCodeSegment
379 private init noinit
do end
387 private init noinit
do end
392 readable var _n_moduledecl
: nullable AModuledecl = null
393 readable var _n_imports
: List[AImport] = new List[AImport]
394 readable var _n_extern_code_blocks
: List[AExternCodeBlock] = new List[AExternCodeBlock]
395 readable var _n_classdefs
: List[AClassdef] = new List[AClassdef]
399 readable var _n_doc
: nullable ADoc = null
400 readable var _n_kwmodule
: TKwmodule
401 readable var _n_name
: AModuleName
403 abstract class AImport super Prod end
406 readable var _n_visibility
: AVisibility
407 readable var _n_kwimport
: TKwimport
408 readable var _n_name
: AModuleName
412 readable var _n_visibility
: AVisibility
413 readable var _n_kwimport
: TKwimport
414 readable var _n_kwend
: TKwend
416 abstract class AVisibility super Prod end
417 class APublicVisibility
420 class APrivateVisibility
422 readable var _n_kwprivate
: TKwprivate
424 class AProtectedVisibility
426 readable var _n_kwprotected
: TKwprotected
428 class AIntrudeVisibility
430 readable var _n_kwintrude
: TKwintrude
432 abstract class AClassdef super Prod
433 readable var _n_propdefs
: List[APropdef] = new List[APropdef]
437 readable var _n_doc
: nullable ADoc = null
438 readable var _n_kwredef
: nullable TKwredef = null
439 readable var _n_visibility
: AVisibility
440 readable var _n_classkind
: AClasskind
441 readable var _n_id
: nullable TClassid = null
442 readable var _n_formaldefs
: List[AFormaldef] = new List[AFormaldef]
443 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
444 readable var _n_superclasses
: List[ASuperclass] = new List[ASuperclass]
445 readable var _n_kwend
: TKwend
446 redef fun hot_location
do return n_id
.location
454 abstract class AClasskind super Prod end
455 class AConcreteClasskind
457 readable var _n_kwclass
: TKwclass
459 class AAbstractClasskind
461 readable var _n_kwabstract
: TKwabstract
462 readable var _n_kwclass
: TKwclass
464 class AInterfaceClasskind
466 readable var _n_kwinterface
: TKwinterface
470 readable var _n_kwenum
: TKwenum
472 class AExternClasskind
474 readable var _n_kwextern
: TKwextern
475 readable var _n_kwclass
: nullable TKwclass = null
479 readable var _n_id
: TClassid
480 readable var _n_type
: nullable AType = null
484 readable var _n_kwsuper
: TKwsuper
485 readable var _n_type
: AType
487 abstract class APropdef super Prod
488 readable var _n_doc
: nullable ADoc = null
492 readable var _n_kwredef
: nullable TKwredef = null
493 readable var _n_visibility
: AVisibility
494 readable var _n_kwvar
: TKwvar
495 readable var _n_id
: nullable TAttrid
496 readable var _n_id2
: nullable TId
497 readable var _n_type
: nullable AType = null
498 readable var _n_readable
: nullable AAble = null
499 readable var _n_writable
: nullable AAble = null
500 readable var _n_expr
: nullable AExpr = null
501 redef fun hot_location
503 if n_id
!= null then return n_id
.location
else return n_id2
.location
506 abstract class AMethPropdef
508 readable var _n_kwredef
: nullable TKwredef = null
509 readable var _n_visibility
: nullable AVisibility
510 readable var _n_methid
: nullable AMethid = null
511 readable var _n_signature
: nullable ASignature
512 redef fun hot_location
514 if n_methid
!= null then
515 return n_methid
.location
521 class ADeferredMethPropdef
523 readable var _n_kwmeth
: TKwmeth
525 class AInternMethPropdef
527 readable var _n_kwmeth
: TKwmeth
529 abstract class AExternPropdef
531 readable var _n_extern
: nullable TString = null
532 readable var _n_extern_calls
: nullable AExternCalls = null
533 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
535 class AExternMethPropdef
538 readable var _n_kwmeth
: TKwmeth
540 class AConcreteMethPropdef
542 readable var _n_kwmeth
: nullable TKwmeth
543 readable var _n_block
: nullable AExpr = null
545 abstract class AInitPropdef
548 class AConcreteInitPropdef
549 super AConcreteMethPropdef
551 readable var _n_kwinit
: TKwinit
552 redef fun hot_location
do return n_kwinit
.location
554 class AExternInitPropdef
557 readable var _n_kwnew
: TKwnew
559 class AMainMethPropdef
560 super AConcreteMethPropdef
564 readable var _n_kwimport
: TKwimport
565 readable var _n_extern_calls
: List[AExternCall] = new List[AExternCall]
567 abstract class AExternCall
570 abstract class APropExternCall
573 class ALocalPropExternCall
574 super APropExternCall
575 readable var _n_methid
: AMethid
577 class AFullPropExternCall
578 super APropExternCall
579 readable var _n_classid
: TClassid
580 readable var _n_quad
: nullable TQuad = null
581 readable var _n_methid
: AMethid
583 class AInitPropExternCall
584 super APropExternCall
585 readable var _n_classid
: TClassid
587 class ASuperExternCall
589 readable var _n_kwsuper
: TKwsuper
591 abstract class ACastExternCall
594 class ACastAsExternCall
595 super ACastExternCall
596 readable var _n_from_type
: AType
597 readable var _n_kwas
: TKwas
598 readable var _n_to_type
: AType
600 class AAsNullableExternCall
601 super ACastExternCall
602 readable var _n_type
: AType
603 readable var _n_kwas
: TKwas
604 readable var _n_kwnullable
: TKwnullable
606 class AAsNotNullableExternCall
607 super ACastExternCall
608 readable var _n_type
: AType
609 readable var _n_kwas
: TKwas
610 readable var _n_kwnot
: TKwnot
611 readable var _n_kwnullable
: TKwnullable
615 readable var _n_kwredef
: nullable TKwredef = null
616 readable var _n_visibility
: AVisibility
617 readable var _n_kwtype
: TKwtype
618 readable var _n_id
: TClassid
619 readable var _n_type
: AType
621 abstract class AAble super Prod
622 readable var _n_visibility
: nullable AVisibility = null
623 readable var _n_kwredef
: nullable TKwredef = null
627 readable var _n_kwreadable
: TKwreadable
631 readable var _n_kwwritable
: TKwwritable
633 abstract class AMethid super Prod end
636 readable var _n_id
: TId
640 readable var _n_plus
: TPlus
644 readable var _n_minus
: TMinus
648 readable var _n_star
: TStar
652 readable var _n_slash
: TSlash
656 readable var _n_percent
: TPercent
660 readable var _n_eq
: TEq
664 readable var _n_ne
: TNe
668 readable var _n_le
: TLe
672 readable var _n_ge
: TGe
676 readable var _n_lt
: TLt
680 readable var _n_gt
: TGt
684 readable writable var _n_ll
: TLl
688 readable writable var _n_gg
: TGg
692 readable var _n_obra
: TObra
693 readable var _n_cbra
: TCbra
695 class AStarshipMethid
697 readable var _n_starship
: TStarship
701 readable var _n_id
: TId
702 readable var _n_assign
: TAssign
704 class ABraassignMethid
706 readable var _n_obra
: TObra
707 readable var _n_cbra
: TCbra
708 readable var _n_assign
: TAssign
712 readable var _n_opar
: nullable TOpar = null
713 readable var _n_params
: List[AParam] = new List[AParam]
714 readable var _n_cpar
: nullable TCpar = null
715 readable var _n_type
: nullable AType = null
716 readable var _n_closure_decls
: List[AClosureDecl] = new List[AClosureDecl]
720 readable var _n_id
: TId
721 readable var _n_type
: nullable AType = null
722 readable var _n_dotdotdot
: nullable TDotdotdot = null
726 readable var _n_kwbreak
: nullable TKwbreak = null
727 readable var _n_bang
: TBang
728 readable var _n_id
: TId
729 readable var _n_signature
: ASignature
730 readable var _n_expr
: nullable AExpr = null
734 readable var _n_kwnullable
: nullable TKwnullable = null
735 readable var _n_id
: TClassid
736 readable var _n_types
: List[AType] = new List[AType]
740 readable var _n_kwlabel
: TKwlabel
741 readable var _n_id
: TId
743 abstract class AExpr super Prod end
746 readable var _n_expr
: List[AExpr] = new List[AExpr]
747 readable var _n_kwend
: nullable TKwend = null
751 readable var _n_kwvar
: TKwvar
752 readable var _n_id
: TId
753 readable var _n_type
: nullable AType = null
754 readable var _n_assign
: nullable TAssign = null
755 readable var _n_expr
: nullable AExpr = null
759 readable var _n_kwreturn
: nullable TKwreturn = null
760 readable var _n_expr
: nullable AExpr = null
762 abstract class ALabelable
764 readable var _n_label
: nullable ALabel = null
769 readable var _n_kwbreak
: TKwbreak
770 readable var _n_expr
: nullable AExpr = null
774 readable var _n_kwabort
: TKwabort
779 readable var _n_kwcontinue
: nullable TKwcontinue = null
780 readable var _n_expr
: nullable AExpr = null
785 readable var _n_kwdo
: TKwdo
786 readable var _n_block
: nullable AExpr = null
790 readable var _n_kwif
: TKwif
791 readable var _n_expr
: AExpr
792 readable var _n_then
: nullable AExpr = null
793 readable var _n_else
: nullable AExpr = null
797 readable var _n_kwif
: TKwif
798 readable var _n_expr
: AExpr
799 readable var _n_kwthen
: TKwthen
800 readable var _n_then
: AExpr
801 readable var _n_kwelse
: TKwelse
802 readable var _n_else
: AExpr
807 readable var _n_kwwhile
: TKwwhile
808 readable var _n_expr
: AExpr
809 readable var _n_kwdo
: TKwdo
810 readable var _n_block
: nullable AExpr = null
815 readable var _n_kwloop
: TKwloop
816 readable var _n_block
: nullable AExpr = null
821 readable var _n_kwfor
: TKwfor
822 readable var _n_ids
: List[TId] = new List[TId]
823 readable var _n_expr
: AExpr
824 readable var _n_kwdo
: TKwdo
825 readable var _n_block
: nullable AExpr = null
829 readable var _n_kwassert
: TKwassert
830 readable var _n_id
: nullable TId = null
831 readable var _n_expr
: AExpr
832 readable var _n_else
: nullable AExpr = null
834 abstract class AAssignFormExpr
836 readable var _n_assign
: TAssign
837 readable var _n_value
: AExpr
839 abstract class AReassignFormExpr
841 readable var _n_assign_op
: AAssignOp
842 readable var _n_value
: AExpr
846 readable var _n_kwonce
: TKwonce
848 abstract class ASendExpr
850 readable var _n_expr
: AExpr
851 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
853 abstract class ABinopExpr
855 readable var _n_expr2
: AExpr
857 abstract class ABoolExpr
862 readable var _n_expr
: AExpr
863 readable var _n_expr2
: AExpr
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_kwnot
: TKwnot
878 readable var _n_expr
: AExpr
885 readable var _n_expr
: AExpr
886 readable var _n_expr2
: AExpr
911 readable var _n_expr
: AExpr
912 readable var _n_type
: AType
934 readable var _n_minus
: TMinus
938 readable var _n_kwnew
: TKwnew
939 readable var _n_type
: AType
940 readable var _n_id
: nullable TId = null
941 readable var _n_args
: AExprs
943 abstract class AAttrFormExpr
945 readable var _n_expr
: AExpr
946 readable var _n_id
: TAttrid
951 class AAttrAssignExpr
953 super AAssignFormExpr
955 abstract class ACallFormExpr
957 readable var _n_id
: TId
958 readable var _n_args
: AExprs
960 abstract class ASendReassignFormExpr
962 super AReassignFormExpr
964 class AAttrReassignExpr
967 super AReassignFormExpr
972 class ACallAssignExpr
974 super AAssignFormExpr
976 class ACallReassignExpr
979 super ASendReassignFormExpr
983 readable var _n_qualified
: nullable AQualified = null
984 readable var _n_kwsuper
: TKwsuper
985 readable var _n_args
: AExprs
989 readable var _n_kwinit
: TKwinit
990 readable var _n_args
: AExprs
992 abstract class ABraFormExpr
994 readable var _n_args
: AExprs
1001 super AAssignFormExpr
1003 abstract class AVarFormExpr
1005 readable var _n_id
: TId
1007 class ABraReassignExpr
1009 super ASendReassignFormExpr
1011 class AClosureCallExpr
1013 readable var _n_id
: TId
1014 readable var _n_args
: AExprs
1015 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
1020 class AVarAssignExpr
1022 super AAssignFormExpr
1024 class AVarReassignExpr
1026 super AReassignFormExpr
1028 abstract class ARangeExpr
1030 readable var _n_expr
: AExpr
1031 readable var _n_expr2
: AExpr
1035 readable var _n_obra
: TObra
1036 readable var _n_cbra
: TCbra
1040 readable var _n_obra
: TObra
1041 readable var _n_cbra
: TObra
1045 readable var _n_exprs
: AExprs
1049 readable var _n_kwself
: nullable TKwself
1051 class AImplicitSelfExpr
1056 readable var _n_kwtrue
: TKwtrue
1060 readable var _n_kwfalse
: TKwfalse
1064 readable var _n_kwnull
: TKwnull
1068 readable var _n_number
: TNumber
1072 readable var _n_float
: TFloat
1076 readable var _n_char
: TChar
1078 abstract class AStringFormExpr
1082 super AStringFormExpr
1083 readable var _n_string
: TString
1085 class AStartStringExpr
1086 super AStringFormExpr
1087 readable var _n_string
: TStartString
1089 class AMidStringExpr
1090 super AStringFormExpr
1091 readable var _n_string
: TMidString
1093 class AEndStringExpr
1094 super AStringFormExpr
1095 readable var _n_string
: TEndString
1097 class ASuperstringExpr
1099 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1103 readable var _n_opar
: TOpar
1104 readable var _n_cpar
: TCpar
1106 abstract class AProxyExpr
1108 readable var _n_expr
: AExpr
1112 readable var _n_expr
: AExpr
1113 readable var _n_kwas
: TKwas
1114 readable var _n_opar
: TOpar
1115 readable var _n_type
: AType
1116 readable var _n_cpar
: TCpar
1118 class AAsNotnullExpr
1120 readable var _n_expr
: AExpr
1121 readable var _n_kwas
: TKwas
1122 readable var _n_opar
: TOpar
1123 readable var _n_kwnot
: TKwnot
1124 readable var _n_kwnull
: TKwnull
1125 readable var _n_cpar
: TCpar
1127 class AIssetAttrExpr
1129 readable var _n_kwisset
: TKwisset
1131 abstract class AExprs
1133 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1135 class ADebugTypeExpr
1137 readable var _n_kwdebug
: TKwdebug
1138 readable var _n_kwtype
: TKwtype
1139 readable var _n_expr
: AExpr
1140 readable var _n_type
: AType
1147 readable var _n_opar
: TOpar
1148 readable var _n_cpar
: TCpar
1152 readable var _n_obra
: TObra
1153 readable var _n_cbra
: TCbra
1155 abstract class AAssignOp super Prod end
1158 readable var _n_pluseq
: TPluseq
1160 class AMinusAssignOp
1162 readable var _n_minuseq
: TMinuseq
1166 readable var _n_bang
: TBang
1167 readable var _n_id
: AClosureId
1168 readable var _n_ids
: List[TId] = new List[TId]
1169 readable var _n_kwdo
: nullable TKwdo = null
1170 readable var _n_expr
: nullable AExpr = null
1171 redef fun hot_location
do return n_id
.location
1173 abstract class AClosureId
1176 class ASimpleClosureId
1178 readable var _n_id
: TId
1180 class ABreakClosureId
1182 readable var _n_kwbreak
: TKwbreak
1186 readable var _n_quad
: nullable TQuad = null
1187 readable var _n_path
: List[TId] = new List[TId]
1188 readable var _n_id
: TId
1192 readable var _n_kwin
: TKwin
1193 readable var _n_string
: TString
1195 class AExternCodeBlock
1197 readable var _n_in_language
: nullable AInLanguage = null
1198 readable var _n_extern_code_segment
: TExternCodeSegment
1202 readable var _n_quad
: nullable TQuad = null
1203 readable var _n_id
: List[TId] = new List[TId]
1204 readable var _n_classid
: nullable TClassid = null
1208 readable var _n_comment
: List[TComment] = new List[TComment]
1213 readable var _n_base
: nullable AModule
1214 readable var _n_eof
: EOF
1215 init(n_base
: nullable AModule, n_eof
: EOF)
1217 self._n_base
= n_base