GSL Shell 学習:見た目の前方参照?(新方式)

2017-04-12 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
見た目の前方参照を実現するには、
最初に思いつくのは、goto文があれば、それを利用する方式。

確かに、
昨年2月(2016-02-19)の記事「GSL Shell 学習:gotoで見た目の前方参照」で書いている。
だが、当該記事でも書いた通り“local”宣言がジャマをする。


Python に関しては、“Python 見た目の前方参照”の通り。

つまり、
goto文が無い言語でも、for と if を使えば出来る。


今回、変なことを考えついた。

それは、
1) 自分自身を読み込んで、
2) 後段部分を抜き出し、
3) その文字列を“eval 関数”相当で実行する。


1) については、起動時の引数テーブルで入手できる:
昨年3月(2016-03-06)の記事「GSL Shell 学習:グローバル・テーブル arg
の如く、arg[0] で。

3) については、assert( load( ~ ) )() で出来る:
昨年1月(2016-01-27)の記事「Lua 学習:eval 関数」参照


2) については、
対象範囲を、「--inis」だけの行と「--inie」だけの行の間の行と考えた。
それで、

最初は:
F=io.open(arg[0]); w=F:read('*a'); F:close(); fnd=string.find
_,k=fnd(w,'--inis',1,true); j=fnd(w,'--inie',k,true)
assert(load( string.sub(w,k+2,j-2) ))()
としてみたが、ダメです。
つまり、2行目の判定文にある文字列がジャマをする。

それを解消するため:
F=io.open(arg[0]); w=F:read('*a'); F:close(); fnd=string.find; k=1
for i=1,2 do _,k=fnd(w,'--inis',k,true) end j=fnd(w,'--inie',k,true)
assert(load( string.sub(w,k+2,j-2) ))()
とした。
これで、一応出来た。

しかし、イマイチ気に入らない。

そこで、2行目の判定文がジャマしない様に変えた:
F=io.open(arg[0]); w=F:read('*a'); F:close(); fnd=string.find
m='--ini'; _,k=fnd(w,m..'s',1,true); j=fnd(w,m..'e',k,true)
assert(load( string.sub(w,k+2,j-1) ))()
これで完成。

なお、“fnd=string.find”の第4パラメータは、
“-”が特別な文字とは見なさない為に必要ですネ。


この方式で作ったテストプログラム:
昨年2月(2016-02-05)の記事「GSL Shell 学習:LFS 自作始め
のコード見直しを兼ねて、自ファイルのサイズ取得の例
---- test_init_After.gsl -----
F=io.open(arg[0]); w=F:read('*a'); F:close(); fnd=string.find
m='--ini'; _,k=fnd(w,m..'s',1,true); j=fnd(w,m..'e',k,true)
assert(load( string.sub(w,k+2,j-1) ))()
----------- 以下部分が本体 --------------------
print( string.sub(w,k+2,j-1) ) -- 改行コードは1バイト分

print( f(5) ) -- 10

stat = ffi.new( 'uint32_t[64]' )
_ = ffi.C._stat( arg[0], stat )
print( stat[5] ) -- このファイルのサイズ

----------- 以下初期化部分 --------------------
os.exit(0) ----- これは必須
--inis
function f(x)
return x+5
end
ffi.cdef[[
int _stat ( const char* fname, void* buf );
]]
--inie
------- 以下は 自由領域:主にコメント用 -------

-- コメント

こんな感じ?


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170310,11
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク