NewtParser.h

構文木の生成 [詳細]

#include <stdio.h>
#include "NewtType.h"
#include "NewtConf.h"

ソースコードを見る。

データ構造

struct  nps_syntax_node_t
 構文木ノード [詳細]
struct  nps_env_t
 パーサ環境 [詳細]

マクロ定義

#define kNPSSyntaxNodeMask   0x0000000e
 オブジェクト参照のマスク(構文木ノード用)
#define NPSRefIsSyntaxNode(r)   ((r & 0x0000000f) == kNPSSyntaxNodeMask)
 オブジェクト参照が構文木ノードか?
#define NPSRefToSyntaxNode(r)   ((uint32_t)r >> 4)
 オブジェクト参照を構文木ノードに変換
#define NPSMakeSyntaxNode(v)   ((v << 4) | kNPSSyntaxNodeMask)
 構文木ノードのオブジェクト参照を作成

型定義

typedef newtRef nps_node_t
 構文木ノードへのポインタ

列挙型

enum  {
  kNPS_NOT = 256, kNPS_DIV, kNPS_MOD, kNPS_SHIFT_LEFT,
  kNPS_SHIFT_RIGHT, kNPS_NOT_EQUAL, kNPS_GREATER_EQUAL, kNPS_LESS_EQUAL,
  kNPS_OBJECT_EQUAL, kNPS_CONCAT2
}
 オペレータコード [詳細]
enum  {
  kNPSPop = 000, kNPSDup = 001, kNPSReturn = 002, kNPSPushSelf = 003,
  kNPSSetLexScope = 004, kNPSIterNext = 005, kNPSIterDone = 006, kNPSPopHandlers = 007,
  kNPSPush = 0030, kNPSPushConstant = 0040, kNPSCall = 0050, kNPSInvoke = 0060,
  kNPSSend = 0070, kNPSSendIfDefined = 0100, kNPSResend = 0110, kNPSResendIfDefined = 0120,
  kNPSBranch = 0130, kNPSBranchIfTrue = 0140, kNPSBranchIfFalse = 0150, kNPSFindVar = 0160,
  kNPSGetVar = 0170, kNPSMakeFrame = 0200, kNPSMakeArray = 0210, kNPSGetPath = 0220,
  kNPSSetPath = 0230, kNPSSetVar = 0240, kNPSFindAndSetVar = 0250, kNPSIncrVar = 0260,
  kNPSBranchIfLoopNotDone = 0270, kNPSFreqFunc = 0300, kNPSNewHandlers = 0310, kNPSAdd = 03000,
  kNPSSubtract, kNPSAref, kNPSSetAref, kNPSEquals,
  kNPSNot, kNPSNotEqual, kNPSMultiply, kNPSDivide,
  kNPSDiv, kNPSLessThan, kNPSGreaterThan, kNPSGreaterOrEqual,
  kNPSLessOrEqual, kNPSBitAnd, kNPSBitOr, kNPSBitNot,
  kNPSNewIterator, kNPSLength, kNPSClone, kNPSSetClass,
  kNPSAddArraySlot, kNPSStringer, kNPSHasPath, kNPSClassOf,
  kNPSConstituentList = 04000, kNPSCommaList, kNPSConstant, kNPSGlobal,
  kNPSLocal, kNPSGlobalFn, kNPSFunc, kNPSArg,
  kNPSIndefinite, kNPSMessage, kNPSLvalue, kNPSAsign,
  kNPSExists, kNPSMethodExists, kNPSTry, kNPSOnexception,
  kNPSOnexceptionList, kNPSIf, kNPSLoop, kNPSFor,
  kNPSForeach, kNPSWhile, kNPSRepeat, kNPSBreak,
  kNPSSlot, kNPSConcat, kNPSConcat2, kNPSAnd,
  kNPSOr, kNPSMod, kNPSShiftLeft, kNPSShiftRight,
  kNPSObjectEqual, kNPSMakeRegex, KNPSUnknownCode = 0xffffffff
}
 パーサ用疑似命令 [詳細]
