From dd1df23c6b963ddf32bd2f63fcedcc6e62358982 Mon Sep 17 00:00:00 2001 From: kujirahand Date: Thu, 3 Jan 2019 22:19:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=81=8B=E3=82=89=E5=A7=8B?= =?UTF-8?q?=E3=81=BE=E3=82=8B=E5=A4=89=E6=95=B0=E3=81=8C=E5=AE=9A=E7=BE=A9?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E3=80=81=E6=9A=AB=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E3=81=AB=E3=80=81=E3=83=90=E3=83=83=E3=83=81=E3=82=B9?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?(#341)(#221)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- batch/pickup_command.nako3 | 43 +++++++++++++++++++------------------- src/nako_parser3.js | 3 +++ 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/batch/pickup_command.nako3 b/batch/pickup_command.nako3 index 70356067..f31b7922 100644 --- a/batch/pickup_command.nako3 +++ b/batch/pickup_command.nako3 @@ -8,12 +8,11 @@ 'src/plugin_browser.js', 'src/plugin_turtle.js', 'src/plugin_node.js', - 'src/plugin_express.js', - 'src/plugin_websocket.js' + 'src/plugin_express.js' ] -関数定義とは変数 -関数説明とは変数 +FN定義とは変数 +FN説明とは変数 助詞定義JSONとは変数 ヨミガナとは変数 カレントプラグインとは変数 @@ -76,30 +75,30 @@ 抽出文字列で定数定義処理。戻る。 ここまで。 - # 関数定義? + # FN定義? Sを『/'(.+?)'\s*:\s*\{\s*\/\/\s*\@(.+)$/』で正規表現マッチ もし、そうならば 助詞定義JSON=[] ヨミガナ=「」 - 関数定義=トリム(抽出文字列[0]) - 関数説明=トリム(抽出文字列[1]) - 関数定義を表示 - 関数説明で「//」が何文字目 + FN定義=トリム(抽出文字列[0]) + FN説明=トリム(抽出文字列[1]) + FN定義を表示 + FN説明で「//」が何文字目 もし、それ>0ならば -   関数説明を「//」で区切って、Aに代入。 -   関数説明=トリム(A[0]) +   FN説明を「//」で区切って、Aに代入。 +   FN説明=トリム(A[0])   ヨミガナ=トリム(A[1]) ヨミガナ=ヨミガナの「^@」を「」に正規表現置換 -   もし、ヨミガナが空ならば、ヨミガナ=関数定義。 +   もし、ヨミガナが空ならば、ヨミガナ=FN定義。 ここまで もし、ヨミガナが空ならば -   「--- ERROR ---『{関数定義}』でヨミガナがありません」と表示。 +   「--- ERROR ---『{FN定義}』でヨミガナがありません」と表示。   終わる。 ここまで。 戻る。 ここまで - もし、関数定義≠空ならば + もし、FN定義≠空ならば # typeの行なら次の行を読むようにする Sを『/type\s*\:\s*'func'/』で正規表現マッチ もし、そうならば @@ -120,11 +119,11 @@ 助詞定義JSONに代入。 戻る。 ここまで - # JS関数定義? そうであれば、JSに対する引数名を得られる + # JSFN定義? そうであれば、JSに対する引数名を得られる Sを『/^fn\s*\:\s*function\s*\((.*?)\)/』で正規表現マッチ。 もし、そうならば 助詞定義=「」 - # システムオブジェクトへの参照は、なでしこ関数定義と関係ないので除去 + # システムオブジェクトへの参照は、なでしこFN定義と関係ないので除去 それ=抽出文字列[0] 「/(\,\s*sys|sys)$/」を「」に正規表現置換 トリム。 @@ -137,7 +136,7 @@ 引数一覧に引数名を配列追加。 ここまで。 もし、要素数(引数一覧)≠要素数(助詞定義JSON)ならば - 「*** [警告] {カレントプラグイン}:『{関数定義}』で助詞の定義がJS関数の定義と異なります」と表示。 + 「*** [警告] {カレントプラグイン}:『{FN定義}』で助詞の定義がJS関数の定義と異なります」と表示。 引数一覧を表示。 終わる。 ここまで。 @@ -157,15 +156,17 @@ ここまで 助詞定義=AAを「/」で配列結合 もし、助詞定義="undefined"ならば - 「*** [警告] {カレントプラグイン}:『{関数定義}』で助詞定義がundefinedです」と表示。 + 「*** [警告] {カレントプラグイン}:『{FN定義}』で助詞定義がundefinedです」と表示。 助詞定義JSONをJSONエンコードして表示。 AAを表示 終わる。 ここまで - 「| 関数 | {関数定義} | {助詞定義} | {関数説明} | {ヨミガナ}」を表示 - 関数定義=「」 + 「| 関数 | {FN定義} | {助詞定義} | {FN説明} | {ヨミガナ}」を表示 + FN定義=「」 ここまで。 ここまで - 関数定義=「」 + FN定義=「」 定数定義=「」 ここまで。 + + diff --git a/src/nako_parser3.js b/src/nako_parser3.js index f9435873..539ed524 100644 --- a/src/nako_parser3.js +++ b/src/nako_parser3.js @@ -500,6 +500,9 @@ class NakoParser extends NakoParserBase { funcObj = this.yMumeiFunc() if (funcObj === null) throw new NakoSyntaxError('『Fには』構文がありましたが、関数定義が見当たりません。', t.line) } + if (!f || typeof f['josi'] === undefined) { + throw new NakoSyntaxError('関数の定義でエラー。', t.line) + } const args = [] let nullCount = 0 let valueCount = 0