2017-05-25 6 views
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. 

しかし、私はこれはよく書かれているか、または仕事であることは確信しています。私のプログラミング言語でラベルを解析する方法(とジャンプ関数を書く方法)を教えていただけますか?または、私のコードが現時点では大丈夫であれば、改善する手助けはできますか?

+3

解析は1つです。 _Interpreting_ラベル/ジャンプ - 非常に非常に異なるストーリー:) –

+0

@SergioTulentsev 'パース'の代わりにどのようなタグを追加しますか? –

+0

これはもっと良いはずです –

答えて

0

私のパーサーでラインカウンタを使用して、私はBASICで見られるようにgotosを実装することに決めました。みんなありがとう。

関連する問題