• <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  評(píng)論-2670  文章-0  trackbacks-0

                今天照著C Minus的語(yǔ)法(略有修改)設(shè)計(jì)出了C Minus的語(yǔ)法樹(shù)。語(yǔ)法樹(shù)的設(shè)計(jì)盡量讓生成語(yǔ)法樹(shù)的代碼易于編寫(xiě)。每一個(gè)結(jié)構(gòu)的意義十分明確,而且結(jié)構(gòu)與結(jié)構(gòu)之間不需要有相互聯(lián)系。舉個(gè)例子,在生成語(yǔ)法樹(shù)的時(shí)候,一個(gè)變量定義“Point p;”由兩部分組成。其中第一部分是字符串"Point"而不是指向一個(gè)類(lèi)型定義的指針TypeDeclaration*。當(dāng)然至于Point代表什么,自有語(yǔ)義分析器代為理解。

                過(guò)幾天等畢業(yè)論文初稿寫(xiě)完了,我將使用Vczh Combinator Parser為C Minus構(gòu)造語(yǔ)法分析器。前天為Vczh Combinator Parser加上了錯(cuò)誤處理的能力,至此這個(gè)工具已經(jīng)可以為編譯器服務(wù)了。

                語(yǔ)法樹(shù)分為四大部分,其功能由四套類(lèi)繼承結(jié)構(gòu)承擔(dān),基類(lèi)分別是:
                VL_CMinusType:類(lèi)型表達(dá)式
                VL_CMinusExpression:值表達(dá)式
                VL_CMinusStatement:語(yǔ)句表達(dá)式
                VL_CMinusDeclaration:程序全局對(duì)象聲明

                下面是語(yǔ)法樹(shù)的代碼:

              1 /*******************************************************************************
              2 Vczh Library++ 2.0
              3 JIT::C簡(jiǎn)化版語(yǔ)法樹(shù)
              4 開(kāi)發(fā)者:陳梓瀚
              5 *******************************************************************************/
              6 #ifndef VL_JIT_CMINUS
              7 #define VL_JIT_CMINUS
              8 
              9 #include "..\..\..\Data\Data\VL_Data_Basic.h"
             10 #include "..\..\..\Data\Data\VL_Data_String.h"
             11 #include "..\..\..\Data\Data\VL_Data_List.h"
             12 #include "..\..\..\Data\Data\VL_Data_Map.h"
             13 
             14 namespace vl
             15 {
             16     namespace jit
             17     {
             18         namespace cminus
             19         {
             20             using namespace collection;
             21 
             22             class VL_CMinusExpressionInfo : public VL_Base
             23             {
             24             public:
             25                 VInt                            Line;
             26 
             27                 VL_CMinusExpressionInfo();
             28             };
             29 
             30 /*********************************************************************************************************
             31 類(lèi)型表達(dá)式
             32 *********************************************************************************************************/
             33 
             34             class VL_CMinusType : public VL_Base
             35             {
             36             public:
             37                 typedef VL_AutoPtr<VL_CMinusType>                            Ptr;
             38                 typedef VL_List<Ptr , false , VL_CMinusType>                List;
             39                 typedef VL_List<VL_Fullpair<VUnicodeString , Ptr> , false>    NamedList;
             40 
             41                 VL_CMinusExpressionInfo            Info;
             42             };
             43 
             44             class VL_CMinusNamedType : public VL_CMinusType
             45             {
             46             public:
             47                 VUnicodeString                    Name;
             48 
             49                 VL_CMinusNamedType();
             50                 VL_CMinusNamedType(VUnicodeString aName);
             51             };
             52 
             53             class VL_CMinusPointerType : public VL_CMinusType
             54             {
             55             public:
             56                 VL_CMinusType::Ptr                Type;
             57 
             58                 VL_CMinusPointerType();
             59                 VL_CMinusPointerType(VL_CMinusType::Ptr aType);
             60             };
             61 
             62             class VL_CMinusArrayType : public VL_CMinusType
             63             {
             64             public:
             65                 VL_CMinusType::Ptr                Type;
             66                 VInt                            Count;
             67 
             68                 VL_CMinusArrayType();
             69                 VL_CMinusArrayType(VL_CMinusType::Ptr aType , VInt aCount);
             70             };
             71 
             72             class VL_CMinusFunctionType : public VL_CMinusType
             73             {
             74             public:
             75                 VL_CMinusType::Ptr                ReturnType;
             76                 VL_CMinusType::List                ParameterTypes;
             77 
             78                 VL_CMinusFunctionType();
             79                 VL_CMinusFunctionType(VL_CMinusType::Ptr aReturnType , VL_CMinusType::List& aParameterTypes);
             80             };
             81 
             82             class VL_CMinusStructType : public VL_CMinusType
             83             {
             84             public:
             85                 VL_CMinusType::NamedList        MemberTypes;
             86 
             87                 VL_CMinusStructType();
             88                 VL_CMinusStructType(VL_CMinusType::NamedList& aMemberTypes);
             89             };
             90 
             91 /*********************************************************************************************************
             92 值表達(dá)式
             93 *********************************************************************************************************/
             94 
             95             class VL_CMinusExpression : public VL_Base
             96             {
             97             public:
             98                 typedef VL_AutoPtr<VL_CMinusExpression>                        Ptr;
             99                 typedef VL_List<Ptr , false , VL_CMinusExpression>            List;
            100                 typedef VL_List<VL_Fullpair<VUnicodeString , Ptr> , false>    NamedList;
            101 
            102                 VL_CMinusExpressionInfo            Info;
            103             };
            104 
            105             enum VLE_CMinusPrimitiveKind
            106             {
            107                 vcpkInt,
            108                 vcpkFloat,
            109                 vcpkBool,
            110                 vcpkChar,
            111                 vcpkWChar,
            112                 vcpkString,
            113                 vcpkWString,
            114                 vcpkName,
            115                 vcpkNull
            116             };
            117             class VL_CMinusPrimitiveExpression : public VL_CMinusExpression
            118             {
            119             public:
            120                 VLE_CMinusPrimitiveKind            Kind;
            121                 VInt                            IntValue;
            122                 VDouble                            FloatValue;
            123                 VBool                            BoolValue;
            124                 VWChar                            CharValue;
            125                 VUnicodeString                    StringValue;
            126 
            127                 VL_CMinusPrimitiveExpression(VInt Value);
            128                 VL_CMinusPrimitiveExpression(VDouble Value);
            129                 VL_CMinusPrimitiveExpression(VBool Value);
            130                 VL_CMinusPrimitiveExpression(VWChar Value , VBool Unicode);
            131                 VL_CMinusPrimitiveExpression(VUnicodeString Value , VBool Unicode);
            132                 VL_CMinusPrimitiveExpression(VUnicodeString Value);
            133             };
            134 
            135             enum VLE_CMinusUnaryOperator
            136             {
            137                 vcuoPositive,
            138                 vcuoNegative,
            139                 vcuoBitNot,
            140                 vcuoNot,
            141                 vcboAddress,
            142                 vcboValue
            143             };
            144             class VL_CMinusUnaryExpression : public VL_CMinusExpression
            145             {
            146             public:
            147                 VLE_CMinusUnaryOperator            Operator;
            148                 VL_CMinusExpression::Ptr        Expression;
            149 
            150                 VL_CMinusUnaryExpression();
            151                 VL_CMinusUnaryExpression(VLE_CMinusUnaryOperator aOperator , VL_CMinusExpression::Ptr aExpression);
            152             };
            153 
            154             enum VLE_CMinusBinaryOperator
            155             {
            156                 vcboAdd,
            157                 vcboSub,
            158                 vcboMul,
            159                 vcboDiv,
            160                 vcboMod,
            161                 vcboBitAnd,
            162                 vcboBitOr,
            163                 vcboBitXor,
            164                 vcboAnd,
            165                 vcboOr,
            166                 vcboXor,
            167                 vcboLess,
            168                 vcboLessAndEqual,
            169                 vcboGreater,
            170                 vcboGreaterAndEqual,
            171                 vcboEqual,
            172                 vcboNotEqual,
            173                 vcboSubScript,
            174             };
            175             class VL_CMinusBinaryExpression : public VL_CMinusExpression
            176             {
            177             public:
            178                 VLE_CMinusBinaryOperator        Operator;
            179                 VL_CMinusExpression::Ptr        Left;
            180                 VL_CMinusExpression::Ptr        Right;
            181 
            182                 VL_CMinusBinaryExpression();
            183                 VL_CMinusBinaryExpression(VLE_CMinusBinaryOperator aOperator , VL_CMinusExpression::Ptr aLeft , VL_CMinusExpression::Ptr aRight);
            184             };
            185 
            186             class VL_CMinusInvokeExpression : public VL_CMinusExpression
            187             {
            188             public:
            189                 VL_CMinusExpression::Ptr        Function;
            190                 VL_CMinusExpression::List        Parameters;
            191 
            192                 VL_CMinusInvokeExpression();
            193                 VL_CMinusInvokeExpression(VL_CMinusExpression::Ptr aFunction , VL_CMinusExpression::List& aParameters);
            194             };
            195 
            196             class VL_CMinusTypeCastExpression : public VL_CMinusExpression
            197             {
            198             public:
            199                 VL_CMinusType::Ptr                Type;
            200                 VL_CMinusExpression::Ptr        Expression;
            201 
            202                 VL_CMinusTypeCastExpression();
            203                 VL_CMinusTypeCastExpression(VL_CMinusType::Ptr aType , VL_CMinusExpression::Ptr aExpression);
            204             };
            205 
            206             class VL_CMinusArrayBuildingExpression : public VL_CMinusExpression
            207             {
            208             public:
            209                 VL_CMinusType::Ptr                Type;
            210                 VL_CMinusExpression::List        Expressions;
            211 
            212                 VL_CMinusArrayBuildingExpression();
            213                 VL_CMinusArrayBuildingExpression(VL_CMinusType::Ptr aType , VL_CMinusExpression::List& aExpressions);
            214             };
            215 
            216             class VL_CMinusStructBuildingExpression : public VL_CMinusExpression
            217             {
            218             public:
            219                 VL_CMinusType::Ptr                Type;
            220                 VL_CMinusExpression::NamedList    MemberValues;
            221 
            222                 VL_CMinusStructBuildingExpression();
            223                 VL_CMinusStructBuildingExpression(VL_CMinusType::Ptr aType , VL_CMinusExpression::NamedList& aMemberValues);
            224             };
            225 
            226 /*********************************************************************************************************
            227 語(yǔ)句表達(dá)式
            228 *********************************************************************************************************/
            229 
            230             class VL_CMinusStatement : public VL_Base
            231             {
            232             public:
            233                 typedef VL_AutoPtr<VL_CMinusStatement>                Ptr;
            234                 typedef VL_List<Ptr , false , VL_CMinusStatement*>    List;
            235 
            236                 VL_CMinusExpressionInfo            Info;
            237             };
            238 
            239             class VL_CMinusVariableStatement : public VL_CMinusStatement
            240             {
            241             public:
            242                 VBool                            Const;
            243                 VUnicodeString                    Name;
            244                 VL_CMinusType::Ptr                Type;
            245                 VL_CMinusExpression::Ptr        Expression;
            246 
            247                 VL_CMinusVariableStatement();
            248                 VL_CMinusVariableStatement(VBool aConst , VUnicodeString aName , VL_CMinusType::Ptr aType , VL_CMinusExpression::Ptr aExpression);
            249             };
            250 
            251             class VL_CMinusExpressionStatement : public VL_CMinusStatement
            252             {
            253             public:
            254                 VL_CMinusExpression::Ptr        Expression;
            255 
            256                 VL_CMinusExpressionStatement();
            257                 VL_CMinusExpressionStatement(VL_CMinusExpression::Ptr aExpression);
            258             };
            259 
            260             enum VLE_CMinusAssignmentOperator
            261             {
            262                 vcaoAssignment,
            263                 vcaoAdd,
            264                 vcaoSub,
            265                 vcaoMul,
            266                 vcaoDiv,
            267                 vcaoMod,
            268                 vcaoBitAnd,
            269                 vcaoBitOr,
            270                 vcaoBitXor,
            271                 vcaoAnd,
            272                 vcaoOr,
            273                 vcaoXor
            274             };
            275             class VL_CMinusAssignmentStatement : public VL_CMinusStatement
            276             {
            277             public:
            278                 VLE_CMinusAssignmentOperator    Operator;
            279                 VL_CMinusExpression::Ptr        Left;
            280                 VL_CMinusExpression::Ptr        Right;
            281 
            282                 VL_CMinusAssignmentStatement();
            283                 VL_CMinusAssignmentStatement(VLE_CMinusAssignmentOperator aOperator , VL_CMinusExpression::Ptr aLeft , VL_CMinusExpression::Ptr aRight);
            284             };
            285 
            286             class VL_CMinusIfStatement : public VL_CMinusStatement
            287             {
            288             public:
            289                 VL_CMinusExpression::Ptr        Condition;
            290                 VL_CMinusStatement::Ptr            TrueBody;
            291                 VL_CMinusStatement::Ptr            FalseBody;
            292 
            293                 VL_CMinusIfStatement();
            294                 VL_CMinusIfStatement(VL_CMinusExpression::Ptr aCondition , VL_CMinusStatement::Ptr aTrueBody , VL_CMinusStatement::Ptr aFalseBody);
            295             };
            296 
            297             class VL_CMinusWhileStatement : public VL_CMinusStatement
            298             {
            299             public:
            300                 VL_CMinusExpression::Ptr        Condition;
            301                 VL_CMinusStatement::Ptr            Body;
            302 
            303                 VL_CMinusWhileStatement();
            304                 VL_CMinusWhileStatement(VL_CMinusExpression::Ptr aCondition , VL_CMinusStatement::Ptr aBody);
            305             };
            306 
            307             class VL_CMinusDoWhileStatement : public VL_CMinusStatement
            308             {
            309             public:
            310                 VL_CMinusExpression::Ptr        Condition;
            311                 VL_CMinusStatement::Ptr            Body;
            312 
            313                 VL_CMinusDoWhileStatement();
            314                 VL_CMinusDoWhileStatement(VL_CMinusExpression::Ptr aCondition , VL_CMinusStatement::Ptr aBody);
            315             };
            316 
            317             class VL_CMinusBreakStatement : public VL_CMinusStatement
            318             {
            319             public:
            320             };
            321 
            322             class VL_CMinusContinueStatement : public VL_CMinusStatement
            323             {
            324             public:
            325             };
            326 
            327             class VL_CMinusReturnStatement : public VL_CMinusStatement
            328             {
            329             public:
            330                 VL_CMinusExpression::Ptr        Expression;
            331 
            332                 VL_CMinusReturnStatement();
            333                 VL_CMinusReturnStatement(VL_CMinusExpression::Ptr aExpression);
            334             };
            335 
            336             class VL_CMinusBlockStatement : public VL_CMinusStatement
            337             {
            338             public:
            339                 VL_CMinusStatement::List        Statements;
            340 
            341                 VL_CMinusBlockStatement();
            342                 VL_CMinusBlockStatement(VL_CMinusStatement::List& aStatements);
            343             };
            344 
            345 /*********************************************************************************************************
            346 程序結(jié)構(gòu)
            347 *********************************************************************************************************/
            348 
            349             class VL_CMinusDeclaration : public VL_Base
            350             {
            351             public:
            352                 typedef VL_AutoPtr<VL_CMinusDeclaration>                Ptr;
            353                 typedef VL_List<Ptr , false , VL_CMinusDeclaration*>    List;
            354 
            355                 VL_CMinusExpressionInfo            Info;
            356                 VUnicodeString                    Name;
            357             };
            358 
            359             class VL_CMinusTypeDeclaration : public VL_CMinusDeclaration
            360             {
            361             public:
            362                 VL_CMinusType::Ptr                Type;
            363 
            364                 VL_CMinusTypeDeclaration();
            365                 VL_CMinusTypeDeclaration(VUnicodeString aName , VL_CMinusType::Ptr aType);
            366             };
            367 
            368             class VL_CMinusVariableDeclaration : public VL_CMinusDeclaration
            369             {
            370             public:
            371                 VBool                            Const;
            372                 VL_CMinusType::Ptr                Type;
            373                 VL_CMinusExpression::Ptr        Expression;
            374 
            375                 VL_CMinusVariableDeclaration();
            376                 VL_CMinusVariableDeclaration(VUnicodeString aName , VBool aConst , VL_CMinusType::Ptr aType , VL_CMinusExpression::Ptr aExpression);
            377             };
            378 
            379             class VL_CMinusFunctionDeclaration : public VL_CMinusDeclaration
            380             {
            381             public:
            382                 VL_CMinusType::Ptr                ReturnType;
            383                 VL_CMinusType::NamedList        ParameterTypes;
            384                 VL_CMinusStatement::Ptr            Body;
            385 
            386                 VL_CMinusFunctionDeclaration();
            387                 VL_CMinusFunctionDeclaration(VUnicodeString aName , VL_CMinusType::Ptr aReturnType , VL_CMinusType::NamedList& aParameterTypes , VL_CMinusStatement::Ptr aBody);
            388             };
            389 
            390             class VL_CMinusExternalFunctionDeclaration : public VL_CMinusDeclaration
            391             {
            392             public:
            393                 VL_CMinusType::Ptr                ReturnType;
            394                 VL_CMinusType::List                ParameterTypes;
            395                 VUnicodeString                    Alias;
            396 
            397                 VL_CMinusExternalFunctionDeclaration();
            398                 VL_CMinusExternalFunctionDeclaration(VUnicodeString aName , VL_CMinusType::Ptr aReturnType , VL_CMinusType::List& aParameterTypes , VUnicodeString aAlias);
            399             };
            400 
            401             class VL_CMinusProgram : public VL_Base
            402             {
            403             public:
            404                 VL_CMinusDeclaration::List        Declarations;
            405             };
            406         }
            407     }
            408 }
            409 
            410 #endif
            posted on 2009-04-24 00:58 陳梓瀚(vczh) 閱讀(3071) 評(píng)論(5)  編輯 收藏 引用 所屬分類(lèi): JIT

            評(píng)論:
            # re: JIT腳本引擎:C Minus語(yǔ)言語(yǔ)法樹(shù)定型 2009-04-26 22:42 | yindf
            整個(gè)定義看起來(lái)很清晰,不知道后面的實(shí)現(xiàn)怎么樣?  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:C Minus語(yǔ)言語(yǔ)法樹(shù)定型 2009-04-27 05:33 | 陳梓瀚(vczh)
            語(yǔ)法分析不是接口的一部分,是用來(lái)給測(cè)試程序調(diào)用的,所以再爛都無(wú)所謂。不過(guò)我用了之前自己做的combinator parser,寫(xiě)得再亂也很清晰。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:C Minus語(yǔ)言語(yǔ)法樹(shù)定型 2009-04-28 16:58 | 空明流轉(zhuǎn)
            @陳梓瀚(vczh)
            NO,這個(gè)最清晰了:我在QQ上喊一句,vc啊,幫我做個(gè)編譯器吧。你就幫我把方案搞定,嘎嘎。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:C Minus語(yǔ)言語(yǔ)法樹(shù)定型 2009-04-29 09:20 | au
            # re: JIT腳本引擎:C Minus語(yǔ)言語(yǔ)法樹(shù)定型 2009-05-18 16:29 | 旱圣
            T_T.........
            沒(méi)看懂。。。。。  回復(fù)  更多評(píng)論
              
            7777精品久久久大香线蕉| 色偷偷88888欧美精品久久久| 99久久99这里只有免费的精品| 丰满少妇人妻久久久久久 | 欧洲国产伦久久久久久久| 久久亚洲中文字幕精品一区| 亚洲日本va中文字幕久久| 免费观看久久精彩视频| 久久天天躁狠狠躁夜夜2020一 | 国产亚洲美女精品久久久2020| 精品久久8x国产免费观看| 久久久久久久久久久免费精品| 亚洲香蕉网久久综合影视 | 亚洲精品无码久久毛片| 午夜精品久久久久久99热| 国内精品伊人久久久久网站| 综合人妻久久一区二区精品| 久久久久99精品成人片| 国产精品欧美久久久天天影视| 久久亚洲精品国产亚洲老地址 | 国产99久久久国产精品~~牛| 久久午夜福利无码1000合集| 久久精品成人欧美大片| 久久精品www| 人妻无码中文久久久久专区| 久久免费99精品国产自在现线| 久久久精品2019免费观看| 久久强奷乱码老熟女网站| 久久国产一片免费观看| 久久精品国产亚洲综合色| 久久久久99精品成人片直播| 亚洲愉拍99热成人精品热久久| 久久人与动人物a级毛片| 亚洲欧美另类日本久久国产真实乱对白| 久久婷婷综合中文字幕| 精品国产福利久久久| 亚洲国产精品无码久久久不卡| 免费无码国产欧美久久18| 久久久国产视频| 国内高清久久久久久| 国产亚洲精久久久久久无码77777|