青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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

    我將ManagedX的語(yǔ)法分為兩部分。第一部分是基礎(chǔ)部分,第二部分則是擴(kuò)展部分。將他們分開(kāi)的依據(jù)就是,一個(gè)基于擴(kuò)展部分的程序,總是可以被重寫為一個(gè)功能完全一致但是僅基于基礎(chǔ)部分的比較復(fù)雜的程序。舉一個(gè)簡(jiǎn)單的例子。我們知道lambda表達(dá)式在一門面向?qū)ο笳Z(yǔ)言中并不是必需的,它只是一個(gè)語(yǔ)法糖。如果我們?cè)诿嫦驅(qū)ο笳Z(yǔ)言中把函數(shù)指針統(tǒng)統(tǒng)抽象成一個(gè)基類或者接口(就跟C#的Delegate一樣)的話,一個(gè)lambda表達(dá)式總是可以被表達(dá)成一個(gè)新的類型,然后只需要重新組織一下生成該lambda表達(dá)式的函數(shù)的局部變量,就可以把lambda表達(dá)是去掉了。當(dāng)然lambda表達(dá)式作為一個(gè)語(yǔ)法來(lái)說(shuō)是必需的,因?yàn)樗蟠筇岣吡碎_(kāi)發(fā)效率。但是對(duì)于編譯過(guò)程來(lái)說(shuō)又不是必需的,因?yàn)樗偸强梢杂米詣?dòng)重寫的方法來(lái)去掉。

    因此ManagedX的編譯過(guò)程就比較清晰了:
    1、我們接受一個(gè)基于擴(kuò)展部分的程序,然后經(jīng)過(guò)第一輪的語(yǔ)法分析,得到語(yǔ)法樹(shù)上面所有節(jié)點(diǎn)的類型信息和引用信息。
    2、根據(jù)分析出來(lái)的信息,將該程序重寫為僅基于基礎(chǔ)部分的程序。在重寫的過(guò)程中會(huì)使得信息不會(huì)丟失(特別是ManagedX支持反射,而反射卻可以支持?jǐn)U展部分,所以需要做很多小動(dòng)作來(lái)維持重寫前后的程序運(yùn)行上的一致性)
    3、對(duì)重寫出來(lái)的新程序重新進(jìn)行語(yǔ)法分析。
    4、根據(jù)分析出來(lái)的信息,將它編譯成NativeX

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

    下面貼一下ManagedX那將近900行的語(yǔ)法樹(shù):(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) 閱讀(3253) 評(píng)論(17)  編輯 收藏 引用 所屬分類: VL++3.0開(kāi)發(fā)紀(jì)事

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

膜拜大神啊,,,  回復(fù)  更多評(píng)論
  
# re: Vczh Library++3.0托管語(yǔ)言語(yǔ)法樹(shù)完成 2011-05-28 18:39 | 陳梓瀚(vczh)
@Enic
........  回復(fù)  更多評(píng)論
  
# re: Vczh Library++3.0托管語(yǔ)言語(yǔ)法樹(shù)完成[未登錄](méi) 2011-05-28 19:30 | 邱震鈺(zblc)
@陳梓瀚(vczh)
- -bnr ...... 原來(lái)如此 廣義上是這么回事  回復(fù)  更多評(píng)論
  
# re: Vczh Library++3.0托管語(yǔ)言語(yǔ)法樹(shù)完成 2011-05-29 02:13 | airtrack
額,還是膜拜下。  回復(fù)  更多評(píng)論
  
# re: Vczh Library++3.0托管語(yǔ)言語(yǔ)法樹(shù)完成 2011-05-30 01:29 | 千暮(zblc)
膜拜樓主啊~~~~~~~~~~~~~~~~~~~~~~~~
(每每看到樓主的帖子如此風(fēng)騷且韻味十足 我就情不自禁的想膜拜一下~~~~~~~~)  回復(fù)  更多評(píng)論
  