enum  { kNPSKindNone, kNPSKindLink, kNPSKindObject }
 構文木データの種類 [詳細]

関数

int nps_yyinput (FILE *yyin, char *buff, int max_size)
void nps_yyinit (void)
int nps_yycleanup (void)
newtErr NPSParse (const char *path, nps_syntax_node_t **streeP, uint32_t *sizeP, bool is_file)
newtErr NPSParseFile (const char *path, nps_syntax_node_t **streeP, uint32_t *sizeP)
newtErr NPSParseStr (const char *s, nps_syntax_node_t **streeP, uint32_t *sizeP)
void NPSCleanup (void)
void NPSDumpSyntaxTree (FILE *f, nps_syntax_node_t *stree, uint32_t size)
nps_node_t NPSGenNode0 (uint32_t code)
nps_node_t NPSGenNode1 (uint32_t code, nps_node_t op1)
nps_node_t NPSGenNode2 (uint32_t code, nps_node_t op1, nps_node_t op2)
nps_node_t NPSGenOP1 (uint32_t op, nps_node_t op1)
nps_node_t NPSGenOP2 (uint32_t op, nps_node_t op1, nps_node_t op2)
nps_node_t NPSGenSend (nps_node_t receiver, uint32_t op, nps_node_t msg, nps_node_t args)
nps_node_t NPSGenResend (uint32_t op, nps_node_t msg, nps_node_t args)
nps_node_t NPSGenIfThenElse (nps_node_t cond, nps_node_t ifthen, nps_node_t ifelse)
nps_node_t NPSGenForLoop (nps_node_t index, nps_node_t v, nps_node_t to, nps_node_t by, nps_node_t expr)
nps_node_t NPSGenForeach (nps_node_t index, nps_node_t val, nps_node_t obj, nps_node_t deeply, nps_node_t op, nps_node_t expr)
nps_node_t NPSGenGlobalFn (nps_node_t name, nps_node_t args, nps_node_t expr)
newtRef NPSMakePathExpr (newtRefArg sym1, newtRefArg sym2)
newtRef NPSMakeArray (newtRefArg v)
newtRef NPSAddArraySlot (newtRefArg r, newtRefArg v)
newtRef NPSInsertArraySlot (newtRefArg r, uint32_t p, newtRefArg v)
newtRef NPSMakeMap (newtRefArg v)
newtRef NPSMakeFrame (newtRefArg slot, newtRefArg v)
newtRef NPSSetSlot (newtRefArg r, newtRefArg slot, newtRefArg v)
newtRef NPSMakeBinary (newtRefArg v)
newtRef NPSAddARef (newtRefArg r, newtRefArg v)
void NPSErrorStr (char c, char *s)
void NPSError (int32_t err)

変数

nps_env_t nps_env
 パーサ環境


説明

構文木の生成

作者:
M.Nukui
日付:
2003-11-07
Copyright (C) 2003-2004 M.Nukui All rights reserved.

NewtParser.h で定義されています。


列挙型

anonymous enum

オペレータコード

列挙型の値:
kNPS_NOT  not
kNPS_DIV  div
kNPS_MOD  mod
kNPS_SHIFT_LEFT  <<
kNPS_SHIFT_RIGHT  >>
kNPS_NOT_EQUAL  <>
kNPS_GREATER_EQUAL  >=
kNPS_LESS_EQUAL  <=
kNPS_OBJECT_EQUAL  ==
kNPS_CONCAT2  &&

NewtParser.h43 行で定義されています。

anonymous enum

パーサ用疑似命令

