主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Boo: 文字列をスクリプトとして解する

                
.NET FrameworkもしくはMono上で動作するBooはインタープリタからスクリプト言語として使える一方、C#のごとく静的型付け言語として事前コンパイルをしてアプリケーションを作成することもできる。

.NET FrameworkでGUIアプリケーションのUIを記述できるXAMLファイルをBooコードにコンバートするものを書いている。コンバートされたBooコードに不正がないかチェックをし、不正がなければそのままコードを保存する機能を以下のように書いた。


import Boo.Lang.Compiler
import Boo.Lang.Compiler.IO
import Boo.Lang.Compiler.Pipelines

def RunScript(input) as bool:
booC = BooCompiler()
booC.Parameters.Input.Add(StringInput("<script>", input))
booC.Parameters.Pipeline = CompileToMemory() //No need for an on-disk file.
booC.Parameters.Ducky = true //By default, all objects will be ducked typed; no need for the user to "var as string" anywhere.

// pass reference to assembly
// assemblies = [typeof(Console).Assembly,
// typeof(Control).Assembly]
// for assembly in assemblies:
// booC.Parameters.References.Add(assembly)

context as CompilerContext = booC.Run()
//The main module name is always filename+Module in pascal case;
//this file is actually RunBooModule!
//Using duck-typing, we can directly invoke static methods
//Without having to do the typical System.Reflection voodoo.
if context.GeneratedAssembly is null:
print join(e for e in context.Errors, "\n")
raise ""
else:
return true


fileText = """a = 1
b = 1
c = a + b
"""
if RunScript(fileText):
using file = File.CreateText("xaml.boo"):
file.Write(fileText)


参考:
http://boo.codehaus.org/Scripting+with+the+Boo.Lang.Compiler+API

http://boo.codehaus.org/How+To+Compile
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。