ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 06:19

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
 記事の件名: プログラム言語
投稿記事Posted: 2006年5月07日(日) 16:20 
オフライン

登録日時: 2006年5月02日(火) 16:27
記事: 154
皆さんActiveBasicでプログラム言語作ったことありますか?

最近、ActiveBasicでプログラム言語を作っています。
インタプリタ言語です。
たいした機能をつける気はないですが、
作った方は、ぜひ、教えてください。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月07日(日) 17:30 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
作った事ありますよ。インタプリンタなら。

ただ、計算式の分岐が相当な量で、2項式までを処理するだけでも書くのが一苦労。
言語名は、開発名がA言語。
個性仕様は、一応変数名や変数型の別名なんかに日本語を使えるっていうだけです。
ASCIIの文字コードがギュウギュウ詰めに作ってあるので、全角文字か半角文字かを判断するだけでかなり骨が折れましたが。だからと言ってUnicodeの中で判定が易しいUTF-8っていうコードを使おうとしたら今度はBasicPromptが対応できずに落ちたりと。

今はコンパイラ作ってます。関数も作れない、配列も扱えない、ヘナチョコですが。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月07日(日) 22:27 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
コンパイラならば作ったことあります。インタプリタはないですが。
最初はコンパイラ・インタプリタどちらにするか悩んだのですが、インタプリタは言語翻訳機関とプログラム実行機関の2つを備えないといけないので面倒なことと、JavaVM (Java プログラムのインタプリタみたいなもの)について調査したときに色々と躓いてなかなか前進できなかった経験があるので、結局コンパイラにしました。
とりあえず形にはなったので、現在様々な言語仕様を検討し、より良い言語を目指している段階です。
可能ならいずれインタプリタの制作にも挑戦したいものです。

それで、「是非教えてください」と言われましても、この分野は深く広い学問体系になっているので、漠然としていてなにから取り組めばよいのやら…
とりあえず今回は処理のおおまかな流れについてお話しさせてください。

1.ソースファイルを先頭から1字ずつ読んで、それがどんな文字なのか(アルファベット / 数字 / 記号 / 日本語, etc...)を解析して、この情報を基に、個々の文字を単語レベルに結合します。
 たとえばC言語のソースでは
コード:
if (i == 0) baz = foo + bar;
 ならば
コード:
if    予約語
(     括弧(開)
i     識別子
==    演算子
0     数値
)     括弧(閉)
baz   識別子
=     演算子
foo   識別子
+     演算子
bar   識別子
;     終端文字
 こんな感じです。
 この段階で、その単語(本当は字句またはトークンといいます)が識別子か予約語なのか、または演算子やその他の記号なのかを検査しておきます。

このフェイズを字句解析と言います。


2.1で得られた字句の並び方がプログラミング言語の構文として正しいかを解析します。
 開括弧と閉括弧がちゃんと一致しているか、などの検査もこの段階で行います。
 ソースの基本的な構文エラーはここで検出することになります。
 この構文解析器の設計は、プログラミング言語の構文設計と密接に繋がっています。
 プログラミング言語の構文を考えることは、ここの構造を考えることに等しいと言えるでしょう。

このフェイズを構文解析と言います。


3.ソースが言語構文のとおりだと確認できたら、こんどはこのソースがどういう動作を期待しているのかについて解析します。
 たとえば、別の板で質問されていた逆ポーランド解析も主にこの段階で活躍します。

このフェイズを意味解析と言います。
また 2 と 3 のフェイズは強力に連携し合わなければならないので、設計を簡略化するために、これらを合わせて一つのフェイズとみなすこともあるそうです。


4.インタープリタならこの処理を即時実行して、1~3を繰り返すことになります。
 コンパイラならさらに必ずしも必要ではない様々な処理(最適化処理など)を行って、オブジェクトファイルを出力します。


このような具合です。最初から一度にこれらすべてを設計してプログラムを組み上げるのは大変な作業ですから、まずは「2 + 3」が計算できるような簡単な計算機、次いで逆ポーランド電卓、(逆ポーランドではなく)普通の計算式を処理できる電卓、if などの条件分岐やループしか持たない簡単なインタプリタなどを作って、徐々にステップアップしながら同時にインタプリタを拡張していく方法をお勧めします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年5月08日(月) 11:36 
オフライン

登録日時: 2005年5月31日(火) 22:17
記事: 27
お住まい: 山口
http://www.activebasic.com/forum/viewto ... highlight=
インタプリタ-とまで呼べるかどうか分からないけどそれらしきものがあります。

というか、YACCとかLEXとか使えばコンパイラやインタプリタなんて1時間未満で作れるんですけどね。(ただしC言語)
YACCとLEXを組み合わせれば元のソースコードは10行から20行くらいです。(ぶち簡略化して)
それをCのソースにすれば数千行になります。
ABのソースにしてもかなりの量になるでしょう。

だれかAB用のLEXとYACCつくって~~。無理か?

_________________
今日も元気にABLife


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年7月03日(月) 20:49 
オフライン

登録日時: 2006年5月02日(火) 16:27
記事: 154
返信、かなり遅くなってすみません。
えっと、それらしきものができました。
インタプリタのしょぼしょぼです。

以下サンプルです(一応)

mes "Hello!"

mes "[ver]"

X=2+3
mes X


最後に編集したユーザー MML [ 2010年7月21日(水) 02:14 ], 累計 1 回

通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年7月03日(月) 21:02 
オフライン

登録日時: 2006年5月02日(火) 16:27
記事: 154
>インタプリタ-とまで呼べるかどうか分からないけどそれらしきものがあります。

>というか、YACCとかLEXとか使えばコンパイラやインタプリタなんて1時間未
>満で作れるんですけどね。(ただしC言語)
>YACCとLEXを組み合わせれば元のソースコードは10行から20行くらいです。(ぶち簡略化して)
>それをCのソースにすれば数千行になります。
>ABのソースにしてもかなりの量になるでしょう。

YACCとかは知らないんですけど、、、

ABでインタプリタを使ったらメインプログラムは1300行になりました。
(変数・文字列などのプログラムを除けば。)


最後に編集したユーザー MML [ 2010年7月21日(水) 02:15 ], 累計 1 回

通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年7月04日(火) 00:22 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
そんなに短い行数でかけるんですか?インタプリンタって。
僕は仕様が複雑だったのもあって1万行を軽く超えてしまいましたが^^;

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年7月04日(火) 00:30 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
斬新な言語仕様でプログラミングの本質を・・・

という方は、Haskellに手を出すのも悪くはないかも。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean