しばらく音沙汰なしでした^^;
簡単なスクリプト機能のあるものを作りたいんですけど、
(A="text1",B="text2",print A+Bで"text1text2"と出力したり…)
その命令の読みこみ方にちょっと困ってます。
Select Case で地道に一個ずつ調べていくという方法もありますけど、
他になにか方法はないんでしょうか?
上のとおりだととっても無駄をしている気がするんですけど…。
こんなんでいいなら・・・
'microsoft Script Control を参照設定すること
Private Sub Command1_Click()
Dim objVBS As New ScriptControl
Dim strScript As String
strScript = "Dim A,B :A=""text1"":B=""text2"":MsgBox A & B "
objVBS.Language = "VBScript"
objVBS.ExecuteStatement strScript
End Sub
P.S.
マルチステートメントがいやなら、たとえばこう。
Private Sub Command2_Click()
Dim objVBS As New ScriptControl
Dim strScript As String
strScript = ""
strScript = strScript & " Dim A , B " & vbCrLf
strScript = strScript & " A = ""text1"" " & vbCrLf
strScript = strScript & " B = ""text2"" " & vbCrLf
strScript = strScript & " MsgBox A & B " & vbCrLf
objVBS.Language = "VBScript"
objVBS.ExecuteStatement strScript
End Sub
えと…。ScriptControlって、自作言語は無理なんでしょうか?
スクリプトというか、自作エディタのマクロとして使いたいんですけど…。
言語の自作ということですね。
基本的にはトークンを切り出して、
予約語なら処理ルーチンにとんで、
予約語でなければ
シンボルテーブルに登録する・・・の
繰り返しになります。
前方参照考えると、最低2パスにしたほうが
いいでしょうし。
文字列処理の苦手なVBにはつらいかも・・・
スピード気にしないならいいですが。
単に、構文解析ツール(いわゆるパーサ)が
つくりたいなら、YACCなんてツールもありますが・・・。
んと、
line = print "message"
str = split(line," ")
Select case str(0)
case print
main.maintext.seltext = str(1)
case …
…
end Select
とやるというかんじでしょうか?
ツイート | ![]() |