3
実際には、私はLuaでプログラミング言語を書いています。それはかなり楽しいものでした。私は標準ライブラリ(スタックopと単純なio)のビットを書いた。それから私はラベルについて考えました。それはアセンブリのように見えるでしょう。 whileとforループはどんなビットでも面白くないので、その言語でのプログラミングは非常に困難です。このシステムの要件は次のとおりです。私のプログラミング言語にラベルを追加する
- ラベルスタック(または配列、辞書)は、グローバルコンテキストからアクセス可能でなければなりません。
- ジャンプ命令ハンドラは別ファイルになります。
これはどのように私のラベル処理関数ルックのようである:私は魔法のこの種を実装する方法が分からない
function handleLabel(name,currentLine)
end
。最初に私はそれについて考えました:
LabelLineIDS = {}
Labels = {}
Labelamount = 1;
function handleLabel(name,currentLine)
LabelLineIDS[Labelamount]=currentline
Labels[Labelamount]=name
Labelamount=Labelamount+1
end
-- In file "jump.lua":
local function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return index
end
end
print ("Error: Label not defined.") -- Bail out.
os.exit(1)
end
local function _onlabel()
local labelName = globalparams --Globalparams variable contain parameters to each function, at the moment
--this will contain label name. It _can_ be nil.
return LabelLineIDS[has_value(Labels, labelName)]
end
CurrLine = _onlabel() --Currline - current line that get's parsed.
--1 command per one line.
しかし、私はこれはよく書かれているか、または仕事であることは確信しています。私のプログラミング言語でラベルを解析する方法(とジャンプ関数を書く方法)を教えていただけますか?または、私のコードが現時点では大丈夫であれば、改善する手助けはできますか?
解析は1つです。 _Interpreting_ラベル/ジャンプ - 非常に非常に異なるストーリー:) –
@SergioTulentsev 'パース'の代わりにどのようなタグを追加しますか? –
これはもっと良いはずです –