- ベストアンサー
プログラミング言語を作るには
オリジナルなプログラミング言語を作ってみたいと考えています。 ただ、どうやって作ればいいかがわかりません。 私は、今のところ、Perl、なでしこ等々、簡単なプログラミング言語での プログラミングしか出来ません。 しかし、プログラミング言語を作ることによって、 プログラミングの勉強にもなると考えているのですが まずは、簡単なものでもいいので、それらしいものを作るには 何から勉強を始めればいいでしょうか、 又、他の言語を覚える必要はありますか。アドバイスを御願いします。 もしくは、例えば、参考になりそうなWEBサイトや、 書籍等々でも、結構です。宜しく御願いします。
- みんなの回答 (17)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >何から勉強を始めればいいでしょうか、 最終目標が本格的なプログラミング言語を目指しているようなので 次の順序で進めてみましょう。 (1)Perl、なでしこレベルではとても無理ですのでC言語をお勉強します。 (C言語の理由はサンプルがたくさん存在する。その他本格的に作れるなど) (2)C言語で文字列の操作を学習→語句解析の基礎 (3)C言語でデータの管理を学習→構文解析の基礎(構文木など) (4)N88-BASICのような言語を学習→自作プログラミング言語の参考になる (5)ミニBASICをサンプルを見ながら作成→小規模なプログラミング言語誕生! (6)最初は整数変数(A-Z)と四則演算、代入と変数の表示のみ作成。 (7)if、for、while、goto などを順に機能追加。 (8)その他はいろいろな命令を追加。 こんな感じです。 ・正直ミニBASICを作れるようになるまで早くても1年以上はかかります。(人にもよるが…) また一番重要なのはC言語などの言語の知識です。 ここが不十分ですと先がありませんので十分に身につけて下さい。 >参考になりそうなWEBサイトや、 下に参考になりそうなサイトを3つ紹介します。 紹介1をよく読んでください。 きっと今後、役に立ちます。 ・紹介1 http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248692/→『Part3 超小型BASICインタプリタを作ってみよう』 http://software.nikkeibp.co.jp/software/download/down05c.html→『日経ソフトウエア ダウンロード2005年』 ↑ 『2005年10月号』のt30510.lzh、t40510.lzhをダウンロード(C言語ソース) VC++用なので無料版などをダウンロードすればコンパイル可能。 ・紹介2 http://www005.upp.so-net.ne.jp/h-masuda/cl/index.html→『C言語』 http://www005.upp.so-net.ne.jp/h-masuda/cl/CTrans/index.html→『トランスレータ miniBASIC to C』 http://www005.upp.so-net.ne.jp/h-masuda/cl/Cmcasl/index.html→『インタプリタ作成 miniCASL』 http://www005.upp.so-net.ne.jp/h-masuda/cl/Cmbasic/index.html→『インタプリタ作成 miniBASIC』 3つともソースがダウンロード可能です。 ・紹介3 http://www.vector.co.jp/soft/win95/prog/se205747.html→『とんでもBASIC』 Vectorさんのソース付きのソフトです。
その他の回答 (16)
- Tacosan
- ベストアンサー率23% (3656/15482)
日本語プログラミング言語は個人的に嫌い. アルファベットならそのまま入力すればいいだけなのに, なぜわざわざ「日本語に変換」せにゃならんのか. とまあ個人的な好き嫌いはさておいて, 「自然な」日本語を使おうとすると字句解析が困るような気がします. (例えば) 英語なら「単語は空白で区切る」というルールがあるので字句解析が簡単なんですが, 日本語にはこんな便利なルールがないので「どこからどこまでが単語なのか」で困るんじゃないかな. Mind 以来「ひらがなは無視」というルールをベースにすることが多いけど, 助詞は普通ひらがなで書くので完全に無視するわけにもいきません. 例えば「3 で 5 を割る」と「3 を 5 で割る」は違う処理なので, 助詞の「を」と「で」は無視できないということになります. 同じ問題は COBOL にもあるけど DIVIDE A BY B (B で A を割る) DIVIDE A INTO B (B を A で割る) と前置詞の違いで区別できるのでまだ楽です. ということで, (それなりに) メジャーな言語をまねて*個人的に気に入らないところ*をいじってみるといいかもしれない. Forth に挑戦ってのは... 無謀かなぁ, やっぱり.
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >日本語プログラミング言語と、そうでない言語。 ↑ 自分の好みでしょう。(私は日本語プログラミングは好まない派です) >又、どちらのほうが、作るのが簡単だと思われますか? ↑ 日本語の処理よりも英字の処理が簡単です。 それに普通のプログラミング言語のように命令部分が『英字』で コメントやメッセージが『日本語』という方が見やすい気がします。 日本語でプログラミングできる言語(ひまわり,なでしこ)は初心者向けですが 色分けがないと命令なのか、コメント(メッセージ)の区別がつきにくいので 個人的には嫌いです。 ・下に『なでしこ』の作者さんの記事があります。 読んでみて下さい。 http://www.atmarkit.co.jp/news/200708/07/ll3.html→『「なぜ作ったのか?」、オレ様言語作った人々 - @IT』 あと次のリンクもどうぞ。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060922/248698/→『プログラム言語を作る!』 ・最終的に自作のプログラミング言語をどのようなユーザに使ってもらいたいかを 良く考えてから製作すれば良いでしょう。これにより日本語プログラミング言語を つくるかどうかを決めます。対象者が初心者か、中級者か、上級者でも利用可能か。
お礼
ご意見をお聞かせいただいて、ありがとうございます。 では、日本語でないプログラミング言語を、まずは目指すことにします。 (初心者の人も、中級者の人も使える言語を。) また日本語プログラミング言語を、作りたくなったら、 それを改造するか、作ったノウハウを使って一から作りたいと思います。 確かに、私も思いますが、なでしこで作ったプログラムのソースは、 なでしこエディタでないと、色わけが出来ないので、とてもとても見づらいです・・・。 ありがとうございました。
- kabaokaba
- ベストアンサー率51% (724/1416)
たぶん,Javaは嫌だとかPerlではなんちゃらら とかいってる段階で相当道は長いというか・・・・ 読んだだけで理解した気になってるあたりでも きっとまだまだなんでしょうね そもそも言語なんかは何でもいいんです. その根底にあるアルゴリズムとか,考え方, 「俺様言語」に何をさせたいか・・・そういう部分がメインです. 必要ならプログラミング言語はその場で覚えればいい. 言語を作るんなら,どなたかも仰ってましたが Lisp(Common LispでもScheme)あたりは案外いいのかも. maximaなんかはLispが根っこにあるし,そもそも 人工知能系の研究が発祥みたいだし. いわゆる「関数型」の言語は,言語そのものを作るのに むいてるのかも知れない.Haskellなんかも 他の言語つくるのに向いてるというか,perl6の(試験)実装は Haskellで書かれてるしねえ. perlでも「Higher-Order Perl」なんかは パーサの実装を解説してるし, Parse::RecDescentなんていうパーサの モジュールもある(「はてなダイアリー」はParse::RecDescentで 実装されてるね). あとは英語の本は必須でしょう. それから岩波の「ソフトウェア」系の本とか. 各種アルゴリズムの定番というかバイブルは やぱりKnuthのThe Art of Compuer Programmingあたりかな 近藤嘉雪さんの「C言語のためのアルゴリズムとデータ構造」なんかは まとまってて読みやすい. 正規表現の基本的な実装例とかも出てる. 毎コミの「いまどきのプログラミング言語の作り方」は 単にJavaを使ってるというだけで, 考え方とかはかなり一般的なものだと思う. 再帰降下法で実装してるし,解析木とかもサンプルつきで出てるしね.
お礼
ありがとうございます。 参考にさせていただきます。
- oni-jushin
- ベストアンサー率0% (0/1)
Wikipediaのcompilerの説明が大体分かったのであれば、 言語処理系を作成するのに必要な知識は揃っているはずです。 あとはlexical analysis、syntax analysisなどのalgorithmを 好きな作譜言語で記述するだけです。 なでしこでもPerlでも大嫌いなJavaでもかまいません。 これだけで即、compilerの出来上がりです。 > 俺様言語ではなく、最終的には、もっと誰でも使えるようなものを > 作れるようになりたいと考えています。 それではEsperantoを学んではいかがでしょうか。 より多くの人に使ってもらうためには、 international lingua francaとして作られたこの言語を 学んでも損はないでしょう。 自分で言語を作るにあたっては考えるよりも感じることが大事です。 感性を磨くためにも 『The Art of Computer Programming 』 http://www.amazon.co.jp/Computer-Programming-Volume1-Fundamental-Algorithms/dp/475614411X を読まれるのがいいでしょう。また、 『Structure & Interpretation of Computer Programs』 http://www.amazon.co.jp/Instructors-Accompany-Structure-Interpretation-Computer/dp/0262692201/ref=pd_bxgy_b_text_b も必読でしょう。こちらも日本語訳が出ていますが、 あまり評判が良くないので原書をあたることをお勧めします。 言語の定義をどのように行えばいいのかを知るには 『The Definition of Standard ML』 http://www.amazon.co.jp/Definition-Standard-Ml-Robin-Milner/dp/0262631814 を参考にされるといいでしょう。 せっかく作るのですから、曖昧な定義ではなく、 しっかりとした形式的定義をすべきです。 Forthと共にあらんことを。
お礼
ありがとうございます。比較的高い本ですね・・・。 まずは、そこまで本格的につくろうとも思っていないのですが そういう知識も必要なのでしょうか。 又、英語はムリなので、読むなら日本語にしておきます ありがとうございました
- marui-tofu
- ベストアンサー率0% (0/1)
Lispを勉強することをお勧めします。 プログラミングの初心者でも『頑張れば』一ヶ月もすれば、 オリジナルのLisp方言 = オリジナルのプログラミング言語 をLispで作り上げることが出来るでしょう。 途中で挫折したりして失敗する可能性も相当高いと思いますが、 失敗から学ぶことも非常に多いです。 まずは「Lisp」で検索してみたらどうでしょうか。
お礼
ありがとうございます。 参考にさせていただきます。Lispですか。
- JaritenCat
- ベストアンサー率37% (122/322)
C言語を使ってプログラミング言語を作る定番といえば、昔はlexとyaccでした。 lexは字句解析を、yaccは構文解析をするコードを生成してくれます。 古くからあるツールですので、参考書はたくさんあるはずです。
お礼
ありがとうございます。 lexとyaccですか、参考にさせていただきます。
- buriburi3
- ベストアンサー率44% (353/792)
MicroSoft PowerPointは見るためのビューアーは無償配布されています。 http://www.microsoft.com/Downloads/details.aspx?familyid=048DC840-14E1-467D-8DCA-19D2A8FD7485&displaylang=ja 「いまどきのプログラム言語の作り方」を持ってますがコレはコード付きで具体的に解説されていて分かりやすいです。 ※絶版ですが比較的新しい本なので探せば未だ流通在庫が残ってるかも。 「スモールコンパイラの制作で学ぶプログラムのしくみ」とか 中田育男氏の「コンパイラ」関係の書籍など プログラム言語を作る為の参考書は探せばたくさんあります。 ただ、実現する為のプロイグラミング言語はC++かせめてJavaが出来ないと厳しいと思います。 Parl、なでしこ しか経験が無いのではサンプリソースが読めないでしょう。 C/C++はVisualStudio2008EEやTurboC++が無償配布されていますし、Javaは無償配布されているJDKとEclipseが使えます。
お礼
ありがとうございます C言語も何時かは勉強しようかと思っていました。 WEBで検索して見てみてもいまいち違いがわからないのですが、 CとC++では、どちらが向いているでしょうか。 また、どちらのほうが、まだ簡単でしょうか
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
.pptはMicrosoft PowerPointですので、持ってない人も多いかも。。。 古いデータはHTMLで残ってます。 http://risky.cs.inf.shizuoka.ac.jp/old/compiler2/index.htm 前半が逆ポーランド記法のアルゴリズム、 後半が全体の構文解析のためのアルゴリズムです。 > 電卓づくり 経験があるPerlかなでしこで良いと思います。 > Java JavaとPerl、なでしこは、文法があまりにも違うので(特にオブジェクト指向の所) 内容は見てみないとわかりませんが、もしかすると大半が参考に出来ないかも知れません。
お礼
ありがとうございます。 Microsoft Office2003一式を持っていますのでpptも見れます。 電卓づくりは、Perlかなでしこで十分なのですね。 たしかに、Javaと、Perl/なでしこは、文法がかなり違いますよね。 他の、Javaプログラミングの本なら読んだので、違うことはわかるのですが・・・。 やはり、あまり参考になりそうじゃないですか。 いや、これを機会に他のプログラミング言語も 勉強したほうがいいかな。とも思っているのですが。
ANo.7です。 これを質問者さんのライフワークとするといいかもしれませんね。 プログラミングにはアルゴリズムとゆうものがあります、 これを習得すると上達が早いと思います。 プログラミングを始めると、アルゴリズムの壁に当たり先へ進めなくなる時があります、 こうゆう時は頭を冷やして休息しましょう、そうするといいアイデアが出てきます。 プログラミング言語ですが、最初は好きなものから取り組んだ方がいいと思います。 http://www5c.biglobe.ne.jp/~ecb/index.html
お礼
そうですね、ライフワークにしてみたいです。 アルゴリズムの習得ですね。やってみます。
こんばんは、オリジナルなプログラミング言語を作るとゆうことは、 現在のインテルのCPUより高性能なCPUを作るのと同じ技術、知識と根気が必要です。 まず、プログラミング言語Cなどを完全にマスターする必要があると思います。 1000行、1万行のプログラムを簡単に作れるくらいの技術が必要です。 新しいプログラミング言語をどのツール(言語)で作成するかが問題です。 作成したら自分のプログラミング言語に移植すればいいのです。 つまりプログラミング言語Cは、C自身で書かれている場合があると思います。 コンパイラーが最初にすることは、記述された文字列が文法に合うか、 解析することから始まると思います。 このあたりを理解する必要があると思います。
お礼
>コンパイラーが最初にすることは、記述された文字列が文法に合うか、 >解析することから始まると思います。 ヒントをくださって、ありがとうございます。 C言語をマスターする必要がありますか!? では、道はまだ果てしなく遠いのですね・・・。 ところで、それは、新しいプログラミング言語は、Cで作ると良い。と 言われているのでしょうか?それともCを勉強した上で 別の言語で作れと言われていますか? 私としても、新しい言語は、もちろん勉強したいのですが、 どれが最適かわからないのです。
- 1
- 2
お礼
実現までのプロセスのアドバイスと、 参考サイトを教えていただいてありがとうございます。 ひとまず、C言語を頑張ってみようと思います。
補足
細くというより追記ですが、意見をお聞かせ下さい。 日本語プログラミング言語と、そうでない言語。 どちらを作ったほうが良いと思いますか?又、どちらのほうが、作るのが簡単だと思われますか?