# re: Vczh Library++3.0托管語(yǔ)言語(yǔ)法樹(shù)完成[未登錄](méi) 2011-05-30 02:58 | connor
膜拜大神啊~~~~~~~~~~
求包 養(yǎng)~~~~~~~~~~  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久嫩草精品久久久精品一| 亚洲一区中文字幕在线观看| 国产丝袜一区二区| 久久精品一区二区| 中文久久乱码一区二区| 亚洲高清视频中文字幕| 国产视频亚洲| 国产欧美一区二区三区另类精品| 欧美日韩午夜视频在线观看| 欧美久久综合| 欧美无乱码久久久免费午夜一区| 欧美国产视频一区二区| 欧美精品一级| 欧美日韩国产精品专区| 久久天堂精品| 欧美xx视频| 欧美1区2区| 欧美国产精品久久| 欧美成人性生活| 欧美日本乱大交xxxxx| 欧美精品成人| 欧美视频网址| 免费日韩成人| 欧美激情综合在线| 欧美视频不卡中文| 国产午夜精品理论片a级大结局| 国产精品夜色7777狼人| 国内精品久久久久久久影视麻豆| 激情综合激情| 制服丝袜激情欧洲亚洲| 一区二区视频免费完整版观看| 亚洲视频欧美视频| 一区二区三区国产在线| 亚洲电影在线看| 亚洲精品在线二区| 伊人成年综合电影网| 亚洲日韩中文字幕在线播放| 中文国产一区| 老司机成人网| 日韩视频三区| 久久久久国产精品一区二区| 欧美理论在线| 国产一区二区三区精品久久久| 在线日韩中文字幕| 亚洲欧美一区二区激情| 一区二区三区四区五区视频 | 亚洲自拍偷拍色片视频| 久久精品国产免费观看| 国产精品欧美风情| 在线免费高清一区二区三区| 国产精品中文字幕欧美| 亚洲人成绝费网站色www| 久久九九久久九九| 99视频精品全部免费在线| 久久黄色小说| 国产精品日韩精品欧美在线| 亚洲国产精品va在线观看黑人| 性欧美8khd高清极品| 亚洲高清在线观看| 欧美午夜不卡视频| 免费成人高清视频| 极品少妇一区二区三区| 久久精品夜色噜噜亚洲a∨| 亚洲在线免费| 国产精品国内视频| 午夜精品久久久久久久| 亚洲小说区图片区| 国产乱子伦一区二区三区国色天香| 亚洲一区国产| 亚洲在线观看视频网站| 国产亚洲精品v| 久久久久亚洲综合| 老司机免费视频一区二区三区| 一区二区亚洲| 亚洲国产精品久久| 欧美日韩一二三区| 午夜精品一区二区三区电影天堂 | 亚洲一区二区三区在线视频| 欧美午夜一区二区三区免费大片 | 亚洲中字黄色| 午夜精品久久久久久久蜜桃app | 国产精品久久77777| 亚洲欧美日韩视频二区| 中文久久精品| 国产色爱av资源综合区| 久久久青草青青国产亚洲免观| 久久久91精品国产一区二区三区| 亚洲国产91| 99pao成人国产永久免费视频| 欧美日韩一区二区视频在线观看| 欧美一区网站| 欧美大色视频| 久久精品女人| 欧美精品手机在线| 欧美亚洲视频在线看网址| 久久激情视频久久| 一区二区欧美视频| 久久精品亚洲乱码伦伦中文| 9久草视频在线视频精品| 亚洲在线一区二区| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲高清色综合| 国产精品毛片一区二区三区| 欧美91精品| 国产乱码精品一区二区三区忘忧草| 久久字幕精品一区| 欧美午夜国产| 欧美福利视频网站| 国产精品美腿一区在线看| 欧美成va人片在线观看| 国产精品美女999| 亚洲福利视频在线| 激情久久中文字幕| 亚洲一区亚洲| 日韩视频在线一区二区三区| 亚洲欧美日韩系列| 一区二区电影免费观看| 久久久久久一区二区| 欧美一区二区三区在| 欧美午夜宅男影院| 91久久精品网| 亚洲高清精品中出| 欧美专区中文字幕| 欧美一区二区三区精品| 欧美日韩在线免费| 欧美激情视频一区二区三区不卡| 国内精品久久久久影院优| 中日韩美女免费视频网站在线观看| 国内成+人亚洲+欧美+综合在线| 99国产精品久久| 99re6热在线精品视频播放速度| 久久久久久9| 久久精品人人| 国产欧美一区二区色老头| 一区二区三区高清在线| 亚洲美女av黄| 美日韩精品免费观看视频| 久久三级福利| 国产一区二区三区久久精品| 亚洲天堂偷拍| 亚洲一区二区成人在线观看| 国内视频一区| 亚洲激情国产精品| 亚洲精品久久在线| 久久综合一区二区| 麻豆精品一区二区av白丝在线| 欧美一区二区三区在线看| 国产精品尤物| 欧美一级网站| 久久综合五月| 亚洲人成绝费网站色www| 欧美va天堂va视频va在线| 亚洲国产乱码最新视频| 亚洲裸体视频| 欧美午夜精品久久久| 亚洲午夜精品一区二区| 久久成人免费日本黄色| 国内精品久久久久久| 久久久噜噜噜久久人人看| 欧美成人精品三级在线观看| 最新国产拍偷乱拍精品| 欧美精品久久99| 一区二区电影免费在线观看| 亚洲男人天堂2024| 国产视频久久网| 快she精品国产999| 亚洲韩日在线| 亚洲欧美视频在线| 黄色小说综合网站| 欧美经典一区二区三区| 午夜在线播放视频欧美| 欧美成人精品一区二区三区| 一本色道久久88亚洲综合88| 国产精品国产三级国产aⅴ浪潮| 午夜老司机精品| 亚洲韩国日本中文字幕| 激情欧美一区二区三区| 免费视频最近日韩| 亚洲永久免费视频| 欧美激情国产日韩| 翔田千里一区二区| 亚洲嫩草精品久久| 欧美aa在线视频| 欧美亚洲一区二区在线观看| 狠狠色伊人亚洲综合网站色| 欧美精品在线视频| 欧美中文字幕精品| 一本一本久久a久久精品综合麻豆| 久久久久久九九九九| 亚洲一区二区三区欧美| 狠狠综合久久| 国产精品美女一区二区| 久久综合狠狠| 亚洲欧美综合精品久久成人| 亚洲黄色影院| 在线一区亚洲| 亚洲毛片播放| 国内久久精品| 国产无一区二区| 国产精品国产三级国产|