fd67aa50b5a8eb653234bb98eb6b2ac957c6f68a
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}'"
247 abstract class TokenOperator
251 return "operator '{text}'"
318 do return "type identifier '{text}'"
325 do return "identifier '{text}'"
332 do return "attribute '{text}'"
335 abstract class TokenLiteral
339 do return "literal value '{text}'"
367 do return "malformed string {text}"
374 do return "malformed character {text}"
377 class TExternCodeSegment
382 private init noinit
do end
390 private init noinit
do end
395 readable var _n_moduledecl
: nullable AModuledecl = null
396 readable var _n_imports
: List[AImport] = new List[AImport]
397 readable var _n_extern_code_blocks
: List[AExternCodeBlock] = new List[AExternCodeBlock]
398 readable var _n_classdefs
: List[AClassdef] = new List[AClassdef]
402 readable var _n_doc
: nullable ADoc = null
403 readable var _n_kwmodule
: TKwmodule
404 readable var _n_name
: AModuleName
406 abstract class AImport super Prod end
409 readable var _n_visibility
: AVisibility
410 readable var _n_kwimport
: TKwimport
411 readable var _n_name
: AModuleName
415 readable var _n_visibility
: AVisibility
416 readable var _n_kwimport
: TKwimport
417 readable var _n_kwend
: TKwend
419 abstract class AVisibility super Prod end
420 class APublicVisibility
423 class APrivateVisibility
425 readable var _n_kwprivate
: TKwprivate
427 class AProtectedVisibility
429 readable var _n_kwprotected
: TKwprotected
431 class AIntrudeVisibility
433 readable var _n_kwintrude
: TKwintrude
435 abstract class AClassdef super Prod
436 readable var _n_propdefs
: List[APropdef] = new List[APropdef]
440 readable var _n_doc
: nullable ADoc = null
441 readable var _n_kwredef
: nullable TKwredef = null
442 readable var _n_visibility
: AVisibility
443 readable var _n_classkind
: AClasskind
444 readable var _n_id
: nullable TClassid = null
445 readable var _n_formaldefs
: List[AFormaldef] = new List[AFormaldef]
446 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
447 readable var _n_superclasses
: List[ASuperclass] = new List[ASuperclass]
448 readable var _n_kwend
: TKwend
449 redef fun hot_location
do return n_id
.location
457 abstract class AClasskind super Prod end
458 class AConcreteClasskind
460 readable var _n_kwclass
: TKwclass
462 class AAbstractClasskind
464 readable var _n_kwabstract
: TKwabstract
465 readable var _n_kwclass
: TKwclass
467 class AInterfaceClasskind
469 readable var _n_kwinterface
: TKwinterface
473 readable var _n_kwenum
: TKwenum
475 class AExternClasskind
477 readable var _n_kwextern
: TKwextern
481 readable var _n_id
: TClassid
482 readable var _n_type
: nullable AType = null
486 readable var _n_kwspecial
: nullable TKwspecial = null
487 readable var _n_kwsuper
: nullable TKwsuper = null
488 readable var _n_type
: AType
490 abstract class APropdef super Prod
491 readable var _n_doc
: nullable ADoc = null
495 readable var _n_kwredef
: nullable TKwredef = null
496 readable var _n_visibility
: AVisibility
497 readable var _n_kwvar
: TKwvar
498 readable var _n_id
: nullable TAttrid
499 readable var _n_id2
: nullable TId
500 readable var _n_type
: nullable AType = null
501 readable var _n_readable
: nullable AAble = null
502 readable var _n_writable
: nullable AAble = null
503 readable var _n_expr
: nullable AExpr = null
504 redef fun hot_location
506 if n_id
!= null then return n_id
.location
else return n_id2
.location
509 abstract class AMethPropdef
511 readable var _n_kwredef
: nullable TKwredef = null
512 readable var _n_visibility
: nullable AVisibility
513 readable var _n_methid
: nullable AMethid = null
514 readable var _n_signature
: nullable ASignature
515 redef fun hot_location
517 if n_methid
!= null then
518 return n_methid
.location
524 class ADeferredMethPropdef
526 readable var _n_kwmeth
: TKwmeth
528 class AInternMethPropdef
530 readable var _n_kwmeth
: TKwmeth
532 abstract class AExternPropdef
534 readable var _n_extern
: nullable TString = null
535 readable var _n_extern_calls
: nullable AExternCalls = null
536 readable var _n_extern_code_block
: nullable AExternCodeBlock = null
538 class AExternMethPropdef
541 readable var _n_kwmeth
: TKwmeth
543 class AConcreteMethPropdef
545 readable var _n_kwmeth
: nullable TKwmeth
546 readable var _n_block
: nullable AExpr = null
548 abstract class AInitPropdef
551 class AConcreteInitPropdef
552 super AConcreteMethPropdef
554 readable var _n_kwinit
: TKwinit
555 redef fun hot_location
do return n_kwinit
.location
557 class AExternInitPropdef
560 readable var _n_kwnew
: TKwnew
562 class AMainMethPropdef
563 super AConcreteMethPropdef
567 readable var _n_kwimport
: TKwimport
568 readable var _n_extern_calls
: List[AExternCall] = new List[AExternCall]
570 abstract class AExternCall
573 abstract class APropExternCall
576 class ALocalPropExternCall
577 special APropExternCall
578 readable var _n_methid
: AMethid
580 class AFullPropExternCall
581 special APropExternCall
582 readable var _n_classid
: TClassid
583 readable var _n_quad
: nullable TQuad = null
584 readable var _n_methid
: AMethid
586 class AInitPropExternCall
587 special APropExternCall
588 readable var _n_classid
: TClassid
590 class ASuperExternCall
592 readable var _n_kwsuper
: TKwsuper
594 abstract class ACastExternCall
597 class ACastAsExternCall
598 special ACastExternCall
599 readable var _n_from_type
: AType
600 readable var _n_kwas
: TKwas
601 readable var _n_to_type
: AType
603 class AAsNullableExternCall
604 special ACastExternCall
605 readable var _n_type
: AType
606 readable var _n_kwas
: TKwas
607 readable var _n_kwnullable
: TKwnullable
609 class AAsNotNullableExternCall
610 special ACastExternCall
611 readable var _n_type
: AType
612 readable var _n_kwas
: TKwas
613 readable var _n_kwnot
: TKwnot
614 readable var _n_kwnullable
: TKwnullable
618 readable var _n_kwredef
: nullable TKwredef = null
619 readable var _n_visibility
: AVisibility
620 readable var _n_kwtype
: TKwtype
621 readable var _n_id
: TClassid
622 readable var _n_type
: AType
624 abstract class AAble super Prod
625 readable var _n_visibility
: nullable AVisibility = null
626 readable var _n_kwredef
: nullable TKwredef = null
630 readable var _n_kwreadable
: TKwreadable
634 readable var _n_kwwritable
: TKwwritable
636 abstract class AMethid super Prod end
639 readable var _n_id
: TId
643 readable var _n_plus
: TPlus
647 readable var _n_minus
: TMinus
651 readable var _n_star
: TStar
655 readable var _n_slash
: TSlash
659 readable var _n_percent
: TPercent
663 readable var _n_eq
: TEq
667 readable var _n_ne
: TNe
671 readable var _n_le
: TLe
675 readable var _n_ge
: TGe
679 readable var _n_lt
: TLt
683 readable var _n_gt
: TGt
687 readable writable var _n_ll
: TLl
691 readable writable var _n_gg
: TGg
695 readable var _n_obra
: TObra
696 readable var _n_cbra
: TCbra
698 class AStarshipMethid
700 readable var _n_starship
: TStarship
704 readable var _n_id
: TId
705 readable var _n_assign
: TAssign
707 class ABraassignMethid
709 readable var _n_obra
: TObra
710 readable var _n_cbra
: TCbra
711 readable var _n_assign
: TAssign
715 readable var _n_opar
: nullable TOpar = null
716 readable var _n_params
: List[AParam] = new List[AParam]
717 readable var _n_cpar
: nullable TCpar = null
718 readable var _n_type
: nullable AType = null
719 readable var _n_closure_decls
: List[AClosureDecl] = new List[AClosureDecl]
723 readable var _n_id
: TId
724 readable var _n_type
: nullable AType = null
725 readable var _n_dotdotdot
: nullable TDotdotdot = null
729 readable var _n_kwbreak
: nullable TKwbreak = null
730 readable var _n_bang
: TBang
731 readable var _n_id
: TId
732 readable var _n_signature
: ASignature
733 readable var _n_expr
: nullable AExpr = null
737 readable var _n_kwnullable
: nullable TKwnullable = null
738 readable var _n_id
: TClassid
739 readable var _n_types
: List[AType] = new List[AType]
743 readable var _n_kwlabel
: TKwlabel
744 readable var _n_id
: TId
746 abstract class AExpr super Prod end
749 readable var _n_expr
: List[AExpr] = new List[AExpr]
750 readable var _n_kwend
: nullable TKwend = null
754 readable var _n_kwvar
: TKwvar
755 readable var _n_id
: TId
756 readable var _n_type
: nullable AType = null
757 readable var _n_assign
: nullable TAssign = null
758 readable var _n_expr
: nullable AExpr = null
762 readable var _n_kwreturn
: nullable TKwreturn = null
763 readable var _n_expr
: nullable AExpr = null
765 abstract class ALabelable
767 readable var _n_label
: nullable ALabel = null
772 readable var _n_kwbreak
: TKwbreak
773 readable var _n_expr
: nullable AExpr = null
777 readable var _n_kwabort
: TKwabort
782 readable var _n_kwcontinue
: nullable TKwcontinue = null
783 readable var _n_expr
: nullable AExpr = null
788 readable var _n_kwdo
: TKwdo
789 readable var _n_block
: nullable AExpr = null
793 readable var _n_kwif
: TKwif
794 readable var _n_expr
: AExpr
795 readable var _n_then
: nullable AExpr = null
796 readable var _n_else
: nullable AExpr = null
800 readable var _n_kwif
: TKwif
801 readable var _n_expr
: AExpr
802 readable var _n_kwthen
: TKwthen
803 readable var _n_then
: AExpr
804 readable var _n_kwelse
: TKwelse
805 readable var _n_else
: AExpr
810 readable var _n_kwwhile
: TKwwhile
811 readable var _n_expr
: AExpr
812 readable var _n_kwdo
: TKwdo
813 readable var _n_block
: nullable AExpr = null
818 readable var _n_kwloop
: TKwloop
819 readable var _n_block
: nullable AExpr = null
824 readable var _n_kwfor
: TKwfor
825 readable var _n_ids
: List[TId] = new List[TId]
826 readable var _n_expr
: AExpr
827 readable var _n_kwdo
: TKwdo
828 readable var _n_block
: nullable AExpr = null
832 readable var _n_kwassert
: TKwassert
833 readable var _n_id
: nullable TId = null
834 readable var _n_expr
: AExpr
835 readable var _n_else
: nullable AExpr = null
837 abstract class AAssignFormExpr
839 readable var _n_assign
: TAssign
840 readable var _n_value
: AExpr
842 abstract class AReassignFormExpr
844 readable var _n_assign_op
: AAssignOp
845 readable var _n_value
: AExpr
849 readable var _n_kwonce
: TKwonce
851 abstract class ASendExpr
853 readable var _n_expr
: AExpr
854 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
856 abstract class ABinopExpr
858 readable var _n_expr2
: AExpr
860 abstract class ABoolExpr
865 readable var _n_expr
: AExpr
866 readable var _n_expr2
: AExpr
870 readable var _n_expr
: AExpr
871 readable var _n_expr2
: AExpr
875 readable var _n_expr
: AExpr
876 readable var _n_expr2
: AExpr
880 readable var _n_kwnot
: TKwnot
881 readable var _n_expr
: AExpr
888 readable var _n_expr
: AExpr
889 readable var _n_expr2
: AExpr
914 readable var _n_expr
: AExpr
915 readable var _n_type
: AType
937 readable var _n_minus
: TMinus
941 readable var _n_kwnew
: TKwnew
942 readable var _n_type
: AType
943 readable var _n_id
: nullable TId = null
944 readable var _n_args
: AExprs
946 abstract class AAttrFormExpr
948 readable var _n_expr
: AExpr
949 readable var _n_id
: TAttrid
954 class AAttrAssignExpr
956 super AAssignFormExpr
958 abstract class ACallFormExpr
960 readable var _n_id
: TId
961 readable var _n_args
: AExprs
963 abstract class ASendReassignFormExpr
965 super AReassignFormExpr
967 class AAttrReassignExpr
970 super AReassignFormExpr
975 class ACallAssignExpr
977 super AAssignFormExpr
979 class ACallReassignExpr
982 super ASendReassignFormExpr
986 readable var _n_qualified
: nullable AQualified = null
987 readable var _n_kwsuper
: TKwsuper
988 readable var _n_args
: AExprs
992 readable var _n_kwinit
: TKwinit
993 readable var _n_args
: AExprs
995 abstract class ABraFormExpr
997 readable var _n_args
: AExprs
1002 class ABraAssignExpr
1004 super AAssignFormExpr
1006 abstract class AVarFormExpr
1008 readable var _n_id
: TId
1010 class ABraReassignExpr
1012 super ASendReassignFormExpr
1014 class AClosureCallExpr
1016 readable var _n_id
: TId
1017 readable var _n_args
: AExprs
1018 readable var _n_closure_defs
: List[AClosureDef] = new List[AClosureDef]
1023 class AVarAssignExpr
1025 super AAssignFormExpr
1027 class AVarReassignExpr
1029 super AReassignFormExpr
1031 abstract class ARangeExpr
1033 readable var _n_expr
: AExpr
1034 readable var _n_expr2
: AExpr
1038 readable var _n_obra
: TObra
1039 readable var _n_cbra
: TCbra
1043 readable var _n_obra
: TObra
1044 readable var _n_cbra
: TObra
1048 readable var _n_exprs
: AExprs
1052 readable var _n_kwself
: nullable TKwself
1054 class AImplicitSelfExpr
1059 readable var _n_kwtrue
: TKwtrue
1063 readable var _n_kwfalse
: TKwfalse
1067 readable var _n_kwnull
: TKwnull
1071 readable var _n_number
: TNumber
1075 readable var _n_float
: TFloat
1079 readable var _n_char
: TChar
1081 abstract class AStringFormExpr
1085 super AStringFormExpr
1086 readable var _n_string
: TString
1088 class AStartStringExpr
1089 super AStringFormExpr
1090 readable var _n_string
: TStartString
1092 class AMidStringExpr
1093 super AStringFormExpr
1094 readable var _n_string
: TMidString
1096 class AEndStringExpr
1097 super AStringFormExpr
1098 readable var _n_string
: TEndString
1100 class ASuperstringExpr
1102 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1106 readable var _n_opar
: TOpar
1107 readable var _n_cpar
: TCpar
1109 abstract class AProxyExpr
1111 readable var _n_expr
: AExpr
1115 readable var _n_expr
: AExpr
1116 readable var _n_kwas
: TKwas
1117 readable var _n_opar
: TOpar
1118 readable var _n_type
: AType
1119 readable var _n_cpar
: TCpar
1121 class AAsNotnullExpr
1123 readable var _n_expr
: AExpr
1124 readable var _n_kwas
: TKwas
1125 readable var _n_opar
: TOpar
1126 readable var _n_kwnot
: TKwnot
1127 readable var _n_kwnull
: TKwnull
1128 readable var _n_cpar
: TCpar
1130 class AIssetAttrExpr
1132 readable var _n_kwisset
: TKwisset
1134 abstract class AExprs
1136 readable var _n_exprs
: List[AExpr] = new List[AExpr]
1138 class ADebugTypeExpr
1140 readable var _n_kwdebug
: TKwdebug
1141 readable var _n_kwtype
: TKwtype
1142 readable var _n_expr
: AExpr
1143 readable var _n_type
: AType
1150 readable var _n_opar
: TOpar
1151 readable var _n_cpar
: TCpar
1155 readable var _n_obra
: TObra
1156 readable var _n_cbra
: TCbra
1158 abstract class AAssignOp super Prod end
1161 readable var _n_pluseq
: TPluseq
1163 class AMinusAssignOp
1165 readable var _n_minuseq
: TMinuseq
1169 readable var _n_bang
: TBang
1170 readable var _n_id
: AClosureId
1171 readable var _n_ids
: List[TId] = new List[TId]
1172 readable var _n_kwdo
: nullable TKwdo = null
1173 readable var _n_expr
: nullable AExpr = null
1174 redef fun hot_location
do return n_id
.location
1176 abstract class AClosureId
1179 class ASimpleClosureId
1181 readable var _n_id
: TId
1183 class ABreakClosureId
1185 readable var _n_kwbreak
: TKwbreak
1189 readable var _n_quad
: nullable TQuad = null
1190 readable var _n_path
: List[TId] = new List[TId]
1191 readable var _n_id
: TId
1195 readable var _n_kwin
: TKwin
1196 readable var _n_string
: TString
1198 class AExternCodeBlock
1200 readable var _n_in_language
: nullable AInLanguage = null
1201 readable var _n_extern_code_segment
: TExternCodeSegment
1205 readable var _n_quad
: nullable TQuad = null
1206 readable var _n_id
: List[TId] = new List[TId]
1207 readable var _n_classid
: nullable TClassid = null
1211 readable var _n_comment
: List[TComment] = new List[TComment]
1216 readable var _n_base
: nullable AModule
1217 readable var _n_eof
: EOF
1218 init(n_base
: nullable AModule, n_eof
: EOF)
1220 self._n_base
= n_base