• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-341  評論-2670  文章-0  trackbacks-0
                經(jīng)歷了大約一個(gè)多星期的挑選,Vczh Library++3.0托管語言的語法樹大約就定下來了。跟本地語言有一個(gè)缺省的語法叫NativeX一樣,這次的語法就叫ManagedX了。當(dāng)然ManagedX只是設(shè)計(jì)來直接反映托管語言語法樹的一門語言,如果愿意的話,這個(gè)語法樹還能被編譯成其他長得像(嗯,只能是像,因?yàn)楸仨毷峭泄艿模蓄悰]指針等)Basic啦Pascal那樣子的東西。

                我將ManagedX的語法分為兩部分。第一部分是基礎(chǔ)部分,第二部分則是擴(kuò)展部分。將他們分開的依據(jù)就是,一個(gè)基于擴(kuò)展部分的程序,總是可以被重寫為一個(gè)功能完全一致但是僅基于基礎(chǔ)部分的比較復(fù)雜的程序。舉一個(gè)簡單的例子。我們知道lambda表達(dá)式在一門面向?qū)ο笳Z言中并不是必需的,它只是一個(gè)語法糖。如果我們在面向?qū)ο笳Z言中把函數(shù)指針統(tǒng)統(tǒng)抽象成一個(gè)基類或者接口(就跟C#的Delegate一樣)的話,一個(gè)lambda表達(dá)式總是可以被表達(dá)成一個(gè)新的類型,然后只需要重新組織一下生成該lambda表達(dá)式的函數(shù)的局部變量,就可以把lambda表達(dá)是去掉了。當(dāng)然lambda表達(dá)式作為一個(gè)語法來說是必需的,因?yàn)樗蟠筇岣吡碎_發(fā)效率。但是對于編譯過程來說又不是必需的,因?yàn)樗偸强梢杂米詣又貙懙姆椒▉砣サ簟?br />
                因此ManagedX的編譯過程就比較清晰了:
                1、我們接受一個(gè)基于擴(kuò)展部分的程序,然后經(jīng)過第一輪的語法分析,得到語法樹上面所有節(jié)點(diǎn)的類型信息和引用信息。
                2、根據(jù)分析出來的信息,將該程序重寫為僅基于基礎(chǔ)部分的程序。在重寫的過程中會使得信息不會丟失(特別是ManagedX支持反射,而反射卻可以支持?jǐn)U展部分,所以需要做很多小動作來維持重寫前后的程序運(yùn)行上的一致性)
                3、對重寫出來的新程序重新進(jìn)行語法分析。
                4、根據(jù)分析出來的信息,將它編譯成NativeX

                從這里打架就可以知道為什么我之前要做NativeX了,因?yàn)閷?shí)現(xiàn)了NativeX之后,以后實(shí)現(xiàn)很多新的復(fù)雜語言會十分省事。運(yùn)行時(shí)的虛擬機(jī)做好了,函數(shù)庫也有了一部分,還有基于二進(jìn)制編譯結(jié)果的多文件支持啦、泛型啦、concept mapping啦、外接函數(shù)插件啦、還有將來會做的debugger,和編譯到X86的過程,都可以直接被新的語言所享受。在這里ManagedX的開發(fā)過程就僅僅是一個(gè)前端的開發(fā)過程了,因?yàn)楹蠖说牡谝浑A段已經(jīng)完成了,至少可以直接使用。

                下面貼一下ManagedX那將近900行的語法樹:(Library\Scripting\ManagedLanguage\ManagedLanguageExpression.h)
              1 /***********************************************************************
              2 Vczh Library++ 3.0
              3 Developer: 陳梓瀚(vczh)
              4 Scripting::ManagedLanguage
              5 
              6 Classes:
              7 ***********************************************************************/
              8 
              9 #ifndef VCZH_SCRIPTING_MANAGEDLANGUAGE_MANAGEDLANGUAGEEXPRESSION
             10 #define VCZH_SCRIPTING_MANAGEDLANGUAGE_MANAGEDLANGUAGEEXPRESSION
             11 
             12 #include "..\..\Pointer.h"
             13 #include "..\..\String.h"
             14 #include "..\..\Collections\List.h"
             15 #include "..\..\Collections\Dictionary.h"
             16 #include "..\Common\AlgorithmDeclaration.h"
             17 
             18 namespace vl
             19 {
             20     namespace scripting
             21     {
             22         namespace managedlanguage
             23         {
             24             struct ManagedPosition
             25             {
             26                 vint                                        start;
             27                 vint                                        lineStart;
             28                 vint                                        lineIndex;
             29                 vint                                        codeIndex;
             30 
             31                 ManagedPosition();
             32             };
             33 
             34             class ManagedLanguageElement : public Object, private NotCopyable
             35             {
             36             public:
             37                 ManagedPosition                                position;
             38             };
             39 
             40 /***********************************************************************
             41 Basic Constructions
             42 ***********************************************************************/
             43 
             44             class ManagedType : public ManagedLanguageElement
             45             {
             46             public:
             47                 ALGORITHM_TARGET_ROOT(ManagedType)
             48             };
             49 
             50             class ManagedExpression : public ManagedLanguageElement
             51             {
             52             public:
             53                 ALGORITHM_TARGET_ROOT(ManagedExpression)
             54             };
             55 
             56             class ManagedStatement : public ManagedLanguageElement
             57             {
             58             public:
             59                 ALGORITHM_TARGET_ROOT(ManagedStatement)
             60             };
             61 
             62             class ManagedDeclaration : public ManagedLanguageElement
             63             {
             64             public:
             65                 ALGORITHM_TARGET_ROOT(ManagedDeclaration)
             66             };
             67 
             68             class ManagedProgram : public ManagedLanguageElement
             69             {
             70             public:
             71                 collections::List<Ptr<ManagedDeclaration>>    declarations;
             72             };
             73 
             74 /***********************************************************************
             75 Extended Constructions
             76 ***********************************************************************/
             77 
             78             class ManagedExtendedType : public ManagedType
             79             {
             80             public:
             81                 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
             82 
             83                 ALGORITHM_TARGET_ROOT(ManagedExtendedType)
             84             };
             85 
             86             class ManagedExtendedExpression : public ManagedExpression
             87             {
             88             public:
             89                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
             90 
             91                 ALGORITHM_TARGET_ROOT(ManagedExtendedExpression)
             92             };
             93 
             94             class ManagedExtendedStatement : public ManagedStatement
             95             {
             96             public:
             97                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
             98 
             99                 ALGORITHM_TARGET_ROOT(ManagedExtendedStatement)
            100             };
            101 
            102             class ManagedExtendedDeclaration : public ManagedDeclaration
            103             {
            104             public:
            105                 ALGORITHM_ACCEPT_DECLARATION(ManagedDeclaration)
            106 
            107                 ALGORITHM_TARGET_ROOT(ManagedExtendedDeclaration)
            108             };
            109 
            110 /***********************************************************************
            111 Basic Types
            112 ***********************************************************************/
            113 
            114             class ManagedGenericArgumentType : public ManagedType
            115             {
            116             public:
            117                 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
            118 
            119                 WString                                        name;
            120             };
            121 
            122             class ManagedReferencedType : public ManagedType
            123             {
            124             public:
            125                 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
            126 
            127                 WString                                        name;
            128             };
            129 
            130             class ManagedMemberType : public ManagedType
            131             {
            132             public:
            133                 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
            134 
            135                 Ptr<ManagedType>                            operand;
            136                 WString                                        member;
            137             };
            138 
            139             class ManagedInstantiatedGenericType : public ManagedType
            140             {
            141             public:
            142                 ALGORITHM_ACCEPT_DECLARATION(ManagedType)
            143 
            144                 Ptr<ManagedType>                            elementType;
            145                 collections::List<Ptr<ManagedType>>            argumentTypes;
            146             };
            147 
            148 #define MANAGED_TYPE_TARGETS(P, F)\
            149             F(P, ManagedGenericArgumentType)\
            150             F(P, ManagedReferencedType)\
            151             F(P, ManagedMemberType)\
            152             F(P, ManagedInstantiatedGenericType)\
            153             F(P, ManagedExtendedType)\
            154 
            155             DEFINE_ALGORITHM_INTERFACE(ManagedType, MANAGED_TYPE_TARGETS)
            156 
            157 /***********************************************************************
            158 Extended Types
            159 ***********************************************************************/
            160 
            161             class ManagedArrayType : public ManagedExtendedType
            162             {
            163             public:
            164                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
            165 
            166                 Ptr<ManagedType>                            elementType;
            167                 int                                            dimensionCount;
            168             };
            169 
            170             class ManagedFunctionType : public ManagedExtendedType
            171             {
            172             public:
            173                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
            174 
            175                 Ptr<ManagedType>                            returnType;
            176                 collections::List<Ptr<ManagedType>>            parameterTypes;
            177             };
            178 
            179             class ManagedEventType : public ManagedExtendedType
            180             {
            181             public:
            182                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
            183 
            184                 Ptr<ManagedType>                            functionType;
            185             };
            186 
            187             class ManagedAutoReferType : public ManagedExtendedType
            188             {
            189             public:
            190                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedType)
            191             };
            192 
            193 #define MANAGED_EXTENDED_TYPE_TARGETS(P, F)\
            194             F(P, ManagedArrayType)\
            195             F(P, ManagedFunctionType)\
            196             F(P, ManagedEventType)\
            197             F(P, ManagedAutoReferType)\
            198 
            199             DEFINE_ALGORITHM_INTERFACE(ManagedExtendedType, MANAGED_EXTENDED_TYPE_TARGETS)
            200 
            201 /***********************************************************************
            202 Basic Expressions
            203 ***********************************************************************/
            204 
            205             class ManagedPrimitiveExpression : public ManagedExpression
            206             {
            207             };
            208 
            209             class ManagedNullExpression : public ManagedPrimitiveExpression
            210             {
            211             public:
            212                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            213             };
            214 
            215             class ManagedIntegerExpression : public ManagedPrimitiveExpression
            216             {
            217             public:
            218                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            219 
            220                 bool                                        sign;
            221                 union
            222                 {
            223                     signed __int64                            signedInteger;
            224                     unsigned __int64                        unsignedInteger;
            225                 }                                            value;
            226             };
            227 
            228             class ManagedFloatExpression : public ManagedPrimitiveExpression
            229             {
            230             public:
            231                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            232 
            233                 bool                                        doublePrecision;
            234                 double                                        value;
            235             };
            236 
            237             class ManagedBooleanExpression : public ManagedPrimitiveExpression
            238             {
            239             public:
            240                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            241 
            242                 bool                                        value;
            243             };
            244 
            245             class ManagedCharExpression : public ManagedPrimitiveExpression
            246             {
            247             public:
            248                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            249 
            250                 wchar_t                                        value;
            251             };
            252 
            253             class ManagedStringExpression : public ManagedPrimitiveExpression
            254             {
            255             public:
            256                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            257 
            258                 WString                                        value;
            259             };
            260 
            261             class ManagedReferenceExpression : public ManagedExpression
            262             {
            263             public:
            264                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            265 
            266                 WString                                        name;
            267             };
            268 
            269             class ManagedMemberExpression : public ManagedExpression
            270             {
            271             public:
            272                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            273 
            274                 Ptr<ManagedExpression>                        operand;
            275                 WString                                        member;
            276             };
            277 
            278             class ManagedInstanciatedExpression : public ManagedExpression
            279             {
            280             public:
            281                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            282 
            283                 Ptr<ManagedExpression>                        operand;
            284                 collections::List<Ptr<ManagedType>>            argumentTypes;
            285             };
            286 
            287             class ManagedInvokeExpression : public ManagedExpression
            288             {
            289             public:
            290                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            291 
            292                 Ptr<ManagedExpression>                        function;
            293                 collections::List<Ptr<ManagedExpression>>    arguments;
            294                 collections::List<WString>                    defaultParameterNames;
            295                 collections::List<Ptr<ManagedExpression>>    defaultParameterValues;
            296             };
            297 
            298             class ManagedNewExpression : public ManagedExpression
            299             {
            300             public:
            301                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            302 
            303                 Ptr<ManagedType>                            objectType;
            304                 collections::List<Ptr<ManagedExpression>>    arguments;
            305                 collections::List<WString>                    defaultParameterNames;
            306                 collections::List<Ptr<ManagedExpression>>    defaultParameterValues;
            307                 collections::List<WString>                    propertyNames;
            308                 collections::List<Ptr<ManagedExpression>>    propertyValues;
            309             };
            310 
            311             class ManagedFunctionResultExpression : public ManagedExpression
            312             {
            313             public:
            314                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            315             };
            316 
            317             class ManagedCastingExpression : public ManagedExpression
            318             {
            319             public:
            320                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            321 
            322                 Ptr<ManagedExpression>                        operand;
            323                 Ptr<ManagedType>                            type;
            324             };
            325 
            326             class ManagedThisExpression : public ManagedExpression
            327             {
            328             public:
            329                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            330             };
            331 
            332             class ManagedBaseExpression : public ManagedExpression
            333             {
            334             public:
            335                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            336             };
            337 
            338             class ManagedAssignmentExpression : public ManagedExpression
            339             {
            340             public:
            341                 ALGORITHM_ACCEPT_DECLARATION(ManagedExpression)
            342             };
            343 
            344 #define MANAGED_EXPRESSION_TARGETS(P, F)\
            345             F(P, ManagedNullExpression)\
            346             F(P, ManagedIntegerExpression)\
            347             F(P, ManagedFloatExpression)\
            348             F(P, ManagedBooleanExpression)\
            349             F(P, ManagedCharExpression)\
            350             F(P, ManagedStringExpression)\
            351             F(P, ManagedReferenceExpression)\
            352             F(P, ManagedMemberExpression)\
            353             F(P, ManagedInstanciatedExpression)\
            354             F(P, ManagedInvokeExpression)\
            355             F(P, ManagedNewExpression)\
            356             F(P, ManagedFunctionResultExpression)\
            357             F(P, ManagedCastingExpression)\
            358             F(P, ManagedThisExpression)\
            359             F(P, ManagedBaseExpression)\
            360             F(P, ManagedAssignmentExpression)\
            361             F(P, ManagedExtendedExpression)\
            362 
            363             DEFINE_ALGORITHM_INTERFACE(ManagedExpression, MANAGED_EXPRESSION_TARGETS)
            364 
            365 /***********************************************************************
            366 Extended Expressions
            367 ***********************************************************************/
            368 
            369             class ManagedLambdaExpression : public ManagedExtendedExpression
            370             {
            371             public:
            372                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
            373 
            374                 collections::List<Ptr<ManagedType>>            parameterTypes;
            375                 collections::List<WString>                    parameterNames;
            376                 Ptr<ManagedType>                            returnType;
            377                 Ptr<ManagedStatement>                        body;
            378             };
            379 
            380             class ManagedChoiceExpression : public ManagedExtendedExpression
            381             {
            382             public:
            383                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
            384 
            385                 Ptr<ManagedExpression>                        condition;
            386                 Ptr<ManagedExpression>                        trueExpression;
            387                 Ptr<ManagedExpression>                        falseExpression;
            388             };
            389 
            390             class ManagedNullChoiceExpression : public ManagedExtendedExpression
            391             {
            392             public:
            393                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
            394 
            395                 Ptr<ManagedExpression>                        valueExpression;
            396                 Ptr<ManagedExpression>                        candidateExpression;
            397             };
            398 
            399             class ManagedTypeofExpression : public ManagedExtendedExpression
            400             {
            401             public:
            402                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedExpression)
            403 
            404                 Ptr<ManagedType>                            type;
            405             };
            406 
            407 #define MANAGED_EXTENDED_EXPRESSION_TARGETS(P, F)\
            408             F(P, ManagedLambdaExpression)\
            409             F(P, ManagedChoiceExpression)\
            410             F(P, ManagedNullChoiceExpression)\
            411             F(P, ManagedTypeofExpression)\
            412 
            413             DEFINE_ALGORITHM_INTERFACE(ManagedExtendedExpression, MANAGED_EXTENDED_EXPRESSION_TARGETS)
            414 
            415 /***********************************************************************
            416 Basic Statements
            417 ***********************************************************************/
            418 
            419             class ManagedEmptyStatement : public ManagedStatement
            420             {
            421             public:
            422                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            423             };
            424 
            425             class ManagedCompositeStatement : public ManagedStatement
            426             {
            427             public:
            428                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            429 
            430                 collections::List<Ptr<ManagedStatement>>    statements;
            431             };
            432 
            433             class ManagedExpressionStatement : public ManagedStatement
            434             {
            435             public:
            436                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            437 
            438                 Ptr<ManagedExpression>                        expression;
            439             };
            440 
            441             class ManagedVariableStatement : public ManagedStatement
            442             {
            443             public:
            444                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            445 
            446                 bool                                        constant;
            447                 Ptr<ManagedType>                            type;
            448                 WString                                        name;
            449                 Ptr<ManagedExpression>                        initializer;
            450             };
            451 
            452             class ManagedIfStatement : public ManagedStatement
            453             {
            454             public:
            455                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            456 
            457                 Ptr<ManagedExpression>                        condition;
            458                 Ptr<ManagedStatement>                        trueStatement;
            459                 Ptr<ManagedStatement>                        falseStatement;
            460             };
            461 
            462             class ManagedWhileStatement : public ManagedStatement
            463             {
            464             public:
            465                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            466 
            467                 Ptr<ManagedExpression>                        beginCondition;
            468                 Ptr<ManagedExpression>                        endCondition;
            469                 Ptr<ManagedStatement>                        statement;
            470             };
            471 
            472             class ManagedForStatement : public ManagedStatement
            473             {
            474             public:
            475                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            476 
            477                 Ptr<ManagedStatement>                        initializer;
            478                 Ptr<ManagedStatement>                        sideEffect;
            479                 Ptr<ManagedExpression>                        condition;
            480                 Ptr<ManagedStatement>                        statement;
            481             };
            482 
            483             class ManagedBreakStatement : public ManagedStatement
            484             {
            485             public:
            486                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            487             };
            488 
            489             class ManagedContinueStatement : public ManagedStatement
            490             {
            491             public:
            492                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            493             };
            494 
            495             class ManagedReturnStatement : public ManagedStatement
            496             {
            497             public:
            498                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            499             };
            500 
            501             class ManagedTryCatchStatement : public ManagedStatement
            502             {
            503             public:
            504                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            505 
            506                 Ptr<ManagedStatement>                        tryStatement;
            507                 collections::List<Ptr<ManagedType>>            catchExceptionTypes;
            508                 collections::List<WString>                    catchExceptionNames;
            509                 collections::List<Ptr<ManagedStatement>>    catchExceptionHandlers;
            510                 Ptr<ManagedStatement>                        finallyStatement;
            511             };
            512 
            513             class ManagedThrowStatement : public ManagedStatement
            514             {
            515             public:
            516                 ALGORITHM_ACCEPT_DECLARATION(ManagedStatement)
            517 
            518                 Ptr<ManagedExpression>                        expression;
            519             };
            520 
            521 #define MANAGED_STATEMENT_TARGETS(P, F)\
            522             F(P, ManagedEmptyStatement)\
            523             F(P, ManagedCompositeStatement)\
            524             F(P, ManagedExpressionStatement)\
            525             F(P, ManagedVariableStatement)\
            526             F(P, ManagedIfStatement)\
            527             F(P, ManagedWhileStatement)\
            528             F(P, ManagedForStatement)\
            529             F(P, ManagedBreakStatement)\
            530             F(P, ManagedContinueStatement)\
            531             F(P, ManagedReturnStatement)\
            532             F(P, ManagedTryCatchStatement)\
            533             F(P, ManagedThrowStatement)\
            534             F(P, ManagedExtendedStatement)
            535 
            536             DEFINE_ALGORITHM_INTERFACE(ManagedStatement, MANAGED_STATEMENT_TARGETS)
            537 
            538 /***********************************************************************
            539 Extended Statements
            540 ***********************************************************************/
            541 
            542             class ManagedUsingStatement : public ManagedExtendedStatement
            543             {
            544             public:
            545                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedStatement)
            546 
            547                 Ptr<ManagedType>                            type;
            548                 WString                                        name;
            549                 Ptr<ManagedExpression>                        initialize;
            550                 Ptr<ManagedStatement>                        statement;
            551             };
            552 
            553             class ManagedLockStatement : public ManagedExtendedStatement
            554             {
            555             public:
            556                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedStatement)
            557 
            558                 Ptr<ManagedExpression>                        lock;
            559                 Ptr<ManagedStatement>                        statement;
            560             };
            561 
            562             class ManagedSelectStatement : public ManagedExtendedStatement
            563             {
            564             public:
            565                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedStatement)
            566 
            567                 Ptr<ManagedExpression>                        expression;
            568                 collections::List<Ptr<ManagedExpression>>    caseConditions;
            569                 collections::List<Ptr<ManagedStatement>>    caseStatements;
            570                 Ptr<ManagedStatement>                        defaultStatements;
            571             };
            572 
            573 #define MANAGED_EXTENDED_STATEMENT_TARGETS(P, F)\
            574             F(P, ManagedUsingStatement)\
            575             F(P, ManagedLockStatement)\
            576             F(P, ManagedSelectStatement)\
            577 
            578             DEFINE_ALGORITHM_INTERFACE(ManagedExtendedStatement, MANAGED_EXTENDED_STATEMENT_TARGETS)
            579 
            580 /***********************************************************************
            581 Basic Declaration Fragments
            582 ***********************************************************************/
            583 
            584             struct ManagedAttributeInfo
            585             {
            586             public:
            587                 collections::List<Ptr<ManagedNewExpression>>    attributes;
            588             };
            589 
            590             struct ManagedGenericInfo
            591             {
            592             public:
            593                 struct Argument
            594                 {
            595                     WString                                    name;
            596                     collections::List<Ptr<ManagedType>>        typeConstraints;
            597                     bool                                    newConstraint;
            598                 };
            599 
            600                 collections::List<Ptr<Argument>>            arguments;
            601             };
            602 
            603             namespace declatt
            604             {
            605                 enum Accessor
            606                 {
            607                     Public,
            608                     Protected,
            609                     Private,
            610                     ProtectedInternal,
            611                     Internal,
            612                 };
            613 
            614                 enum Inheritation
            615                 {
            616                     Normal,
            617                     Sealed,
            618                     Abstract,
            619                     Virtual,
            620                     Override,
            621                 };
            622 
            623                 enum MemberType
            624                 {
            625                     Instance,
            626                     Static,
            627                 };
            628 
            629                 enum DataType
            630                 {
            631                     Variable,
            632                     Constant,
            633                     Readonly,
            634                 };
            635             };
            636 
            637             class ManagedMember : public ManagedLanguageElement
            638             {
            639             public:
            640                 ALGORITHM_TARGET_ROOT(ManagedMember)
            641 
            642                 declatt::Accessor                            accessor;
            643                 declatt::MemberType                            memberType;
            644                 ManagedAttributeInfo                        attributeInfo;
            645             };
            646 
            647             class ManagedExtendedMember : public ManagedMember
            648             {
            649             public:
            650                 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
            651 
            652                 ALGORITHM_TARGET_ROOT(ManagedExtendedMember)
            653             };
            654 
            655             class ManagedParameter : public ManagedLanguageElement
            656             {
            657             public:
            658                 enum ParameterType
            659                 {
            660                     Normal,
            661                     Default,
            662                     Params
            663                 };
            664 
            665                 Ptr<ManagedType>                            type;
            666                 WString                                        name;
            667                 ParameterType                                parameterType;
            668                 Ptr<ManagedExpression>                        defaultValue;
            669                 bool                                        params;
            670             };
            671 
            672             class ManagedMethodCommon
            673             {
            674             public:
            675                 collections::List<Ptr<ManagedParameter>>    parameters;
            676                 Ptr<ManagedStatement>                        body;
            677             };
            678 
            679             class ManagedConstructorCommon
            680             {
            681             public:
            682                 collections::List<Ptr<ManagedExpression>>    baseArguments;
            683                 collections::List<WString>                    baseDefaultParameterNames;
            684                 collections::List<Ptr<ManagedExpression>>    baseDefaultParameterValues;
            685             };
            686 
            687 /***********************************************************************
            688 Basic Members
            689 ***********************************************************************/
            690 
            691             class ManagedField : public ManagedMember
            692             {
            693             public:
            694                 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
            695 
            696                 Ptr<ManagedType>                            type;
            697                 WString                                        name;
            698                 Ptr<ManagedExpression>                        initializer;
            699 
            700                 declatt::DataType                            dataType;
            701             };
            702 
            703             class ManagedMethod : public ManagedMember, public ManagedMethodCommon
            704             {
            705             public:
            706                 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
            707 
            708                 Ptr<ManagedType>                            implementedInterfaceType;
            709                 WString                                        name;
            710                 Ptr<ManagedType>                            returnType;
            711 
            712                 declatt::Inheritation                        inheritation;
            713                 ManagedGenericInfo                            genericInfo;
            714             };
            715 
            716             class ManagedConstructor : public ManagedMember, public ManagedMethodCommon, public ManagedConstructorCommon
            717             {
            718             public:
            719                 ALGORITHM_ACCEPT_DECLARATION(ManagedMember)
            720             };
            721 
            722 #define MANAGED_MEMBER_TARGETS(P, F)\
            723             F(P, ManagedField)\
            724             F(P, ManagedMethod)\
            725             F(P, ManagedConstructor)\
            726             F(P, ManagedExtendedMember)\
            727 
            728             DEFINE_ALGORITHM_INTERFACE(ManagedMember, MANAGED_MEMBER_TARGETS)
            729 
            730 /***********************************************************************
            731 Extended Members
            732 ***********************************************************************/
            733 
            734             class ManagedProperty : public ManagedExtendedMember
            735             {
            736             public:
            737                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedMember)
            738 
            739                 Ptr<ManagedType>                            type;
            740                 WString                                        name;
            741                 Ptr<ManagedStatement>                        getter;
            742                 Ptr<ManagedStatement>                        setter;
            743 
            744                 declatt::Accessor                            setterAccessor;
            745                 declatt::Inheritation                        inheritation;
            746             };
            747 
            748             class ManagedConverterOperator : public ManagedExtendedMember
            749             {
            750             public:
            751                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedMember)
            752 
            753                 Ptr<ManagedType>                            targetType;
            754                 bool                                        implicit;
            755 
            756                 declatt::Inheritation                        inheritation;
            757                 ManagedGenericInfo                            genericInfo;
            758             };
            759 
            760             class ManagedConverterConstructor : public ManagedExtendedMember, public ManagedConstructorCommon
            761             {
            762             public:
            763                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedMember)
            764 
            765                 Ptr<ManagedType>                            sourceType;
            766                 bool                                        implicit;
            767             };
            768 
            769 #define MANAGED_EXTENDED_MEMBER_TARGETS(P, F)\
            770             F(P, ManagedProperty)\
            771             F(P, ManagedConverterOperator)\
            772             F(P, ManagedConverterConstructor)\
            773 
            774             DEFINE_ALGORITHM_INTERFACE(ManagedExtendedMember, MANAGED_EXTENDED_MEMBER_TARGETS)
            775 
            776 /***********************************************************************
            777 Basic Declarations
            778 ***********************************************************************/
            779 
            780             class ManagedTypeDeclaration : public ManagedDeclaration
            781             {
            782             public:
            783                 ALGORITHM_ACCEPT_DECLARATION(ManagedDeclaration)
            784 
            785                 enum DeclarationType
            786                 {
            787                     Class,
            788                     Structure,
            789                     Interface,
            790                 };
            791 
            792                 collections::List<Ptr<ManagedMember>>        members;
            793 
            794                 declatt::Accessor                            accessor;
            795                 declatt::Inheritation                        inheritation;
            796                 ManagedGenericInfo                            genericInfo;
            797                 ManagedAttributeInfo                        attributeInfo;
            798             };
            799 
            800             class ManagedNamespaceDeclaration : public ManagedDeclaration
            801             {
            802             public:
            803                 ALGORITHM_ACCEPT_DECLARATION(ManagedDeclaration)
            804 
            805                 collections::List<Ptr<ManagedDeclaration>>    declarations;
            806             };
            807 
            808 #define MANAGED_DECLARATION_TARGETS(P, F)\
            809             F(P, ManagedTypeDeclaration)\
            810             F(P, ManagedNamespaceDeclaration)\
            811             F(P, ManagedExtendedDeclaration)\
            812 
            813             DEFINE_ALGORITHM_INTERFACE(ManagedDeclaration, MANAGED_DECLARATION_TARGETS)
            814 
            815 /***********************************************************************
            816 Extended Declarations
            817 ***********************************************************************/
            818 
            819             class ManagedEnumerationDeclaration : public ManagedExtendedDeclaration
            820             {
            821             public:
            822                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedDeclaration)
            823 
            824                 bool                                        composable;
            825                 collections::List<WString>                    enumerationNames;
            826                 collections::List<vint>                        enumerationValues;
            827 
            828                 declatt::Accessor                            accessor;
            829                 ManagedAttributeInfo                        attributeInfo;
            830             };
            831 
            832             class ManagedTypeRenameDeclaration : public ManagedExtendedDeclaration
            833             {
            834             public:
            835                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedDeclaration)
            836 
            837                 declatt::Accessor                            accessor;
            838                 ManagedGenericInfo                            genericInfo;
            839             };
            840 
            841             class ManagedUsingNamespaceDeclaration : public ManagedExtendedDeclaration
            842             {
            843             public:
            844                 ALGORITHM_ACCEPT_DECLARATION(ManagedExtendedDeclaration)
            845 
            846                 collections::List<WString>                    namespaceFragments;
            847             };
            848 
            849 #define MANAGED_EXTENDED_DECLARATION_TARGETS(P, F)\
            850             F(P, ManagedEnumerationDeclaration)\
            851             F(P, ManagedTypeRenameDeclaration)\
            852             F(P, ManagedUsingNamespaceDeclaration)\
            853 
            854             DEFINE_ALGORITHM_INTERFACE(ManagedExtendedDeclaration, MANAGED_EXTENDED_DECLARATION_TARGETS)
            855         }
            856     }
            857 }
            858 
            859 #endif

            posted on 2011-05-28 00:33 陳梓瀚(vczh) 閱讀(3212) 評論(17)  編輯 收藏 引用 所屬分類: VL++3.0開發(fā)紀(jì)事

            評論:
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 01:10 | 溪流
            保持隊(duì)形,膜拜大神啊!^_^  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成[未登錄] 2011-05-28 02:09 | 邱震鈺(zblc)
            膜拜大神啊~~~~~~~~~~~~~~~~~~~~~
            (表代碼...表代碼.........我要圖..........請上圖,我要好看的圖........,最好是連環(huán)畫的那種)  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 02:48 | 陳梓瀚(vczh)
            @溪流
            臥槽你們這群魂淡  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 02:52 | ArthasLee
            妖~完全看不明白。。。
            求大神自拍、3D視頻……  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 04:54 | lwch
            為什么會是先有Demo再有語法樹的結(jié)構(gòu)的?不解...  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 05:43 | 陳梓瀚(vczh)
            @lwch
            ManagedX沒有demo,那個(gè)demo是NativeX的。我先做完了NativeX,然后現(xiàn)在基于NativeX做ManagedX。  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 05:46 | 陳昱(CY)
            我也來膜拜大神,難道以后要成水區(qū)了。。。。。。  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 06:54 | lwch
            @陳梓瀚(vczh)
            ManagedX和NativeX到底是兩種神馬玩意..  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成[未登錄] 2011-05-28 07:45 | 邱震鈺(zblc)
            @lwch
            嘛,我認(rèn)為就像MSIL和C#的關(guān)系  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 09:52 | 陳梓瀚(vczh)
            @lwch
            看本文的“NativeX”上的超鏈接  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 09:52 | 陳梓瀚(vczh)
            @邱震鈺(zblc)
            no,是C和C#的關(guān)系  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 10:40 | Enic
            雖然不知道樓主在說什么,但是感覺樓主很牛逼,,,

            膜拜大神啊,,,  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-28 18:39 | 陳梓瀚(vczh)
            @Enic
            ........  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成[未登錄] 2011-05-28 19:30 | 邱震鈺(zblc)
            @陳梓瀚(vczh)
            - -bnr ...... 原來如此 廣義上是這么回事  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-29 02:13 | airtrack
            額,還是膜拜下。  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成 2011-05-30 01:29 | 千暮(zblc)
            膜拜樓主啊~~~~~~~~~~~~~~~~~~~~~~~~
            (每每看到樓主的帖子如此風(fēng)騷且韻味十足 我就情不自禁的想膜拜一下~~~~~~~~)  回復(fù)  更多評論
              
            # re: Vczh Library++3.0托管語言語法樹完成[未登錄] 2011-05-30 02:58 | connor
            膜拜大神啊~~~~~~~~~~
            求包 養(yǎng)~~~~~~~~~~  回復(fù)  更多評論
              
            久久亚洲AV成人无码国产 | 国产伊人久久| 99久久夜色精品国产网站| 久久成人小视频| 精品综合久久久久久97| 伊人久久综合成人网| 99久久99久久精品国产片果冻| 午夜精品久久久久久久无码| 久久精品国产亚洲av水果派| 亚洲欧美久久久久9999| 欧美日韩久久中文字幕| 中文字幕乱码久久午夜| 91精品国产乱码久久久久久| 五月丁香综合激情六月久久| 一级做a爰片久久毛片看看| 亚洲色大成网站WWW久久九九| 久久精品蜜芽亚洲国产AV| 久久精品国产影库免费看| 精品无码久久久久久国产| 色老头网站久久网| 91秦先生久久久久久久| 亚洲欧洲久久av| 91精品国产乱码久久久久久| 色综合久久久久| 无码伊人66久久大杳蕉网站谷歌| 久久精品国产秦先生| 伊人久久大香线蕉综合网站| 久久无码国产专区精品| 草草久久久无码国产专区| 人妻无码精品久久亚瑟影视| 狠狠色狠狠色综合久久| 久久国产精品二国产精品| 乱亲女H秽乱长久久久| 99久久综合狠狠综合久久| 久久精品国产亚洲精品2020| 51久久夜色精品国产| 久久99精品久久久久久hb无码 | 国产精品欧美亚洲韩国日本久久 | 久久久久99精品成人片| .精品久久久麻豆国产精品| 久久久www免费人成精品|