NewtParser.h

説明を見る。
00001 /*------------------------------------------------------------------------*/
00013 #ifndef NEWTPARSE_H
00014 #define NEWTPARSE_H
00015 
00016 /* ヘッダファイル */
00017 #include <stdio.h>
00018 
00019 #include "NewtType.h"
00020 #include "NewtConf.h"
00021 
00022 
00023 /* マクロ */
00024 
00025 /*
00026 #define kNPSSyntaxNodeMask          0x80000003                                          ///< オブジェクト参照のマスク(構文木ノード用)
00027 
00028 #define NPSRefIsSyntaxNode(r)       ((r & kNPSSyntaxNodeMask) == kNPSSyntaxNodeMask)    ///< オブジェクト参照が構文木ノードか?
00029 #define NPSRefToSyntaxNode(r)       (((uint32_t)r & 0x7fffffff) >> 2)                   ///< オブジェクト参照を構文木ノードに変換
00030 #define NPSMakeSyntaxNode(v)        ((v << 2) | kNPSSyntaxNodeMask)                     ///< 構文木ノードのオブジェクト参照を作成
00031 */
00032 
00033 #define kNPSSyntaxNodeMask          0x0000000e                                  
00034 
00035 #define NPSRefIsSyntaxNode(r)       ((r & 0x0000000f) == kNPSSyntaxNodeMask)    
00036 #define NPSRefToSyntaxNode(r)       ((uint32_t)r >> 4)                          
00037 #define NPSMakeSyntaxNode(v)        ((v << 4) | kNPSSyntaxNodeMask)             
00038 
00039 
00040 /* 定数 */
00041 
00043 enum {
00044     kNPS_NOT                = 256,  
00045     kNPS_DIV,                       
00046     kNPS_MOD,                       
00047     kNPS_SHIFT_LEFT,                
00048     kNPS_SHIFT_RIGHT,               
00049     kNPS_NOT_EQUAL,                 
00050     kNPS_GREATER_EQUAL,             
00051     kNPS_LESS_EQUAL,                
00052     kNPS_OBJECT_EQUAL,              
00053     kNPS_CONCAT2,                   
00054 };
00055 
00057 enum {
00058     kNPSPop                 = 000,  
00059     kNPSDup                 = 001,  
00060     kNPSReturn              = 002,  
00061     kNPSPushSelf            = 003,  
00062     kNPSSetLexScope         = 004,  
00063     kNPSIterNext            = 005,  
00064     kNPSIterDone            = 006,  
00065     kNPSPopHandlers         = 007,  
00066 
00067     kNPSPush                = 0030, 
00068     kNPSPushConstant        = 0040, 
00069     kNPSCall                = 0050, 
00070     kNPSInvoke              = 0060, 
00071     kNPSSend                = 0070, 
00072     kNPSSendIfDefined       = 0100, 
00073     kNPSResend              = 0110, 
00074     kNPSResendIfDefined     = 0120, 
00075     kNPSBranch              = 0130, 
00076     kNPSBranchIfTrue        = 0140, 
00077     kNPSBranchIfFalse       = 0150, 
00078     kNPSFindVar             = 0160, 
00079     kNPSGetVar              = 0170, 
00080     kNPSMakeFrame           = 0200, 
00081     kNPSMakeArray           = 0210, 
00082     kNPSGetPath             = 0220, 
00083     kNPSSetPath             = 0230, 
00084     kNPSSetVar              = 0240, 
00085     kNPSFindAndSetVar       = 0250, 
00086     kNPSIncrVar             = 0260, 
00087     kNPSBranchIfLoopNotDone = 0270, 
00088     kNPSFreqFunc            = 0300, 
00089     kNPSNewHandlers         = 0310, 
00090 
00091     // 30x freq-func
00092     kNPSAdd                 = 03000,
00093     kNPSSubtract,                   
00094     kNPSAref,                       
00095     kNPSSetAref,                    
00096     kNPSEquals,                     
00097     kNPSNot,                        
00098     kNPSNotEqual,                   
00099     kNPSMultiply,                   
00100     kNPSDivide,                     
00101     kNPSDiv,                        
00102     kNPSLessThan,                   
00103     kNPSGreaterThan,                
00104     kNPSGreaterOrEqual,             
00105     kNPSLessOrEqual,                
00106     kNPSBitAnd,                     
00107     kNPSBitOr,                      
00108     kNPSBitNot,                     
00109     kNPSNewIterator,                
00110     kNPSLength,                     
00111     kNPSClone,                      
00112     kNPSSetClass,                   
00113     kNPSAddArraySlot,               
00114     kNPSStringer,                   
00115     kNPSHasPath,                    
00116     kNPSClassOf,                    
00117 
00118     // 40x syntax
00119     kNPSConstituentList     = 04000,
00120     kNPSCommaList,
00121     kNPSConstant,
00122     kNPSGlobal,
00123     kNPSLocal,
00124     kNPSGlobalFn,
00125     kNPSFunc,
00126     kNPSArg,
00127     kNPSIndefinite,
00128     kNPSMessage,
00129     kNPSLvalue,
00130     kNPSAsign,
00131     kNPSExists,
00132     kNPSMethodExists,
00133     kNPSTry,
00134     kNPSOnexception,
00135     kNPSOnexceptionList,
00136     kNPSIf,
00137     kNPSLoop,
00138     kNPSFor,
00139     kNPSForeach,
00140     kNPSWhile,
00141     kNPSRepeat,
00142     kNPSBreak,
00143     kNPSSlot,
00144     kNPSConcat,                             
00145     kNPSConcat2,                            
00146     kNPSAnd,                                
00147     kNPSOr,                                 
00148 
00149     // function
00150     kNPSMod,                                
00151     kNPSShiftLeft,                          
00152     kNPSShiftRight,                         
00153 
00154     // 独自拡張
00155     kNPSObjectEqual,                        
00156     kNPSMakeRegex,                          
00157 
00158     // Unknown
00159     KNPSUnknownCode     = 0xffffffff        
00160 };
00161 
00162 
00164 enum {
00165     kNPSKindNone,       
00166     kNPSKindLink,       
00167     kNPSKindObject      
00168 };
00169 
00170 
00171 /* 型宣言 */
00172 
00174 typedef newtRef     nps_node_t;
00175 
00176 
00178 typedef struct {
00179     uint32_t    code;   
00180     nps_node_t  op1;    
00181     nps_node_t  op2;    
00182 } nps_syntax_node_t;
00183 
00184 
00186 typedef struct {
00187     bool            first_time;         
00188 
00189     uint16_t        numwarns;           
00190     uint16_t        numerrs;            
00191 
00192     const char *    fname;              
00193     uint32_t        lineno;             
00194     uint32_t        tokenpos;           
00195     uint16_t        yyleng;             
00196     char            linebuf[NEWT_LEX_LINEBUFFSIZE];  
00197 } nps_env_t;
00198 
00199 
00200 /* グローバル変数 */
00201 extern nps_env_t    nps_env;        
00202 
00203 
00204 /* 関数プロトタイプ */
00205 
00206 #ifdef __cplusplus
00207 extern "C" {
00208 #endif
00209 
00210 
00211 int         nps_yyinput(FILE * yyin, char * buff, int max_size);
00212 void        nps_yyinit(void);
00213 int         nps_yycleanup(void);
00214 
00215 
00216 newtErr     NPSParse(const char * path, nps_syntax_node_t ** streeP, uint32_t * sizeP, bool is_file);
00217 
00218 newtErr     NPSParseFile(const char * path,
00219                     nps_syntax_node_t ** streeP, uint32_t * sizeP);
00220 
00221 newtErr     NPSParseStr(const char * s,
00222                     nps_syntax_node_t ** streeP, uint32_t * sizeP);
00223 
00224 void        NPSCleanup(void);
00225 void        NPSDumpSyntaxTree(FILE * f, nps_syntax_node_t * stree, uint32_t size);
00226 
00227 //nps_node_t    NPSGetCX(void);
00228 
00229 nps_node_t  NPSGenNode0(uint32_t code);
00230 nps_node_t  NPSGenNode1(uint32_t code, nps_node_t op1);
00231 nps_node_t  NPSGenNode2(uint32_t code, nps_node_t op1, nps_node_t op2);
00232 
00233 nps_node_t  NPSGenOP1(uint32_t op, nps_node_t op1);
00234 nps_node_t  NPSGenOP2(uint32_t op, nps_node_t op1, nps_node_t op2);
00235 
00236 nps_node_t  NPSGenSend(nps_node_t receiver,
00237                     uint32_t op, nps_node_t msg, nps_node_t args);
00238 nps_node_t  NPSGenResend(uint32_t op, nps_node_t msg, nps_node_t args);
00239 
00240 nps_node_t  NPSGenIfThenElse(nps_node_t cond, nps_node_t ifthen, nps_node_t ifelse);
00241 nps_node_t  NPSGenForLoop(nps_node_t index, nps_node_t v,
00242                     nps_node_t to, nps_node_t by, nps_node_t expr);
00243 nps_node_t  NPSGenForeach(nps_node_t index, nps_node_t val, nps_node_t obj,
00244                     nps_node_t deeply, nps_node_t op, nps_node_t expr);
00245 nps_node_t  NPSGenGlobalFn(nps_node_t name, nps_node_t args, nps_node_t expr);
00246 
00247 newtRef     NPSMakePathExpr(newtRefArg sym1, newtRefArg sym2);
00248 newtRef     NPSMakeArray(newtRefArg v);
00249 newtRef     NPSAddArraySlot(newtRefArg r, newtRefArg v);
00250 newtRef     NPSInsertArraySlot(newtRefArg r, uint32_t p, newtRefArg v);
00251 
00252 newtRef     NPSMakeMap(newtRefArg v);
00253 newtRef     NPSMakeFrame(newtRefArg slot, newtRefArg v);
00254 newtRef     NPSSetSlot(newtRefArg r, newtRefArg slot, newtRefArg v);
00255 
00256 newtRef     NPSMakeBinary(newtRefArg v);
00257 newtRef     NPSAddARef(newtRefArg r, newtRefArg v);
00258 
00259 void        NPSErrorStr(char c, char * s);
00260 void        NPSError(int32_t err);
00261 
00262 
00263 #ifdef __cplusplus
00264 }
00265 #endif
00266 
00267 
00268 #endif /* NEWTPARSE_H */
00269 

NEWT/0に対してThu Nov 23 16:50:43 2006に生成されました。  doxygen 1.5.0