基本的に、私は楽しみのために自分のデザインの言語のために小さくてひどく非効率的な通訳を書いてきました。F#で記述します。奇妙な部分は、私のバージョンのループのように"loop true do 0"
(無限のループに変換される)、解釈するための長いコードを与えると、ネットワークに接続しようとすることです。ファイアウォールがそれに気づき、何をすべきかを尋ねてくるので、私は知っています。これは意図的なものではなく、プログラムに1行のネットワークコードが含まれていません。実験として、インタープリターのループコードを、永遠のF#whileループに変更したので、永久にループし、インタープリターの処理は実行されませんでしたが、効果はありませんでした。
私がネットワーク関連のものを言うとき、私はこれらの2つのアドレスの1つに接続することについて話している:
224.0.0.252
そして
239.255.255.250
これをグーグルで調べたところ224.0.0.252
、LLMNR(Link Local Multicast Name Resolution)と239.255.255.250
関係があり、SSDP(Simple Service Discovery Protocol)と関係があることがわかりましたが、それが何を意味するのかわかりません。
私のプログラムがこれを行っている理由を誰かが知っていますか?
編集:
ループコードは次のようになります(意図的に、それを実行したのが私のコードであるかどうかを確認するため):
and loopExec scope state cond body =
while true do ()
GNil
whileループのどこかに接続しようとします。私がこれを持っている前に:
and loopExec scope state cond body =
let myig _ = ()
while (exec scope state cond) <> GBool(false) do
myig <| exec (pushScope scope) state body
GNil
scopeが現在のスコープ、stateが現在の状態、condが条件と本体であり、condがtrueである限り評価する必要があります。myigは基本的に、問題が何であるかについてのアイデアが不足しているため、独自の無視関数を作成しました。execは、condまたはbodyでコードを実行します。
それは最高のコードではありません、私はそれを知っています。
編集2:
プログラム全体のエントリポイントに永遠のループを挿入しましたが、それでも実行されました...デバッグモードとリリースモードの両方でテストされました。
// Entrypoint of the program
[<EntryPoint>]
let main args =
while true do ()
// Display the greeting message thing
displayHelp()
// Prompt the user for code
Console.Write("> ");
let mutable inp = readCode()
let mutable runCode = true
let state = new Interpreter.State()
while inp.Trim() <> "#exit" do
if not (isValidLine inp) then
if runCode then
execCode state inp
else
printfn "Result: %A\n" (parseString inp)
elif inp = "#help" then
displayHelp()
printfn ""
elif inp = "#ast" then
runCode <- false
elif inp = "#run" then
runCode <- true
elif inp = "#names" then
showNames state
Console.Write("> ")
inp <- readCode()
// Ask the user to press enter before exiting
printfn "[PRESS ENTER TO EXIST]"
Console.Read() |> ignore
Environment.ExitCode