2552 lines
51 KiB
C#
2552 lines
51 KiB
C#
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace PascalABCCompiler.SemanticTree
|
|
{
|
|
|
|
//Âèä îáúåêòà.
|
|
//basic-áàçîâûé îáúåêò, íå îïðåäåëÿåìûé â ïðîãðàììå, íàïðèìåð ìåòîä ñëîæåíèÿ äâóõ öåëûõ ÷èñåë.
|
|
//common-îáû÷íûé òèï, ìåòîä è ò.ä., îïðåäåëÿåìûé ïîëüçîâàòåëåì.
|
|
//compiled-òèï, ìåòîä èëè äðóãîé óçåë, îïðåäåëÿåìûé ïîëüçîâàòåëåì.
|
|
public enum node_kind {basic,common,compiled,indefinite};
|
|
|
|
//Óðîâåíü äîñòóïà êëàññà. Õîòÿ çà÷åì ÿ ýòî ïèøó? È òàê ïîíÿòíî èç íàçâàíèÿ.
|
|
public enum type_access_level {tal_public,tal_internal};
|
|
|
|
//Êàê ìû áóäåì ïðåäñòàâëÿòü ññûëî÷íûå è ðàçìåðíûå òèïû?
|
|
//public enum reference_or_value_type {reference_type,value_type};
|
|
|
|
//Ðàñïîëîæåíèå ýëåìåíòà - â ôóíêöèè, â êëàññå, â ïðîñòðàíñòâå èìåí.
|
|
public enum node_location_kind {in_function_location,in_class_location,in_namespace_location, in_block_location, indefinite};
|
|
|
|
//Óðîâåíü äîñòóïà ê ýëåìåíòàì êëàññà.
|
|
public enum field_access_level { fal_private, fal_internal, fal_protected, fal_public };
|
|
|
|
//Îáû÷íûé, ñòàòè÷åñêèé èëè âèðòóàëüíûé ýëåìåíò êëàññà.
|
|
public enum polymorphic_state {ps_static,ps_common,ps_virtual,ps_virtual_abstract};
|
|
|
|
public enum type_special_kind { none_kind, not_set_kind, array_kind, enum_kind, typed_file, binary_file, short_string, array_wrapper, record, set_type, base_set_type, diap_type, text_file };
|
|
|
|
public enum attribute_qualifier_kind {none_kind, return_kind, assembly_kind, param_kind, type_kind, field_kind, event_kind, property_kind, method_kind}
|
|
//Òèï ïåðåäà÷è ïàðàìåòðà - ïî ññûëêå èëè ïî çíà÷åíèþ.
|
|
public enum parameter_type {value,var,cnst};
|
|
|
|
//Òèï áàçîâîé ôóíêöèè.
|
|
public enum basic_function_type
|
|
{
|
|
none,
|
|
iadd,isub,imul,idiv,imod, igr,ism,igreq,ismeq,ieq,inoteq, ishl,ishr,ior,inot,ixor,iand, iunmin, iinc, idec, isinc, isdec, iassign, //signed integer (4 byte)
|
|
uiadd, uisub, uimul, uidiv, uimod, uigr, uism, uigreq, uismeq, uieq, uinoteq, uishl, uishr, uior, uinot, uixor, uiand, uiunmin, uiinc, uidec, uisinc, uisdec, uiassign, //unsigned integer (4 byte)
|
|
badd, bsub, bmul, bdiv, bmod, bgr, bsm, bgreq, bsmeq, beq, bnoteq, bshl, bshr, bor, bnot, bxor, band, bunmin, binc, bdec, bsinc, bsdec, bassign, //unsigned byte
|
|
sbadd, sbsub, sbmul, sbdiv, sbmod, sbgr, sbsm, sbgreq, sbsmeq, sbeq, sbnoteq, sbshl, sbshr, sbor, sbnot, sbxor, sband, sbunmin, sbinc, sbdec, sbsinc, sbsdec, sbassign, //signed byte
|
|
sadd,ssub,smul,sdiv,smod, sgr,ssm,sgreq,ssmeq,seq,snoteq, sshl,sshr,sor,snot,sxor,sand, sunmin, sinc, sdec, ssinc, ssdec, sassign, //short (2-byte)
|
|
usadd, ussub, usmul, usdiv, usmod, usgr, ussm, usgreq, ussmeq, useq, usnoteq, usshl, usshr, usor, usnot, usxor, usand, usunmin, usinc, usdec, ussinc, ussdec, usassign, //unsigned short (2 byte)
|
|
ladd,lsub,lmul,ldiv,lmod, lgr,lsm,lgreq,lsmeq,leq,lnoteq, lshl,lshr,lor,lnot,lxor,land, lunmin, linc, ldec, lsinc, lsdec, lassign, //long (8 byte)
|
|
uladd, ulsub, ulmul, uldiv, ulmod, ulgr, ulsm, ulgreq, ulsmeq, uleq, ulnoteq, ulshl, ulshr, ulor, ulnot, ulxor, uland, ulunmin, ulinc, uldec, ulsinc, ulsdec, ulassign, //unsigned long (8 byte)
|
|
fadd,fsub,fmul,fdiv, fgr,fsm,fgreq,fsmeq,feq,fnoteq, funmin, fassign,//float
|
|
dadd,dsub,dmul,ddiv, dgr,dsm,dgreq,dsmeq,deq,dnoteq, dunmin, dassign,//double
|
|
boolgr,boolsm,boolgreq,boolsmeq,booleq,boolnoteq,boolor,boolnot,boolxor,booland, boolassign, //boolean
|
|
chargr,charsm,chargreq,charsmeq,chareq,charnoteq, cinc, cdec, csinc, csdec, charassign, //char
|
|
chartous,chartoi,chartoui,chartol,chartoul,chartof,chartod, chartob,chartosb,chartos,
|
|
btos,btous,btoi,btoui,btol,btoul,btof,btod, btosb,btochar, //byte to ...
|
|
sbtos,sbtoi,sbtol,sbtof,sbtod, sbtob,sbtous,sbtoui,sbtoul,sbtochar,//signed byte to short, int, long, float, double
|
|
stoi,stol,stof,stod, stob,stosb,stous,stoui,stoul,stochar, //short to ...
|
|
ustoi,ustoui,ustol,ustoul,ustof,ustod, ustob,ustosb,ustos,ustochar, //unsigned short to ...
|
|
itol,itof,itod, itob,itosb,itos,itous,itoui,itoul,itochar, //integer to ...
|
|
uitol,uitoul, uitob,uitosb,uitos,uitous,uitoi,uitof,uitod,uitochar, //uint to ...
|
|
ltof,ltod, ltob,ltosb,ltos,ltous,ltoi,ltoui,ltoul,ltochar, //long to ...
|
|
ultob,ultosb,ultos,ultous,ultoi,ultoui,ultol,ultochar,ultof,ultod, //ulong to ...
|
|
ftod, ftob,ftosb,ftos,ftous,ftoi,ftoui,ftol,ftoul,ftochar, //float to ...
|
|
dtob,dtosb,dtos,dtous,dtoi,dtoui,dtol,dtoul,dtof, dtochar,
|
|
objassign,objeq,objnoteq, //ïðèñâàèâàíèå è ýêâèâàëåíòíîñòü îáúåêòîâ ïî ññûëêå.
|
|
//write,writei,writed,writec,writeb,read,readi,readd,readc,readb,expd,absd,absi //temporary functions (Íóæíû òîëüêî íà íà÷àëüíîì ýòàïå îòëàäêè. Ïîòîì îáÿçàòåëüíî óäàëèòü.)
|
|
objtoobj, boolinc, booldec, boolsinc, boolsdec, booltoi, enumgr, enumgreq, enumsm, enumsmeq,
|
|
booltob, booltosb, booltos, booltous, booltoui, booltol, booltoul
|
|
};
|
|
|
|
public enum runtime_statement_type { invoke_delegate, ctor_delegate, begin_invoke_delegate, end_invoke_delegate };
|
|
|
|
public enum generic_parameter_kind { gpk_none, gpk_class, gpk_value };
|
|
|
|
//Äîêóìåíò â êîòîðîì îïèñàí ýòîò óçåë.
|
|
public interface IDocument
|
|
{
|
|
//Ïîëíûé ïóòü ê ôàéëó.
|
|
string file_name
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Äîêóìåíò è ïîçèöèÿ â êîòîðîé îïèñàí ýòîò óçåë.
|
|
public interface ILocation
|
|
{
|
|
//Ñòðîêà, â êîòîðîé ðàñïîëîãàåòñÿ íà÷àëî äàííîãî ýëåìåíòà.
|
|
int begin_line_num
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñòîëáåö, â êîòîðîé ðàñïîëîãàåòñÿ íà÷àëî äàííîãî ýëåìåíòà.
|
|
int begin_column_num
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñòðîêà, â êîòîðîé ðàñïîëîãàåòñÿ êîíåö äàííîãî ýëåìåíòà.
|
|
int end_line_num
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñòîëáåö, â êîòîðîé ðàñïîëîãàåòñÿ êîíåö äàííîãî ýëåìåíòà.
|
|
int end_column_num
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Äîêóìåíò, â êîòîðîì îïðåäåëåí äàííûé ýëåìåíò äåðåâà.
|
|
IDocument document
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ILocated
|
|
{
|
|
ILocation Location
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ âñåõ èíòåðôåéñîâ óçëîâ äåðåâà.
|
|
public interface ISemanticNode
|
|
{
|
|
void visit(ISemanticVisitor visitor);
|
|
}
|
|
|
|
//Áàçîâûé êëàññ, äëÿ ïåðäñòàâëåíèÿ îïðåäåëåíèé â ïðîãðàììå (îïðåäåëåíèé òèïîâ, ïåðåìåííûõ è ò.ä.). Íèêîãäà íå ñîçäàåòñÿ.
|
|
public interface IDefinitionNode : ISemanticNode
|
|
{
|
|
string Documentation
|
|
{
|
|
get;
|
|
}
|
|
IAttributeNode[] Attributes
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ êëàññîâ, êîòîðûå îïèñûâàþò òèïû. Íèêîãäà íå ñîçäàåòñÿ.
|
|
public interface ITypeNode : IDefinitionNode
|
|
{
|
|
//Âèä óçëà - áàçîâûé(basic), îáû÷íûé (common) èëè ýêñïîðòèðóåìûé (compiled).
|
|
node_kind node_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èìÿ òèïà. Äëÿ ÿçûêîâ íå ÷óâñòâèòåëüíûõ ê ðåãèñòðàì õðàíèò èìÿ â òîì âèäå, â êàêîì òèï îáúÿâëåí.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Áàçîâûé òèï äëÿ äàííîãî òèïà. Äëÿ object-à =null.
|
|
ITypeNode base_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_value_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
type_special_kind type_special_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode element_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//ssyy
|
|
bool is_class
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool IsInterface
|
|
{
|
|
get;
|
|
//set;
|
|
}
|
|
|
|
bool IsAbstract
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool IsEnum
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool IsDelegate
|
|
{
|
|
get;
|
|
}
|
|
|
|
List<ITypeNode> ImplementingInterfaces
|
|
{
|
|
get;
|
|
}
|
|
|
|
//ßâëÿåòñÿ ëè generic-ïàðàìåòðîì
|
|
bool is_generic_parameter
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_generic_type_definition
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_generic_type_instance
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Çàâèñèò ëè îò íåêîòîðîãî íåîïðåäåëåííîãî òèïà
|
|
bool depended_from_indefinite
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Îïèñàíèå generic-òèïà, ñîäåðæàùåå äàííûé ïàðàìåòð
|
|
ICommonTypeNode generic_type_container
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonFunctionNode common_generic_function_container
|
|
{
|
|
get;
|
|
}
|
|
//\ssyy
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ áàçîâûõ òèïîâ.
|
|
//Ïðè ãåíåðàöèè .Net êîäà ýòîò êëàññ íå íóæåí. Îí ìîæåò ïðèãîäèòñÿ, íàïðèìåð äëÿ ãåíåðàöèè ìàøèííîãî êîäà.
|
|
//Òàì îí ìîæåò áûòü èñïîëüçîâàí, íàïðèìåð äëÿ ïðåäñòàâëåíèÿ öåëûõ ÷èñåë.
|
|
//Õîòÿ âîçìîæíî â ýòîì ñëó÷àå óäîáíåå èñïîëüçîâàòü compiled_type_node.
|
|
//Äëÿ íåãî ìîãóò áûòü íå îïðåäåëåíû ñâîéñòâà name è base_type.
|
|
//Â îáùåì êîãäà ïîíàäîáèòñÿ, òîãäà è áóäåì äóìàòü. Ïîêà ýòîò èíòåðôåéñ íèãäå íå äîëæåí èñïîëüçîâàòüñÿ.
|
|
public interface IBasicTypeNode : ITypeNode
|
|
{
|
|
|
|
}
|
|
|
|
public interface IUnsizedArray : ITypeNode
|
|
{
|
|
ITypeNode element_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Ñèíîíèìû òèïîâ, îïðåäåëÿåìûå ïîëüçîâàòåëåì â ïðîãðàììå.
|
|
public interface ITypeSynonym : IDefinitionNode, ILocated
|
|
{
|
|
//Èìÿ òèïà. Äëÿ ÿçûêîâ íå ÷óâñòâèòåëüíûõ ê ðåãèñòðàì õðàíèò èìÿ â òîì âèäå, â êàêîì òèï îáúÿâëåí.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï, êîòîðîìó äà¸òñÿ ñèíîíèì
|
|
ITypeNode original_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
}
|
|
|
|
public interface ITemplateClass : IDefinitionNode
|
|
{
|
|
byte[] serialized_tree
|
|
{
|
|
get;
|
|
}
|
|
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ generic-òèïîâ
|
|
public interface IGenericInstance
|
|
{
|
|
List<ITypeNode> generic_parameters
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ generic-èíñòàíöèé
|
|
public interface IGenericTypeInstance: IGenericInstance, ICommonTypeNode
|
|
{
|
|
ITypeNode original_generic
|
|
{
|
|
get;
|
|
}
|
|
|
|
System.Collections.Hashtable used_members
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICommonGenericTypeInstance : IGenericTypeInstance
|
|
{
|
|
}
|
|
|
|
public interface ICompiledGenericTypeInstance : IGenericTypeInstance
|
|
{
|
|
}
|
|
|
|
public interface IGenericFunctionInstance : IGenericInstance, ICommonFunctionNode
|
|
{
|
|
IFunctionNode original_function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICompiledGenericMethodInstance : IGenericFunctionInstance, ICommonMethodNode
|
|
{
|
|
}
|
|
|
|
//Îïèñûâåò îáû÷íûå òèïû, îïðåäåëÿåìûå ïîëüçîâàòåëåì â ïðîãðàììå.
|
|
public interface ICommonTypeNode : ITypeNode, INamespaceMemberNode, ILocated
|
|
{
|
|
bool IsSealed
|
|
{
|
|
get;
|
|
}
|
|
//Òèï public èëè internal.
|
|
type_access_level type_access_level
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ìåòîäû òèïà.
|
|
ICommonMethodNode[] methods
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ïîëÿ òèïà.
|
|
ICommonClassFieldNode[] fields
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñâîéñòâà òèïà.
|
|
ICommonPropertyNode[] properties
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êîíñòàíòû, îïðåäåëåííûå â òèïå.
|
|
IClassConstantDefinitionNode[] constants
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonEventNode[] events
|
|
{
|
|
get;
|
|
}
|
|
|
|
IPropertyNode default_property
|
|
{
|
|
get;
|
|
}
|
|
|
|
IConstantNode lower_value
|
|
{
|
|
get;
|
|
}
|
|
|
|
IConstantNode upper_value
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonMethodNode static_constructor
|
|
{
|
|
get;
|
|
}
|
|
|
|
int rank
|
|
{
|
|
get;
|
|
}
|
|
|
|
//(ssyy) ßâëÿåòñÿ ëè îïèñàíèåì generic-òèïà
|
|
bool is_generic_type_definition
|
|
{
|
|
get;
|
|
}
|
|
|
|
List<ICommonTypeNode> generic_params
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonClassFieldNode runtime_initialization_marker
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool has_static_constructor
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ òèïîâ, ýêñïîðòèðóåìûõ èç ñáîðêè.
|
|
//Äëÿ ïðåäñòàâëåíèÿ îòêîìïèëèðîâàííûõ òèïîâ ÿ îáðàùàþñü íåïîñðåäñòâåííî ê System.Reflection.
|
|
//Ýòî çàâÿçûâàåò íàøó ñèñòåìó íà .Net. Ìîæíî èçáàâèòñÿ îò ýòîãî ñ ïîìîùüþ ââåäåíèÿ äîïîëíèòåëüíîãî óðîâíÿ àáñòðàêöèè.
|
|
//Äëÿ ýòîãî íóæíî îïðåäåëèòü, êàêèå äàííûå íàì íóæíû îò îòêîìïèëèðîâàííûõ òèïîâ, è ñäåëàòü åùå îäíó ïðîñëîéêó
|
|
//ìåæäó System.Reflection è íàøèìè òèïàìè. Òîãäà ïðè ãåíåðàöèè êîäà ïîä äðóãóþ ïëàòôîðìó (íàïðèìåð ìàøèííîãî êîäà)
|
|
//íóæíî áóäåò òîëüêî ïðèâÿçàòü ïðîñëîéêó ê äðóãîìó èñòî÷íèêó äàííûõ. Íàïðèìåð, èíôîðìàöèÿ î òèïàõ áóäåò
|
|
//áðàòüñÿ íå èç ñáîðîê, à èç dll-áèáëèîòåê. ß íå ìîãó ñåé÷àñ ñäåëàòü ýòó ïðîñëîéêó, ò.ê. ÿ ïîêà íå îïðåäåëèë
|
|
//êàêèå çàïðîñû íóæíû ê îòêîìïèëèðîâàííûì ìîäóëÿì. Ïîýòîìó ïîêà ÿ èñïîëüçóþ System.Reflection â êîòîðîì
|
|
//âðîäå âñå åñòü. Ïîòîì íóæíî áóäåò îáñóäèòü âîïðîñ ñîçäàíèÿ ýòîé ïðîñëîéêè.
|
|
public interface ICompiledTypeNode : ITypeNode
|
|
{
|
|
//Îòêîìïèëèðîâàííûé òèï.
|
|
System.Type compiled_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
int rank
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé èíäåêñèðóåìûé ñ 0 ìàññèâ.
|
|
public interface IRefTypeNode : ITypeNode
|
|
{
|
|
ITypeNode pointed_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IShortStringTypeNode : ITypeNode
|
|
{
|
|
int Length
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ISimpleArrayNode : ITypeNode
|
|
{
|
|
int length
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode element_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ISimpleArrayIndexingNode : IAddressedExpressionNode
|
|
{
|
|
IExpressionNode array
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode[] indices
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode index
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ statement-îâ. Îáúåêòû, ðåàëèçóþùèå òîëüêî ýòîò èíòåðôåéñ íèãäå íå äîëæíû ñîçäàâàòüñÿ.
|
|
//Äîëæíû ñîçäàâàòüñÿ êëàññû, ðåàëèçóþùèå èíòåðôåéñû ïðîèçâîäíûå îò äàííîãî èíòåðôåéñà.
|
|
//Çâó÷èò î÷åíü çàïóòàíî, íî âîáùåì òî, ÷òî íàïèñàíî âûøå íå î÷åíü âàæíî :-).
|
|
public interface IStatementNode : ISemanticNode, ILocated
|
|
{
|
|
|
|
}
|
|
|
|
public interface IRuntimeManagedMethodBody : IStatementNode
|
|
{
|
|
runtime_statement_type runtime_statement_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ âûðàæåíèé.
|
|
public interface IExpressionNode : IStatementNode
|
|
{
|
|
//Òèï âûðàæåíèÿ.
|
|
ITypeNode type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ âûçîâîâ ôóíêöèé. Íèãäå íå ñîçäàåòñÿ.
|
|
public interface IFunctionCallNode : IExpressionNode
|
|
{
|
|
//Ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ. Êîëè÷åñòâî è òèïû ôîðìàëüíûõ è ôàêòè÷åñêèõ ïàðàìåòðîâ ñâåðÿåòñÿ
|
|
//íà ýòàïå ïîñòðîåíèÿ ñåìàíòè÷åñêîãî äåðåâà. Ïðè íåîáõîäèìîñòè ïðè ïîñòðîåíèè ñåìàíòè÷åñêîãî äåðåâà
|
|
//âñòàâëÿþòñÿ óçëû ïðåîáðûçîâàíèÿ òèïîâ.
|
|
IExpressionNode[] real_parameters
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Âûçûâàåìûé ìåòîä.
|
|
IFunctionNode function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//ssyy
|
|
//Íóæíî äëÿ ãåíåðàöèè óíàñëåäîâàííûõ èíòåðôåéñíûõ ôóíêöèé
|
|
bool last_result_function_call
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
//\ssyy
|
|
|
|
}
|
|
|
|
//Âûçîâ áàçîâîãî ìåòîäà.
|
|
public interface IBasicFunctionCallNode : IFunctionCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
IBasicFunctionNode basic_function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface INonStaticMethodCallNode : IFunctionCallNode
|
|
{
|
|
bool virtual_call
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
}
|
|
|
|
//Âûçîâ ôóíêöèè, îïðåäåëåííîé â ïðîñòðàíñòâå èìåí.
|
|
public interface ICommonNamespaceFunctionCallNode : IFunctionCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ICommonNamespaceFunctionNode namespace_function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Âûçîâ ôóíêöèè, îïðåäåëåííîé â äðóãîé ôóíêöèè.
|
|
public interface ICommonNestedInFunctionFunctionCallNode : IFunctionCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ICommonNestedInFunctionFunctionNode common_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñòàòè÷åñêàÿ ãëóáèíà âëîæåííîé ôóíêöèè.
|
|
int static_depth
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Âûçîâ ìåòîäà êëàññà.
|
|
public interface ICommonMethodCallNode : INonStaticMethodCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ICommonMethodNode method
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ýêçåìïëÿð êëàññà, äàííûé ìåòîä êîòîðîãî íóæíî âûçâàòü.
|
|
IExpressionNode obj
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Óçåë, ñîîòâåòñòâóþùèé óêàçàòåëþ this â ïðîãðàììå.
|
|
public interface IThisNode : IExpressionNode
|
|
{
|
|
}
|
|
|
|
public interface IAsNode : IExpressionNode
|
|
{
|
|
IExpressionNode left
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode right
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IIsNode : IExpressionNode
|
|
{
|
|
IExpressionNode left
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode right
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ISizeOfOperator : IExpressionNode
|
|
{
|
|
ITypeNode oftype
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ITypeOfOperator : IExpressionNode
|
|
{
|
|
ITypeNode oftype
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Âûçîâ ñòàòè÷åêîãî ìåòîäà êëàññà.
|
|
public interface ICommonStaticMethodCallNode : IFunctionCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ICommonMethodNode static_method
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï, ñòàòè÷åñêèé ìåòîä êîòîðîãî âûçûâàåì.
|
|
ICommonTypeNode common_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Âûçîâ êîíñòðóêòîðà common-êëàññà.
|
|
public interface ICommonConstructorCall : ICommonStaticMethodCallNode
|
|
{
|
|
//ssyy
|
|
bool new_obj_awaited();
|
|
//\ssyy
|
|
}
|
|
|
|
//Âûçîâ îòêîìïèëèðîâàííîãî ìåòîäà.
|
|
public interface ICompiledMethodCallNode : INonStaticMethodCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ICompiledMethodNode compiled_method
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ýêçåìïëÿð êëàññà, äàííûé ìåòîä êîòîðîãî íóæíî âûçâàòü.
|
|
IExpressionNode obj
|
|
{
|
|
get;
|
|
}
|
|
|
|
}
|
|
|
|
//Âûçîâ ñòàòè÷åñêîãî ìåòîäà, îòêîìïòëèðîâàííîãî êëàññà.
|
|
public interface ICompiledStaticMethodCallNode : IFunctionCallNode
|
|
{
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ICompiledMethodNode static_method
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï, ñòàòè÷åñêèé ìåòîä êîòîðîãî ìû âûçûâàåì.
|
|
ICompiledTypeNode compiled_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode[] template_parametres
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Âûçîâ êîíñòðóêòîðà îòêîìïèëèðîâàííîãî ìåòîäà.
|
|
public interface ICompiledConstructorCall : IFunctionCallNode
|
|
{
|
|
ICompiledConstructorNode constructor
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICompiledTypeNode compiled_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//ssyy
|
|
bool new_obj_awaited();
|
|
//\ssyy
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ îïèñàíèÿ ôóíêöèé. Íèêîãäà íå ñîçäàåòñÿ.
|
|
public interface IFunctionNode : IDefinitionNode
|
|
{
|
|
//Âèä óçëà - áàçîâûé (basic), îáû÷íûé (common) èëè ýêñïîðòèðóåìûé (compiled).
|
|
node_kind node_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ôóíêöèè.
|
|
IParameterNode[] parameters
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï âîçâðàùàåìîãî çíà÷åíèÿ ôóíêöèè.
|
|
ITypeNode return_value_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èìÿ ôóíêöèè. Äëÿ ÿçûêîâ íå ÷óâñòâèòåëüíûõ ê ðåãèñòðó - â òîì âèäå, â êîòîðîì ôóíêöèÿ îïðåäåëåíà.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ðàñïîëîæåíèå ôóíêöèè - â ôóíêöèè, â êëàññå, â ïðîñòðàíñòâå èìåí.
|
|
node_location_kind node_location_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
//ßâëÿåòñÿ ëè generic-ôóíêöèåé
|
|
bool is_generic_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//×èñëî òèïîâ-ïàðàìåòðîâ generic-ôóíêöèè. 0 äëÿ íå-generic.
|
|
int generic_parameters_count
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ ÷ëåíà êëàññà.
|
|
public interface IClassMemberNode
|
|
{
|
|
//Òèï, ñîäåðæàùèé ýòîò ÷ëåí êëàññà.
|
|
ITypeNode comperehensive_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñòàòè÷åñêèé, îáû÷íûé èëè âèðòóàëüíûé ìåòîä.
|
|
polymorphic_state polymorphic_state
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Óðîâåíü äîñòóïà ê ÷ëåíó êëàññà.
|
|
field_access_level field_access_level
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ ÷ëåíà îòêîìïèëèðîâàííîãî êëàññà.
|
|
public interface ICompiledClassMemberNode : IClassMemberNode
|
|
{
|
|
//Òèï, ñîäåðæàùèé ÷ëåí êëàññà.
|
|
ICompiledTypeNode comprehensive_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ ÷ëåíà îáû÷íîãî êëàññà.
|
|
public interface ICommonClassMemberNode : IClassMemberNode
|
|
{
|
|
//Òèï, ñîäåðæàùèé ÷ëåí êëàññà.
|
|
ICommonTypeNode common_comprehensive_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ ïåðåìåííîé èëè ôóíêöèè, îïðåäåëåííîé âíóòðè ôóíêöèè.
|
|
public interface IFunctionMemberNode
|
|
{
|
|
//Ôóíêöèÿ, ñîäåðæàùàÿ ýòîò îáüúåêò.
|
|
ICommonFunctionNode function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ ïåðåìåííîé èëè ôóíêöèè, îïðåäåëåííîé â ïðîñòðàíñòâå èìåí.
|
|
public interface INamespaceMemberNode
|
|
{
|
|
//Ïðîñòðàíñòâî èìåí, â êîòîðîì îïðåäåëåí ýëåìåíò.
|
|
ICommonNamespaceNode comprehensive_namespace
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êëàññ äëÿ îïèñàíèÿ áàçîâûõ, íèãäå íå îïðåäåëåííûõ ôóíêöèé (íàïðèìåð, ñëîæåíèå äâóõ öåëûõ ÷èñåë).
|
|
public interface IBasicFunctionNode : IFunctionNode
|
|
{
|
|
//Êàêàÿ èìåííî ýòî áàçîâàÿ ôóíêöèÿ.
|
|
basic_function_type basic_function_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public enum SpecialFunctionKind
|
|
{
|
|
None, New, Dispose, NewArray
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ ôóíêöèè, îïðåäåëÿåìîé ïîëüçîâàòåëåì.
|
|
public interface ICommonFunctionNode : IFunctionNode, ILocated
|
|
{
|
|
SpecialFunctionKind SpecialFunctionKind
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_overload
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñïèñîê ïåðåìåííûõ, îïðåäåëÿåìûõ â ôóíêöèè.
|
|
ILocalVariableNode[] var_definition_nodes
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñïèñîê âëîæåííûõ ôóíêöèé.
|
|
ICommonNestedInFunctionFunctionNode[] functions_nodes
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êîä ôóíêöèè.
|
|
IStatementNode function_code
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ïåðåìåííàÿ, êîòîðàÿ ñîäåðæèò âîçâðàùàåìîå çíà÷åíèå ôóíêöèè. Äëÿ ïðîöåäóð - null.
|
|
ILocalVariableNode return_variable
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êîíñòàíòû, îïðåäåëåííûå â ôóíêöèè.
|
|
ICommonFunctionConstantDefinitionNode[] constants
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Generic-ïàðàìåòðû ôóíêöèè
|
|
List<ICommonTypeNode> generic_params
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Ôóíêöèÿ, îïðåäåëåííàÿ íåïîñðåäñòâåííî â ïðîñòðàíñòâå èìåí.
|
|
public interface ICommonNamespaceFunctionNode : ICommonFunctionNode, INamespaceMemberNode
|
|
{
|
|
//Ïðñòðàíñòâî èìåí, â êîòîðîì îïðåäåëåíà ýòà ôóíêöèÿ.
|
|
ICommonNamespaceNode namespace_node
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode ConnectedToType
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Ôóíêöèÿ, îïðåäåëåííàÿ â äðóãîé ôóíêöèè.
|
|
public interface ICommonNestedInFunctionFunctionNode : ICommonFunctionNode, IFunctionMemberNode
|
|
{
|
|
|
|
}
|
|
|
|
//Ìåòîä êëàññà, îïðåäåëÿåìûé ïîëüçîâàòåëåì.
|
|
public interface ICommonMethodNode : ICommonFunctionNode, ICommonClassMemberNode
|
|
{
|
|
bool is_constructor
|
|
{
|
|
get;
|
|
}
|
|
|
|
IFunctionNode overrided_method
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_final
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
bool newslot_awaited
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
}
|
|
|
|
//Êëàññ äëÿ îïèñàíèÿ ýêñïîðòèðóåìûõ (compiled) ôóíêöèé.
|
|
public interface ICompiledMethodNode : IFunctionNode, ICompiledClassMemberNode
|
|
{
|
|
//Îòêîìïèëèðîâàííûé ìåòîä.
|
|
System.Reflection.MethodInfo method_info
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_extension
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Âûçîâ êîíñòðóêòîðà îòêîìïèëèðîâàííîãî òèïà.
|
|
public interface ICompiledConstructorNode : IFunctionNode, ICompiledClassMemberNode
|
|
{
|
|
System.Reflection.ConstructorInfo constructor_info
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ êîíñòðóêöèè if.
|
|
public interface IIfNode : IStatementNode
|
|
{
|
|
//Óñëîâèå.
|
|
IExpressionNode condition
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òåëî then.
|
|
IStatementNode then_body
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òåëî else. Åñëè if áåç then ýòî ñâîéñòâî = null.
|
|
IStatementNode else_body
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ êîíñòðóêöèè while.
|
|
public interface IWhileNode : IStatementNode
|
|
{
|
|
//Óñëîâèå.
|
|
IExpressionNode condition
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òåëî while.
|
|
IStatementNode body
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ êîíñòðóêöèè repeat.
|
|
public interface IRepeatNode : IStatementNode
|
|
{
|
|
//Òåëî do .. while (repeat .. until).
|
|
IStatementNode body
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Óñëîâèå.
|
|
IExpressionNode condition
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êëàññ äëÿ îïèñàíèÿ êîíñòðóêöèè for.
|
|
//For - C++/C# - îâñêèé. Äëÿ ìîäåëèðîâàíèÿ ïàñêàëåâñêîãî for îí ïðåîáðàçóåòñÿ â ýòó êîíñòðóêöèþ.
|
|
public interface IForNode : IStatementNode
|
|
{
|
|
//Èíèöèàëèçàöèÿ ïåðåìåííûõ öèêëà.
|
|
IStatementNode initialization_statement
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Óñëîâèå ïðîäîëæåíèÿ öèêëà.
|
|
IExpressionNode while_expr
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode init_while_expr
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èçìåíåíèå ñ÷åò÷èêîâ öèêëà.
|
|
IStatementNode increment_statement
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òåëî öèêëà.
|
|
IStatementNode body
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool IsBoolCycle
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public interface IWhileBreakNode : IStatementNode
|
|
{
|
|
IWhileNode while_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IRepeatBreakNode : IStatementNode
|
|
{
|
|
IRepeatNode repeat_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IForBreakNode : IStatementNode
|
|
{
|
|
IForNode for_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IForeachBreakNode : IStatementNode
|
|
{
|
|
IForeachNode foreach_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
|
|
public interface IExitProcedure : IStatementNode
|
|
{
|
|
}
|
|
|
|
|
|
public interface IWhileContinueNode : IStatementNode
|
|
{
|
|
IWhileNode while_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IRepeatContinueNode : IStatementNode
|
|
{
|
|
IRepeatNode repeat_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IForContinueNode : IStatementNode
|
|
{
|
|
IForNode for_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IForeachContinueNode : IStatementNode
|
|
{
|
|
IForeachNode foreach_node
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IExternalStatementNode : IStatementNode
|
|
{
|
|
string module_name
|
|
{
|
|
get;
|
|
}
|
|
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IPInvokeStatementNode : IStatementNode
|
|
{
|
|
|
|
}
|
|
|
|
public interface ISwitchNode : IStatementNode
|
|
{
|
|
IExpressionNode case_expression
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICaseVariantNode[] case_variants
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode default_statement
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICaseVariantNode : IStatementNode
|
|
{
|
|
IIntConstantNode[] elements
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICaseRangeNode[] ranges
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode statement_to_execute
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICaseRangeNode : IStatementNode
|
|
{
|
|
IIntConstantNode lower_bound
|
|
{
|
|
get;
|
|
}
|
|
|
|
IIntConstantNode high_bound
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
/*// switch.
|
|
public interface ISwitchNode : IStatementNode
|
|
{
|
|
}
|
|
|
|
//Îäèí èç âàðèàíòîâ êîíñòðàêöèè swithc.
|
|
public interface ICaseVariantNode : IStatementNode
|
|
{
|
|
//Âûðàæåíèÿ, ïðè êîòîðûõ íóæíî èñïîëãèòü êîä, ñîîòâåòñòâóþùèé ýòîìó óçëó.
|
|
IExpressionNode[] expressions
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Äèàïàçîíû, ïðè ïîïàäàíèè â êîòîðûå íóæíî èñïîëíèòü êîä, ñîîòâåòñòâóþùèé ýòîìó óçëó.
|
|
IRangExpression[] ranges
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êîä ýòîãî óçëà.
|
|
IStatementNode statement
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IRangeExpression : IExpressionNode
|
|
{
|
|
IExpressionNode lower_bound
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode upper_bound
|
|
{
|
|
get;
|
|
}
|
|
}*/
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ ñïèñêà statement-îâ.
|
|
public interface IStatementsListNode : IStatementNode
|
|
{
|
|
ILocalBlockVariableNode[] LocalVariables
|
|
{
|
|
get;
|
|
}
|
|
//Ñïèñîê statement-îâ.
|
|
IStatementNode[] statements
|
|
{
|
|
get;
|
|
}
|
|
//Ïîëîæåíèå ëåâîé ëîãè÷åñêîé ñêîáêè
|
|
ILocation LeftLogicalBracketLocation
|
|
{
|
|
get;
|
|
}
|
|
//Ïîëîæåíèå ïðàâîé ëîãè÷åñêîé ñêîáêè
|
|
ILocation RightLogicalBracketLocation
|
|
{
|
|
get;
|
|
}
|
|
|
|
}
|
|
|
|
public interface IThrowNode : IStatementNode
|
|
{
|
|
IExpressionNode exception_expresion
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ITryBlockNode : IStatementNode
|
|
{
|
|
IStatementNode TryStatements
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode FinallyStatements
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExceptionFilterBlockNode[] ExceptionFilters
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IExceptionFilterBlockNode : IStatementNode
|
|
{
|
|
ITypeNode ExceptionType
|
|
{
|
|
get;
|
|
}
|
|
|
|
ILocalBlockVariableReferenceNode ExceptionInstance
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode ExceptionHandler
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
/*
|
|
public interface ICatchNode : IStatementNode
|
|
{
|
|
ISemanticNode[] catch_body
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ITryStatementNode : IStatementNode
|
|
{
|
|
IStatementNode[] try_body
|
|
{
|
|
get;
|
|
}
|
|
|
|
|
|
}
|
|
*/
|
|
|
|
//Óçåë ïðîñòðàíñòâà èìåí.
|
|
public interface INamespaceNode : IDefinitionNode
|
|
{
|
|
string namespace_name
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Óçåë ïðîñòðàíñòâà èìåí, îïðåäåëåííîãî ïîëüçîâàòåëåì.
|
|
public interface ICommonNamespaceNode : INamespaceNode, ILocated
|
|
{
|
|
//Ïðîñòðàíñòâà èìåí, âëîæåííûå â ýòî ïðîñòðàíñòâî èìåí.
|
|
ICommonNamespaceNode[] nested_namespaces
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ïðîñòðàíñòâî èìåí, â êîòîðîå âëîæåííî ýòî ïðîñòðàíñòâî èìåí.
|
|
INamespaceNode comprehensive_namespace
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèïû, îïèñàííûå â namespace.
|
|
ICommonTypeNode[] types
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeSynonym[] type_synonims
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITemplateClass[] templates
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ïåðåìåííûå, îïèñàííûå â ýòîì namespace.
|
|
ICommonNamespaceVariableNode[] variables
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèè, îïèñàííûå â namespace.
|
|
ICommonNamespaceFunctionNode[] functions
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êîíñòàíòû, îïèñàííûå â namespace. Îíè äîëæíû ýêñïîðòèðîâàòüñÿ êàê íèáóäü.
|
|
INamespaceConstantDefinitionNode[] constants
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonNamespaceEventNode[] events
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool IsMain
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Îòêîìïèëèðîâàííîå ïðîñòðàíñòâî èìåí.
|
|
public interface ICompiledNamespaceNode : INamespaceNode
|
|
{
|
|
|
|
}
|
|
|
|
/// Áàçîâûé èíòåðôåéñ äëÿ ïðîãðàìì è dll.
|
|
public interface IProgramBase : IDefinitionNode, ILocated
|
|
{
|
|
//Ïðîñòðàíñòâà èìåí, ñîäåðæàùèåñÿ â ïðîãðàììå èëè dll.
|
|
ICommonNamespaceNode[] namespaces
|
|
{
|
|
get;
|
|
}
|
|
|
|
string[] UsedNamespaces
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Óçåë dll áèáëèîòåêè.
|
|
public interface IDllNode : IProgramBase
|
|
{
|
|
//Ìåòîä èíèöèàëèçàöèè dll.
|
|
ICommonNamespaceFunctionNode initialization_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ìåòîä ôèíàëèçàöèè dll.
|
|
ICommonNamespaceFunctionNode finalization_function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êîðíåâîé óçåë ïðîãðàììû.
|
|
public interface IProgramNode : IProgramBase
|
|
{
|
|
//Ãëàâíàÿ ôóíêöèÿ. Åå âûïîëíåíèå ðàâíîñèëüíî âûïîëíåíèþ ïðîãðàììû.
|
|
//Îíà âêëþ÷àåò âûçîâû ìåòîäîâ èíèöèàëèçàöèè ìîäóëåé (â íà÷àëå), âûïîëíåíèå îñíîâíîé ïðîãðàììû
|
|
//è âûçîâû ìåòîäîâ ôèíàëèçàöèè ìîäóëåé.
|
|
ICommonNamespaceFunctionNode main_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èíñòàíöèè generic-òèïîâ, èñïîëüçóþùèåñÿ â ïðîãðàììå.
|
|
List<IGenericTypeInstance> generic_type_instances
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èíñòàíöèè generic-òèïîâ, èñïîëüçóþùèåñÿ â ïðîãðàììå.
|
|
List<IGenericFunctionInstance> generic_function_instances
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode InitializationCode
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Òèï âûðàæåíèé, êîòîðûå ìîãóò âîçâðàùàòü àäðåñ (íàïðèìåð ïåðåìåííàÿ).
|
|
public interface IAddressedExpressionNode : IExpressionNode
|
|
{
|
|
|
|
}
|
|
|
|
//Îïåðàòîð return.
|
|
public interface IReturnNode : IStatementNode
|
|
{
|
|
IExpressionNode return_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//ssyy äîáàâèë
|
|
//Îïåðàòîð return èç .ctor.
|
|
/*public interface ICtorReturnNode : IStatementNode
|
|
{
|
|
}*/
|
|
//\ssyy
|
|
|
|
public interface IReferenceNode : IAddressedExpressionNode
|
|
{
|
|
//Îïðåäåëåíèå ëîêàëüíîé ïåðåìåííîé.
|
|
IVAriableDefinitionNode Variable
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé îáðàùåíèå ê ëîêàëüíîé ïåðåìåííîé â òåëå ïðîãðàììû.
|
|
public interface ILocalVariableReferenceNode : IReferenceNode
|
|
{
|
|
//Îïðåäåëåíèå ëîêàëüíîé ïåðåìåííîé.
|
|
ILocalVariableNode variable
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ðàçíîñòü ñòàòè÷åñêèõ ãëóáèí, ìåæäó îïðåäåëåíèåì è âõîæäåíèåì.
|
|
int static_depth
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé îáðàùåíèå ê ëîêàëüíîé ïåðåìåííîé â áëîêå.
|
|
public interface ILocalBlockVariableReferenceNode : IReferenceNode
|
|
{
|
|
//Îïðåäåëåíèå ëîêàëüíîé ïåðåìåííîé.
|
|
ILocalBlockVariableNode Variable
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé îáðàùåíèå ê ïåðåìåííîé, îïðåäåëåííîé íåïîñðåäñòâåííî â namespace.
|
|
public interface INamespaceVariableReferenceNode : IReferenceNode
|
|
{
|
|
//Ïåðåìåííàÿ.
|
|
ICommonNamespaceVariableNode variable
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé îáðàùåíèå ê ïîëþ êëàññà.
|
|
public interface ICommonClassFieldReferenceNode : IReferenceNode
|
|
{
|
|
//Ïîëå êëàññà.
|
|
ICommonClassFieldNode field
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Îáúåêò êëàññà.
|
|
IExpressionNode obj
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé îáðàùåíèå ê ñòàòè÷åñêîìó ïîëþ êëàññà.
|
|
public interface IStaticCommonClassFieldReferenceNode : IReferenceNode
|
|
{
|
|
//Ñòàòè÷åñêîå ïîëå êëàññà.
|
|
ICommonClassFieldNode static_field
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êëàññ, ê ñòàòè÷åñêîìó ìåòîäó êîòîðîãî ìû îáðàùàåìñÿ.
|
|
ICommonTypeNode class_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Îáðàùåíèå ê ïîëþ îòêîìïèëèðîâàííîãî êëàññà.
|
|
public interface ICompiledFieldReferenceNode : IReferenceNode
|
|
{
|
|
//Ïîëå êëàññà.
|
|
ICompiledClassFieldNode field
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Îáúåêò êëàññà.
|
|
IExpressionNode obj
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé îáðàùåíèå ê ñòàòè÷åñêîìó ïîëþ îòêîìïèëèðîâàííîãî êëàññà.
|
|
public interface IStaticCompiledFieldReferenceNode : IReferenceNode
|
|
{
|
|
//Ïîëå êëàññà.
|
|
ICompiledClassFieldNode static_field
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Êëàññ, ê ñòàòè÷åñêîìó ïîëþ êîòîðîãî ìû îáðàùàåìñÿ.
|
|
ICompiledTypeNode class_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Îáðàùåíèå ê ïàðàìåòðó ìåòîäà.
|
|
public interface ICommonParameterReferenceNode : IReferenceNode
|
|
{
|
|
//Ïàðàìåòð ìåòîäà, ê êîòîðîìó ìû îáðàùàåìñÿ.
|
|
ICommonParameterNode parameter
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ðàçíîñòü ñòàòè÷åñêèõ ãëóáèí, ìåæäó îáðàùåíèåì ê ïàðàìåòðó è ìåòîäîì â êîòîðîì îí îáúÿâëåí.
|
|
int static_depth
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé óçåë äëÿ ïðåäñòàâëåíèÿ êîíñòàíò â òåëå ïðîãðàììû (íå èìåíîâàííûõ êîíñòàíò, à ÷èñåë, ñòðîê è ò.ä.).
|
|
public interface IConstantNode : IExpressionNode
|
|
{
|
|
object value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ áóëåâñêèõ êîíñòàíò.
|
|
public interface IBoolConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
bool constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ byte êîíñòàíò.
|
|
public interface IByteConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
byte constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ signed byte êîíñòàíò.
|
|
public interface ISByteConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
sbyte constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ signed short êîíñòàíò.
|
|
public interface IShortConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
short constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ unsigned short êîíñòàíò.
|
|
public interface IUShortConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
ushort constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ int êîíñòàíò.
|
|
public interface IIntConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
int constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ unsigned int êîíñòàíò.
|
|
public interface IUIntConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
uint constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ long êîíñòàíò.
|
|
public interface ILongConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
long constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ unsigned long êîíñòàíò.
|
|
public interface IULongConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
ulong constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ float êîíñòàíò.
|
|
public interface IFloatConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
float constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ double êîíñòàíò.
|
|
public interface IDoubleConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
double constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ char êîíñòàíò (ýòîò êëàññ äëÿ 2-áàéòíûõ char - widechar â delphi).
|
|
public interface ICharConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
char constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ string-êîíñòàíò.
|
|
public interface IStringConstantNode : IConstantNode
|
|
{
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
string constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IEnumConstNode : IConstantNode
|
|
{
|
|
int constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IArrayConstantNode : IConstantNode
|
|
{
|
|
IConstantNode[] ElementValues
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode ElementType
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IArrayInitializer : IExpressionNode
|
|
{
|
|
IExpressionNode[] ElementValues
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode ElementType
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IRecordConstantNode : IConstantNode
|
|
{
|
|
IConstantNode[] FieldValues
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IRecordInitializer : IExpressionNode
|
|
{
|
|
IExpressionNode[] FieldValues
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICompiledStaticMethodCallNodeAsConstant : IConstantNode
|
|
{
|
|
ICompiledStaticMethodCallNode MethodCall
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICompiledStaticFieldReferenceNodeAsConstant : IConstantNode
|
|
{
|
|
IStaticCompiledFieldReferenceNode FieldReference
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICommonNamespaceFunctionCallNodeAsConstant : IConstantNode
|
|
{
|
|
ICommonNamespaceFunctionCallNode MethodCall
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IBasicFunctionCallNodeAsConstant : IConstantNode
|
|
{
|
|
IBasicFunctionCallNode MethodCall
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICompiledConstructorCallAsConstant : IConstantNode
|
|
{
|
|
ICompiledConstructorCall MethodCall
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
/*public interface IClassConstantNode : IConstantNode
|
|
{
|
|
|
|
}*/
|
|
|
|
/*//Óçåë äëÿ ïðåäñòàâëåíèÿ îïåðàòîðà ïðèñâàèâàíèÿ.
|
|
public interface IAssignNode : IExpressionNode
|
|
{
|
|
//×åìó ïðèñâàèâàíèåì.
|
|
IAddressedExpressionNode to
|
|
{
|
|
get;
|
|
}
|
|
|
|
//×òî ïðèñâàèâàåì.
|
|
IExpressionNode from
|
|
{
|
|
get;
|
|
}
|
|
}*/
|
|
|
|
//Áàçîâé èíòåðôåéñ äëÿ ôîðìàëüíûõ ïàðàìåòðîâ ôóíêöèé, ëîêàëüíûõ ïåðåìåííûõ, ãëîáàëüíûõ ïåðåìåííûõ ïðîãðàììû è ìîäóëÿ è ïîëåé êëàññà. Íèãäå íå ñîçäàåòñÿ.
|
|
public interface IVAriableDefinitionNode : IDefinitionNode
|
|
{
|
|
//Èìÿ ïåðåìåííîé.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï ïåðåìåííîé.
|
|
ITypeNode type
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode inital_value
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ðàïîëîæåíèå ïåðåìåííîé.
|
|
node_location_kind node_location_kind
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ ëîêàëüíûõ ïåðåìåííûõ.
|
|
public interface ILocalVariableNode : IVAriableDefinitionNode, IFunctionMemberNode, ILocated
|
|
{
|
|
//Èñïîëüçóåòñÿ, ëè ïåðåìåííàÿ âî âëîæåííûõ ôóíê÷èÿõ. Èñðîëüçóåòñÿ äëÿ îïòèìèçàöèè.
|
|
bool is_used_as_unlocal
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ ëîêàëüíûõ ïåðåìåííûõ.
|
|
public interface ILocalBlockVariableNode : IVAriableDefinitionNode, ILocated
|
|
{
|
|
IStatementsListNode Block
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé ãëîáàëüíóþ ïåðåìåííóþ, îïèñàííóþ â ìîäóëå èëè ïðîãðàììå.
|
|
public interface ICommonNamespaceVariableNode : IVAriableDefinitionNode, INamespaceMemberNode, ILocated
|
|
{
|
|
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ îïèñàíèÿ ïîëåé êëàññà.
|
|
public interface ICommonClassFieldNode: IVAriableDefinitionNode, ICommonClassMemberNode, ILocated
|
|
{
|
|
|
|
}
|
|
|
|
//Ïåðåìåííàÿ, îïðåäåëåííàÿ â îòêîìïèëèðîâàííîì êëàññå.
|
|
public interface ICompiledClassFieldNode : IVAriableDefinitionNode, ICompiledClassMemberNode
|
|
{
|
|
System.Reflection.FieldInfo compiled_field
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Áàçîâûé èíòåðôåéñ äëÿ èíòåðôåéñîâ, ïðåäñòàâëÿþùèõ ïàðàìåòðû áàçîâûõ, îáû÷íûõ è îòêîìïèëèðîâàííûõ ôóíêöèé.
|
|
public interface IParameterNode : IVAriableDefinitionNode
|
|
{
|
|
//Òèï ïàðàìåòðà.
|
|
parameter_type parameter_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèÿ, â êîòîðîé îïèñàí ýòîò ïðàìåòð.
|
|
IFunctionNode function
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_params
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool is_const
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode default_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ äëÿ ïðåäñòàâëåíèÿ ïàðàìåòðîâ common ôóíêöèé.
|
|
public interface ICommonParameterNode : IParameterNode, ILocated
|
|
{
|
|
//Ôóíêöèÿ, â êîòîðîé îïðåäåëåí ïàðàìåòåð.
|
|
ICommonFunctionNode common_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èñïîëüçóåòñÿ ëè ïàðàìåòð âî âëîæåííûõ ôóíêöèÿõ.
|
|
bool is_used_as_unlocal
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé ïàðàìåòðû áàçîâûõ ôóíêöèé.
|
|
public interface IBasicParameterNode : IParameterNode
|
|
{
|
|
|
|
}
|
|
|
|
//Èíòåðôåéñ, ïðåäñòàâëÿþùèé ïàðàìåòðû îòêîìïèëèðîàííûõ ôóíêöèé.
|
|
public interface ICompiledParameterNode : IParameterNode
|
|
{
|
|
//Ôóíêöèÿ, â êîòîðîé îïðåäåëåí ïàðàìåòåð.
|
|
ICompiledMethodNode compiled_function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Èíòåðôåéñ, îïèñûâàþùèé îïðåäåëåíèå êîíñòàíòû.
|
|
public interface IConstantDefinitionNode : IDefinitionNode
|
|
{
|
|
//Èìÿ êîíñòàíòû.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï êîíñòàíòû.
|
|
ITypeNode type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Çíà÷åíèå êîíñòàíòû.
|
|
IConstantNode constant_value
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êîíñòàíòà, îïðåäåëåííàÿ â êëàññå.
|
|
public interface IClassConstantDefinitionNode : IConstantDefinitionNode, IClassMemberNode, ILocated
|
|
{
|
|
|
|
}
|
|
|
|
public interface ICompiledClassConstantDefinitionNode : IConstantDefinitionNode, IClassMemberNode
|
|
{
|
|
ICompiledTypeNode comprehensive_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êîíñòàíòà, îïðåäåëåííàÿ â ïðîñòðàíñòâå èìåí.
|
|
public interface INamespaceConstantDefinitionNode : IConstantDefinitionNode, ILocated
|
|
{
|
|
ICommonNamespaceNode comprehensive_namespace
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êîíñòàíòà, îïðåäåëåííàÿ â ôóíêöèè.
|
|
public interface ICommonFunctionConstantDefinitionNode : IConstantDefinitionNode, ILocated
|
|
{
|
|
ICommonFunctionNode comprehensive_function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Êîíñòàíòà, îïðåäåëåííàÿ â îòêîìïèëèðîâàííîì òèïå.
|
|
public interface ICompiledConstantNode : IConstantDefinitionNode
|
|
{
|
|
ICompiledTypeNode comprehensive_type
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Óçåë, îïèñûâàþùèé ñâîéñòâî êëàññà. Íèêîãäà íå ñîçäàåòñÿ.
|
|
public interface IPropertyNode : IDefinitionNode
|
|
{
|
|
//Âèä îáúåêòà (basic, common, compiled).
|
|
node_kind node_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Èìÿ ñâîéñòâà.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï, êîòîðûé ñîäåðæèò ýòî ñâîéñòâî.
|
|
ITypeNode comprehensive_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï ñâîéñòâà.
|
|
ITypeNode property_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèÿ, êîòîðàÿ âîçâðàùàåò çíà÷åíèå ñâîéñòâà.
|
|
IFunctionNode get_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèÿ, êîòîðàÿ óñòàíàâëèâàåò çíà÷åíèå ñâîéñòâà.
|
|
IFunctionNode set_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
IParameterNode[] parameters
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
//Îïðåäåëÿåìîå ïîëüçîâàòåëåì ñâîéñòâî.
|
|
public interface ICommonPropertyNode : IPropertyNode, ICommonClassMemberNode, ILocated
|
|
{
|
|
//Òèï, êîòîðûé ñîäåðæèò ýòî ñâîéñòâî.
|
|
/*ICommonTypeNode common_comprehensive_type
|
|
{
|
|
get;
|
|
}*/
|
|
|
|
//Ôóíêöèÿ, êîòîðàÿ âîçâðàùàåò çíà÷åíèå ñâîéñòâà.
|
|
/*ICommonClassMemberNode get_common_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèÿ, êîòîðàÿ óñòàíàâëèâàåò çíà÷åíèå ñâîéñòâà.
|
|
ICommonClassMemberNode set_common_function
|
|
{
|
|
get;
|
|
}*/
|
|
}
|
|
|
|
//Áàçîâîå ñâîéñòâî. Ïîêà íèãäå íå íóæíî, íî äëÿ ðåàëèçàöèè ìàøèííîãî êîäà ìîæåò î÷åíü ïðèãîäèòñÿ.
|
|
public interface IBasicPropertyNode : IPropertyNode
|
|
{
|
|
|
|
}
|
|
|
|
//Ñâîéñòâî â îòêîìïèëèðîâàííîì òèïå.
|
|
public interface ICompiledPropertyNode : IPropertyNode, ICompiledClassMemberNode
|
|
{
|
|
//Ñâîéñòâî â ñáîðêå.
|
|
System.Reflection.PropertyInfo property_info
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï, êîòîðûé ñîäåðæèò ýòî ñâîéñòâî.
|
|
ICompiledTypeNode compiled_comprehensive_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèÿ, êîòîðàÿ âîçâðàùàåò çíà÷åíèå ñâîéñòâà.
|
|
ICompiledMethodNode compiled_get_method
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ôóíêöèÿ, êîòîðàÿ óñòàíàâëèâàåò çíà÷åíèå ñâîéñòâà.
|
|
ICompiledMethodNode compiled_set_method
|
|
{
|
|
get;
|
|
}
|
|
|
|
}
|
|
|
|
public interface IGetAddrNode : IExpressionNode
|
|
{
|
|
IExpressionNode addr_of_expr
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IDereferenceNode : IAddressedExpressionNode
|
|
{
|
|
IExpressionNode derefered_expr
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface INullConstantNode : IConstantNode
|
|
{
|
|
}
|
|
|
|
public interface IStatementsExpressionNode : IExpressionNode
|
|
{
|
|
IStatementNode[] statements
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode expresion
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IQuestionColonExpressionNode : IExpressionNode
|
|
{
|
|
IExpressionNode condition
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode ret_if_true
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode ret_if_false
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ILabelNode : IDefinitionNode, ILocated
|
|
{
|
|
//Èìÿ ìåòêè. Äëÿ ÿçûêîâ íå ÷óâñòâèòåëüíûõ ê ðåãèñòðàì õðàíèò èìÿ â òîì âèäå, â êàêîì òèï îáúÿâëåí.
|
|
string name
|
|
{
|
|
get;
|
|
}
|
|
|
|
//âñòðå÷åíà ëè ìåòêà â êîäå
|
|
/*bool is_defined
|
|
{
|
|
get;
|
|
set;
|
|
}*/
|
|
|
|
}
|
|
|
|
public interface ILabeledStatementNode : IStatementNode, ILocated
|
|
{
|
|
//Ìåòêà, êîòîðîé ïîìå÷åí statement
|
|
ILabelNode label
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñàìà èíñòðóêöèÿ
|
|
IStatementNode statement
|
|
{
|
|
get;
|
|
}
|
|
|
|
}
|
|
|
|
public interface IGotoStatementNode : IStatementNode, ILocated
|
|
{
|
|
//Ìåòêà, íà êîòîðóþ ïðîèñõîäèò ïåðåõîä
|
|
ILabelNode label
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IForeachNode : IStatementNode, ILocated
|
|
{
|
|
IVAriableDefinitionNode VarIdent
|
|
{
|
|
get;
|
|
}
|
|
|
|
IExpressionNode InWhatExpr
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode Body
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ILockStatement : IStatementNode, ILocated
|
|
{
|
|
IExpressionNode LockObject
|
|
{
|
|
get;
|
|
}
|
|
IStatementNode Body
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IRethrowStatement : IStatementNode, ILocated
|
|
{
|
|
|
|
}
|
|
|
|
public interface INamespaceConstantReference : IConstantNode, ILocated
|
|
{
|
|
INamespaceConstantDefinitionNode Constant
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IFunctionConstantReference : IConstantNode, ILocated
|
|
{
|
|
ICommonFunctionConstantDefinitionNode Constant
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IFunctionConstantDefinitionNode : IConstantDefinitionNode, ILocated
|
|
{
|
|
ICommonFunctionNode function
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICommonConstructorCallAsConstant : IConstantNode, ILocated
|
|
{
|
|
ICommonConstructorCall ConstructorCall
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IEventNode : IDefinitionNode
|
|
{
|
|
|
|
}
|
|
|
|
public interface ICompiledEventNode : IEventNode
|
|
{
|
|
System.Reflection.EventInfo CompiledEvent
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICommonEventNode : IDefinitionNode, IEventNode, ICommonClassMemberNode, ILocated
|
|
{
|
|
string Name
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode DelegateType
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonMethodNode AddMethod
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonMethodNode RemoveMethod
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonMethodNode RaiseMethod
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonClassFieldNode Field
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool IsStatic
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface ICommonNamespaceEventNode : IDefinitionNode, IEventNode, ILocated
|
|
{
|
|
string Name
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode DelegateType
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonNamespaceFunctionNode AddFunction
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonNamespaceFunctionNode RemoveFunction
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonNamespaceFunctionNode RaiseFunction
|
|
{
|
|
get;
|
|
}
|
|
|
|
ICommonNamespaceVariableNode Field
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IStaticEventReference : IAddressedExpressionNode
|
|
{
|
|
IEventNode Event
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface INonStaticEventReference : IStaticEventReference
|
|
{
|
|
IExpressionNode obj
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
public interface IDefaultOperatorNode : IExpressionNode
|
|
{
|
|
}
|
|
|
|
public interface IAttributeNode : ISemanticNode, ILocated
|
|
{
|
|
IFunctionNode AttributeConstructor
|
|
{
|
|
get;
|
|
}
|
|
|
|
attribute_qualifier_kind qualifier
|
|
{
|
|
get;
|
|
}
|
|
|
|
ITypeNode AttributeType
|
|
{
|
|
get;
|
|
}
|
|
|
|
IConstantNode[] Arguments
|
|
{
|
|
get;
|
|
}
|
|
|
|
IPropertyNode[] PropertyNames
|
|
{
|
|
get;
|
|
}
|
|
|
|
IConstantNode[] PropertyInitializers
|
|
{
|
|
get;
|
|
}
|
|
|
|
IVAriableDefinitionNode[] FieldNames
|
|
{
|
|
get;
|
|
}
|
|
|
|
IConstantNode[] FieldInitializers
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
public interface ILambdaFunctionNode : IExpressionNode
|
|
{
|
|
//Âèä óçëà - áàçîâûé (basic), îáû÷íûé (common) èëè ýêñïîðòèðóåìûé (compiled).
|
|
node_kind node_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ôóíêöèè.
|
|
IParameterNode[] parameters
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Òèï âîçâðàùàåìîãî çíà÷åíèÿ ôóíêöèè.
|
|
ITypeNode return_value_type
|
|
{
|
|
get;
|
|
}
|
|
|
|
IStatementNode body
|
|
{
|
|
get;
|
|
}
|
|
|
|
IFunctionNode function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Ðàñïîëîæåíèå ôóíêöèè - â ôóíêöèè, â êëàññå, â ïðîñòðàíñòâå èìåí.
|
|
node_location_kind node_location_kind
|
|
{
|
|
get;
|
|
}
|
|
|
|
//ßâëÿåòñÿ ëè generic-ôóíêöèåé
|
|
bool is_generic_function
|
|
{
|
|
get;
|
|
}
|
|
|
|
//×èñëî òèïîâ-ïàðàìåòðîâ generic-ôóíêöèè. 0 äëÿ íå-generic.
|
|
int generic_parameters_count
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
public interface ILambdaFunctionCallNode : IExpressionNode
|
|
{
|
|
//Ñïèñîê ôàêòè÷åñêèõ ïàðàìåòðîâ. Êîëè÷åñòâî è òèïû ôîðìàëüíûõ è ôàêòè÷åñêèõ ïàðàìåòðîâ ñâåðÿåòñÿ
|
|
//íà ýòàïå ïîñòðîåíèÿ ñåìàíòè÷åñêîãî äåðåâà. Ïðè íåîáõîäèìîñòè ïðè ïîñòðîåíèè ñåìàíòè÷åñêîãî äåðåâà
|
|
//âñòàâëÿþòñÿ óçëû ïðåîáðûçîâàíèÿ òèïîâ.
|
|
IExpressionNode[] parameters
|
|
{
|
|
get;
|
|
}
|
|
|
|
//Âûçûâàåìûé ìåòîä.
|
|
ILambdaFunctionNode lambda
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
/*public interface ICompiledFunctionNode : IFunctionNode
|
|
{
|
|
string test
|
|
{
|
|
get;
|
|
}
|
|
}*/
|
|
}
|