pascalabcnet/SemanticTree/SemanticTree.cs
Бондарев Иван 1872434f19 added license info
2015-06-02 22:06:57 +02:00

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;
}
}*/
}