星期二, 9月 11, 2007

[Boo]Boo hack(1)

從 booish 開始,我想會比較快吧~
這個互動的 shell,你可以像 BASIC 一樣,打指令以後,立刻就可以看到結果。

booish 本身是一個很簡單的小程式,產生 InteractiveInterpreter2(在Boo.Lang.Interpreter下) 的 Instance 以後,調用 ConsoleLoopEval() 來等待使用者輸入程式並執行。
等使用者按下 enter 的時候,就試著呼叫 TryRunCommand() 看是不是內建的指令。
不是的話,就調用 InternalLoopEval(),而 InternalLoopEval() 則是呼叫父類別:AbstractInterpreter.Eval()。

AbstractInterpreter.Eval() 簡單的把字串參數轉換為 StringInput (繼承 ReaderInput,ReaderInput再繼承 ICompilerUnit),再讓 EvalCompilerInput() 去呼叫 Parse()。 (註1)
Parse() 則是先把 _parser 的輸入參數清空,把 ICompilerUnit 參數放到 _parser 的輸入參數(Parameters.Input)裡面,執行 _parser.Run()。

_parser 的型別是 BooCompiler,至此,要開始看 Boo.Lang.Compiler.BooCompiler 了。
所以,看起來 Boo.Lang.Interpreter 是用 Boo.Lang.Compiler 命名空間裡的類別在做事。

註:
  1. 想不到可以這樣用:
    return EvalCompilerInput(StringInput("input${++_inputId}", code))
    ,Boo 可以讓變數直接帶入字串,如: "${_inputId}",但我不知道裡面還可以作運算,如:"${++_inputId}"

沒有留言: