VBで独自言語を作るには?

解決


超初心者  2005-09-22 18:00:21  No: 125629  IP: [192.*.*.*]

VB.netでWindowsプログラムが書ける独自言語を作ってみたいのですが、
Buttonなどを配置する命令を作るにはどうすればよいでしょうか?

編集 削除
やめたほうがいい  2005-09-22 18:25:01  No: 125630  IP: [192.*.*.*]

初心者ができるようはなしではない。
>Buttonなどを配置する命令を作るにはどうすればよいでしょうか?
構文解析が容易にできるようになるのが先決。
正直やめたほうがいい。

編集 削除
Dental  2005-09-22 19:25:23  No: 125631  IP: [192.*.*.*]

今月号の日経ソフトウェア誌を読んでみるとか。
http://software.nikkeibp.co.jp/software/backno/2005/0510indexc.html

編集 削除
魔界の仮面弁士  2005-09-22 19:40:20  No: 125632  IP: [192.*.*.*]

本当に言語を実装する気があるなら、System.CodeDom 名前空間が使えるかも。

> 日経ソフトウェア
# 日経ソフトウエアですね。(ェ→エ)

編集 削除
超初心者  2005-09-23 14:00:48  No: 125633  IP: [192.*.*.*]

System.CodeDomをヘルプで調べてみたのですが、
よく分かりません。
詳しく教えていただけないでしょうか?

編集 削除
dark  2005-09-23 14:26:55  No: 125634  IP: [192.*.*.*]

とりあえず、本気で教えを請うつもりならば、
HNをかえたほうがいい。
捨てハンだと思われると、もらえる情報ももらえないから。

編集 削除
超初心者  2005-09-23 14:28:59  No: 125635  IP: [192.*.*.*]

すみません・・・・・・・・・・・・
HNとはなんなのでしょうか?
本当に無知ですみません。

編集 削除
dark  2005-09-23 14:44:34  No: 125636  IP: [192.*.*.*]

HN=ハンドルネーム=お名前

わからないならサイト検索しましょうぜ。

編集 削除
あん  2005-09-23 14:46:08  No: 125637  IP: [192.*.*.*]

>HNとはなんなのでしょうか?
ハンドルネーム
この場合「超初心者」
まじめに聞く態度じゃないと思われる。

編集 削除
質問者  2005-09-23 14:50:27  No: 125638  IP: [192.*.*.*]

質問者でいいでしょうか?

編集 削除
Dental  2005-09-23 15:46:39  No: 125639  IP: [192.*.*.*]

>> 日経ソフトウェア
># 日経ソフトウエアですね。(ェ→エ)
_|‾|○  il||li


> ヘルプで調べてみたのですが
> よく分かりません。
質問は具体的に書きましょう。

どこを見ればよいのかわからなかったのですか?
それとも、ヘルプを見たけど、どのような機能を持つ物かわからなかったのですか?
それとも、機能はわかったけど、使い方の説明で分かりにくい記述があったとか?


どこを見たらよいかさえわからないなら、まずは、ヘルプの
[複数の言語でのソース コードの動的な生成とコンパイル]を。
http://www.microsoft.com/japan/msdn/library/ja/cpguide/html/cpconGeneratingCompilingSourceCodeDynamicallyInMultipleLanguages.asp
その後で、名前空間下にどんなクラスがあるかを調べ、googleでサンプルを探しつつ、
実際に試してみる、というのが良いかな。

いずれにしても、CodeDomは高機能なので、自分で超をつけるほどの初心者なら、
多分、ヘルプだけみても理解しきれないんじゃ無いかと。
最低限、自分で試して調べられる程度のVB.NETの基礎知識は必要でしょう。

ま、独自言語を作るともなれば、その言語の文法仕様等をきっちりと
定義する必要があるので、その辺の設計能力も問われるかも。


ちなみに、[かけはし]などもCodeDomを利用しているそうです。
http://comets.half-done.net/kakehashi/summary.html


> 詳しく教えていただけないでしょうか?

そんな。「詳しく」というのは些か無茶な注文ではありますまいか。
どこが分からないのかも示さず、単に教えて欲しいとだけ書いても、
無視されるのがオチですよ。

どこがわからないのか書かれていないのだから、教えるとなれば、回答者は
「あらゆる点を、ヘルプや参考書以上に詳しく記述しなければならない」事になります。
それは、掲示板で答えられるようなボリュームじゃないですよ…。


まぁ、せめて概要だけ書いておくと。
CodeDomは、「ソース コードをモデル化」したものです。
先の[複数の言語でのソース コードの動的な生成とコンパイル]に
書いてある事の繰り返しになっちゃいますがね。

CodeDomを各言語用に実装したクラスを用意すれば、その言語の
プログラムコードを解釈して、実行させる事ができます。
またモデル化されたオブジェクトから、逆にソースコードを生成する事もできます。

http://www.microsoft.com/japan/msdn/library/ja/dv_vjsample/html/vjsamcodedomsampleusecodedomprovider.asp
http://support.microsoft.com/default.aspx?scid=kb;ja;304654
http://www.users.gr.jp/blogs/fukui/archive/2004/02/07/1135.aspx
http://dobon.net/vb/dotnet/programing/incodecompiler.html

編集 削除
通ってみた  2005-09-23 16:05:53  No: 125640  IP: [192.*.*.*]

VBの中で言語をつくるっていうことは、VBを完璧にマスターしていないと無理だと思うのですが
正直、超初心者の方にできるようなことではないと思いますよ

ボタンを配置する命令をこちらが提示したら、次は○○をお願いします、○○ができたら××をお願いします…と延々と質問して完成できると思っているのなら、そんなに甘い場所ではないです

実際にVBで独自言語をつくっている「ていこくさん」にでも相談してみては?
同じような返答が来ると思いますが

編集 削除
魔界の仮面弁士  2005-09-23 16:33:43  No: 125641  IP: [192.*.*.*]

「独自言語」と肩肘を張らなくても良いなら、
> Buttonなどを配置する命令を作るにはどうすればよいでしょうか?
という程度の処理は、CodeDomとか使わなくても書けますよね。


とりあえず、とっても手抜きなサンプルをば。


Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  'この場合、ボタンが左上(20,50)の位置に、200x100のサイズで配置されます。
  TextBox1.Text = "Button 0020,0050,0200,0100"
End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  Dim Code As String = TextBox1.Text
  If Code Like "Button ####,####,####,####" Then
    Dim Pos() As String = Code.Substring(7).Split(","c)
    Dim Btn As New Button
    Btn.Text   = "ぼたん"
    Btn.Left   = Integer.Parse(Pos(0))
    Btn.Top    = Integer.Parse(Pos(1))
    Btn.Width  = Integer.Parse(Pos(2))
    Btn.Height = Integer.Parse(Pos(3))
    Me.Controls.Add(Btn)
  ElseIf Code Like "TextBox ####,####,####,####" Then
    Dim Pos() As String = Code.Substring(8).Split(","c)
    Dim Txt As New TextBox
    Txt.Text = "ぼたん"
    Txt.Left   = Integer.Parse(Pos(0))
    Txt.Top    = Integer.Parse(Pos(1))
    Txt.Width  = CInt(Pos(2))
    Txt.Height = CInt(Pos(3))
    Me.Controls.Add(Txt)
  Else
    MessageBox.Show("構文エラー")
  End If
End Sub


ただしボタン配置だけでなく、配置した後のクリックイベントの
処理なども必要というなら、解釈も処理も、かなり複雑になってきます。
で、本気でそこまで言語として実装させる気があるなら、
CodeDomの使用を検討してみるのも良いでしょう。
# 言語を作りこむわけですから、実装は大変でしょうけど。


ちなみに、Visual Studio.NET 2003には、C++言語のためのCodeDOMが
存在しており、これを使うとC++コードを解析したり生成したり
できるそうです。(MCppCodeDomProviderアセンブリとMCppCodeDomParserアセンブリ)

編集 削除
名無し  2005-09-23 17:08:38  No: 125642  IP: [192.*.*.*]

>質問者でいいでしょうか?

撤収〜

編集 削除
質問者  2005-09-23 21:00:08  No: 125643  IP: [192.*.*.*]

皆さんにご迷惑をおかけして本当にもうしわけありませんでした。
おかげさまで無事解決しました。
ありがとうございました。

編集 削除
dark  2005-09-23 22:09:43  No: 125644  IP: [192.*.*.*]

> おかげさまで無事解決しました。
どのように?あきらめたということですか?

編集 削除
名無し  2005-09-24 00:13:10  No: 125645  IP: [192.*.*.*]

もういいじゃないか…
そっとしておこうよw

編集 削除
 2005-09-24 00:23:04  No: 125646  IP: [192.*.*.*]

無事解決しました
なんて嘘の報告しか出来ないなら
ちょっとそれは社会に出たとき致命的にマズイよ
知り合いにいるけど
こう言ったいい加減な考えをする人が
横領や粉飾をする

編集 削除
回答者  2005-09-29 19:16:35  No: 125647  IP: [192.*.*.*]

そもそも、どう作るのか自分で解決できない人が言語を作ったところで、一体どんな素敵な言語ができることやら・・・w

解決済みスレ上げてすいません、かなり面白いので、このスレw

編集 削除