列挙型の値:
kNPSPop  000 pop
kNPSDup  001 dup
kNPSReturn  002 return
kNPSPushSelf  003 push-self
kNPSSetLexScope  004 set-lex-scope
kNPSIterNext  005 iter-next
kNPSIterDone  006 iter-done
kNPSPopHandlers  007 000 001 pop-handlers
kNPSPush  03x push
kNPSPushConstant  04x (B signed) push-constant
kNPSCall  05x call
kNPSInvoke  06x invoke
kNPSSend  07x send
kNPSSendIfDefined  10x send-if-defined
kNPSResend  11x resend
kNPSResendIfDefined  12x resend-if-defined
kNPSBranch  13x branch
kNPSBranchIfTrue  14x branch-if-true
kNPSBranchIfFalse  15x branch-if-false
kNPSFindVar  16x find-var
kNPSGetVar  17x get-var
kNPSMakeFrame  20x make-frame
kNPSMakeArray  21x make-array
kNPSGetPath  220/221 get-path
kNPSSetPath  230/231 set-path
kNPSSetVar  24x set-var
kNPSFindAndSetVar  25x find-and-set-var
kNPSIncrVar  26x incr-var
kNPSBranchIfLoopNotDone  27x branch-if-loop-not-done
kNPSFreqFunc  30x freq-func
kNPSNewHandlers  31x new-handlers
kNPSAdd  0 add |+|
kNPSSubtract  1 subtract |-|
kNPSAref  2 aref aref
kNPSSetAref  3 set-aref setAref
kNPSEquals  4 equals |=|
kNPSNot  5 not |not|
kNPSNotEqual  6 not-equals |<>|
kNPSMultiply  7 multiply |*|
kNPSDivide  8 divide |/|
kNPSDiv  9 div |div|
kNPSLessThan  10 less-than |<|
kNPSGreaterThan  11 greater-than |>|
kNPSGreaterOrEqual  12 greater-or-equal |>=|
kNPSLessOrEqual  13 less-or-equal |<=|
kNPSBitAnd  14 bit-and BAnd
kNPSBitOr  15 bit-or BOr
kNPSBitNot  16 bit-not BNot
kNPSNewIterator  17 new-iterator newIterator
kNPSLength  18 length Length
kNPSClone  19 clone Clone
kNPSSetClass  20 set-class SetClass
kNPSAddArraySlot  21 add-array-slot AddArraySlot
kNPSStringer  22 stringer Stringer
kNPSHasPath  23 has-path none
kNPSClassOf  24 class-of ClassOf
kNPSConcat  &
kNPSConcat2  &&
kNPSAnd  and
kNPSOr  or
kNPSMod  mod
kNPSShiftLeft  <<
kNPSShiftRight  >>
kNPSObjectEqual  ==
kNPSMakeRegex  正規表現オブジェクトの生成
KNPSUnknownCode  不明な命令

NewtParser.h57 行で定義されています。

anonymous enum

構文木データの種類

列挙型の値:
kNPSKindNone  データなし
kNPSKindLink  リンク
kNPSKindObject  オブジェクト

NewtParser.h164 行で定義されています。


関数

int nps_yyinput ( FILE *  yyin,
char *  buff,
int  max_size 
)

構文解析するデータを取出す

引数:
yyin [in] 入力ファイル
buff [out]バッファ
max_size [in] 最大長
戻り値:
取出したデータサイズ

NewtParser.c120 行で定義されています。

参照先 nps_inputdata_t::datanps_inputdatanps_yyinput_str().

関数の呼び出しグラフ:

newtRef NPSAddARef ( newtRefArg  r,
newtRefArg  v 
)

バイナリオブジェクトの最後にデータを追加

引数:
r [in] バイナリオブジェクト
v [in] 追加するデータ
戻り値:
バイナリオブジェクト

NewtParser.c968 行で定義されています。

参照先 NewtBinaryLength()NewtBinarySetLength()NewtSetARef().

関数の呼び出しグラフ:

newtRef NPSAddArraySlot ( newtRefArg  r,
newtRefArg  v 
)

配列オブジェクトの最後にオブジェクトを追加する

引数:
r [in] 配列オブジェクト
v [in] 追加するオブジェクト
戻り値:
配列オブジェクト

NewtParser.c831 行で定義されています。

参照先 NcAddArraySlot().

関数の呼び出しグラフ:

void NPSCleanup ( void   ) 

構文解析の後始末

戻り値:
なし

NewtParser.c263 行で定義されています。

参照先 NewtStackFree()nps_stree.

参照元 NBCCompileFile()NBCCompileStr()NPSParse()NVMInterpret2().

関数の呼び出しグラフ:

void NPSDumpSyntaxTree ( FILE *  f,
nps_syntax_node_t stree,
uint32_t  size 
)

構文木をダンプする

引数:
f [in] 出力ファイル
stree [in] 構文木
size [in] 構文木のサイズ
戻り値:
なし

NewtParser.c414 行で定義されています。

参照先 nps_syntax_node_t::codekNPSAddkNPSFreqFunckNPSPopHandlersNewtFprintf()NPSPrintNode()NPSPrintSyntaxCode()NVMDumpInstName()nps_syntax_node_t::op1nps_syntax_node_t::op2.

参照元 NPSParse().

関数の呼び出しグラフ:

void NPSError ( int32_t  err  ) 

構文エラー

引数:
err [in] エラーコード
戻り値:
なし

NewtParser.c1022 行で定義されています。

参照先 yyerror().

参照元 NPSGenOP1()NPSGenOP2().

関数の呼び出しグラフ:

void NPSErrorStr ( char  c,
char *  s 
)

エラーメッセージの表示

引数:
c [in] エラー種別
s [in] エラーメッセージ
戻り値:
なし

NewtParser.c990 行で定義されています。

参照先 nps_env_t::fnamenps_env_t::linebufnps_env_t::linenoNewtFprintf()nps_envnps_env_t::numerrsnps_env_t::numwarnsnps_env_t::tokenposnps_env_t::yyleng.

参照元 yyerror().

関数の呼び出しグラフ:

nps_node_t NPSGenForeach ( nps_node_t  index,
nps_node_t  val,
nps_node_t  obj,
nps_node_t  deeply,
nps_node_t  op,
nps_node_t  expr 
)

FOREACH 文のオペノードを作成

引数:
index [in] インデックス変数
val [in] 値を格納する変数
obj [in] ループの対象となるオブジェクト
deeply [in] deeply フラグ
op [in] オペレーション種別(DO or COLLECT)
expr [in] 繰り返し式
戻り値:
ノード

NewtParser.c739 行で定義されています。

参照先 kNewtRefUnbindNewtMakeArray()NewtSetArraySlot()NPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenForLoop ( nps_node_t  index,
nps_node_t  v,
nps_node_t  to,
nps_node_t  by,
nps_node_t  expr 
)

FOR 文のオペノードを作成

引数:
index [in] インデックス変数
v [in] 初期値
to [in] 終了値
by [in] ステップ値
expr [in] 繰り返し式
戻り値:
ノード

NewtParser.c711 行で定義されています。

参照先 kNewtRefUnbindNewtMakeArray()NewtSetArraySlot()NPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenGlobalFn ( nps_node_t  name,
nps_node_t  args,
nps_node_t  expr 
)

グローバル関数のオペノードを作成

引数:
name [in] 関数名
args [in] 関数の引数
expr [in] 実行式
戻り値:
ノード

NewtParser.c765 行で定義されています。

参照先 NPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenIfThenElse ( nps_node_t  cond,
nps_node_t  ifthen,
nps_node_t  ifelse 
)

条件文のオペノードを作成

引数:
cond [in] 条件式
ifthen [in] THEN 式
ifelse [in] ELSE 式
戻り値:
ノード

NewtParser.c680 行で定義されています。

参照先 kNewtRefUnbindNewtMakeArray()NewtSetArraySlot()NPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenNode0 ( uint32_t  code  ) 

引数0のノードを作成

引数:
code [in] 構文コード
戻り値:
ノード

NewtParser.c455 行で定義されています。

参照先 kNewtRefUnbindNPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenNode1 ( uint32_t  code,
nps_node_t  op1 
)

引数1のノードを作成

引数:
code [in] 構文コード
op1 [in] 引数1
戻り値:
ノード

NewtParser.c470 行で定義されています。

参照先 kNewtRefUnbindNPSGenNode2().

参照元 NPSGenOP1().

関数の呼び出しグラフ:

nps_node_t NPSGenNode2 ( uint32_t  code,
nps_node_t  op1,
nps_node_t  op2 
)

引数2のノードを作成

引数:
code [in] 構文コード
op1 [in] 引数1
op2 [in] 引数2
戻り値:
ノード

NewtParser.c486 行で定義されています。

参照先 nps_syntax_node_t::codeCXNewtStackExpand()nps_streeNPSMakeSyntaxNodenps_syntax_node_t::op1nps_syntax_node_t::op2STREESTACKyyerror().

参照元 NPSGenForeach()NPSGenForLoop()NPSGenGlobalFn()NPSGenIfThenElse()NPSGenNode0()NPSGenNode1()NPSGenOP2()NPSGenResend()NPSGenSend().

関数の呼び出しグラフ:

nps_node_t NPSGenOP1 ( uint32_t  op,
nps_node_t  op1 
)

引数1のオペレータノードを作成

引数:
op [in] オペコード
op1 [in] 引数1
戻り値:
ノード

NewtParser.c517 行で定義されています。

参照先 kNErrSyntaxErrorkNewtRefUnbindkNPS_NOTkNPSNotKNPSUnknownCodeNPSError()NPSGenNode1().

関数の呼び出しグラフ:

nps_node_t NPSGenOP2 ( uint32_t  op,
nps_node_t  op1,
nps_node_t  op2 
)

引数2のオペレータノードを作成

引数:
op [in] オペコード
op1 [in] 引数1
op2 [in] 引数2
戻り値:
ノード

NewtParser.c546 行で定義されています。

参照先 kNErrSyntaxErrorkNewtRefUnbindkNPS_CONCAT2kNPS_DIVkNPS_GREATER_EQUALkNPS_LESS_EQUALkNPS_MODkNPS_NOT_EQUALkNPS_OBJECT_EQUALkNPS_SHIFT_LEFTkNPS_SHIFT_RIGHTkNPSAddkNPSConcatkNPSConcat2kNPSDivkNPSDividekNPSEqualskNPSGreaterOrEqualkNPSGreaterThankNPSLessOrEqualkNPSLessThankNPSModkNPSMultiplykNPSNotEqualkNPSObjectEqualkNPSShiftLeftkNPSShiftRightkNPSSubtractKNPSUnknownCodeNPSError()NPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenResend ( uint32_t  op,
nps_node_t  msg,
nps_node_t  args 
)

メッセージ再送信のオペノードを作成

引数:
op [in] オペコード
msg [in] メッセージ
args [in] メッセージの引数
戻り値:
ノード

NewtParser.c662 行で定義されています。

参照先 kNPSResendkNPSResendIfDefinedNPSGenNode2().

関数の呼び出しグラフ:

nps_node_t NPSGenSend ( nps_node_t  receiver,
uint32_t  op,
nps_node_t  msg,
nps_node_t  args 
)

メッセージ送信のオペノードを作成

引数:
receiver [in] レシーバ
op [in] オペコード
msg [in] メッセージ
args [in] メッセージの引数
戻り値:
ノード

NewtParser.c640 行で定義されています。

参照先 kNPSSendkNPSSendIfDefinedNPSGenNode2().

関数の呼び出しグラフ:

newtRef NPSInsertArraySlot ( newtRefArg  r,
uint32_t  p,
newtRefArg  v 
)

配列オブジェクトのオブジェクトを挿入する

引数:
r [in] 配列オブジェクト
p [in] 挿入する位置
v [in] 挿入るオブジェクト
戻り値:
配列オブジェクト

NewtParser.c848 行で定義されています。

参照先 NewtInsertArraySlot().

関数の呼び出しグラフ:

newtRef NPSMakeArray ( newtRefArg  v  ) 

配列オブジェクトの作成

引数:
v [in] 初期値
戻り値:
配列オブジェクト

NewtParser.c804 行で定義されています。

参照先 kNewtRefUnbindNewtMakeArray()NewtSetArraySlot().

関数の呼び出しグラフ:

newtRef NPSMakeBinary ( newtRefArg  v  ) 

バイナリオブジェクトの作成

引数:
v [in] 初期値
戻り値:
バイナリオブジェクト

NewtParser.c935 行で定義されています。

参照先 kNewtRefUnbindNcClone()