質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

プログラム言語を自作したい

777shuang
777shuang

総合スコア96

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

6回答

1グッド

11クリップ

7019閲覧

投稿2021/08/10 04:30

編集2021/08/10 04:48

中学校でコンピュータ部に所属している者です。

複雑なC++にあきてきたのでプログラム言語を自作しようとしているのですが,
わかりやすく解説してくれているサイトが少なく困っています。

字句解析は力技で完成させましが, 構文解析がイマイチわかりません。
どなたか回答よろしくお願いします。

やりたいこと

・コンパイラ型/インタープリタ型どちらでもよい
・C/C++でつくりたい(Javaは許容範囲)
・Windowsで作りたい

持っている知識

字句解析(完成済み)
構文解析 - 構文木をつくる
中間コード作成(インタープリタならバイトコード作成)
(コンパイラ型は)アセンブリへ変換 - アセンブル

makosankibu👍を押しています

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Zuishin

2021/08/10 04:33

既に良質な説明を読んだけれどイマイチわからない人にもっとわかりやすく説明しろというんですか?
777shuang

2021/08/10 04:39

言語を完成させた方で,わかりやすいサイトをご存じならば教えていただきたい、という趣旨で質問しました。 わかりにくい質問で申し訳ありません。。。
YAmaGNZ

2021/08/10 04:42

C++コンパイラのソースを読んでみるとか
Zuishin

2021/08/10 04:48 編集

あなたに何がわかるかなどこちらにはわからないので、何がわかるのかを詳しく説明するところから始めなければ回答できる人はいないでしょう。 コンセプトの決定や大まかな設計が終わっているなら、BNF 作りから始めたらいいと思います。
Zuishin

2021/08/10 04:52

持っている知識の中に明らかに持ってない知識が混ざってるけど。
pepperleaf

2021/09/20 08:00

> 中間コード作成(インタープリタならバイトコード作成) > (コンパイラ型は)アセンブリへ変換 - アセンブル この辺は分かるのでしょうか? 形式的には、この手順と思うのですが、負荷、結構高いし、マシン依存が大きい。あと、バイトコードとありますが、このバイトコードはどこで動く? あるいはなんのバイトコード? インタープリタなら、バイトコード無しで直接、動かすのが一般的では?

回答6

19

プログラミング言語の作成はコンパイラの作成とセットです.
説明できるような量では無いと思うので,調べ方だけ示します.

ほとんどの大学でコンパイラの作成演習をしているので,
以下のキーワードで検索すると,いろいろ出てきます.

コンパイラ 作成 site:ac.jp

あと,難しいことがあったら,その科目で使われている教科書を見たら何とかなります。
高かったら図書館にねだってみてください。

各大学は「シラバス」で公開してるので,「大学名 シラバス」で検索し,科目名を検索すると教科書が出てくるはずです。

これでコンパイラ作成演習をしている大学生と同じ資料をすべて見ることができると思います.

投稿2021/08/10 04:47

ktl2018

総合スコア78

ta.fu, wistaile, glyzinieh, 777shuang, tr0903, morimorinoki, FIC-d, Zuishin, BeatStar, GenbuHase, 他9名👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2021/08/10 09:11

> ほとんどの大学でコンパイラの作成演習をしている これ、面白い情報ですね。全く想像もしてませんでした。
HogeAnimalLover

2021/09/20 07:05

>ほとんどの大学でコンパイラの作成演習 他大学のことは存じませんが、うちはしていましたよ。もっとも、演習用なので実用レベルにはほど遠いです。実用レベルを作るなんて簡単ではないですよ。 汎用なら現行のCで十分。特定用途(例えばゲーム用とか)に特化したエンジンとそのスクリプト言語作るくらいしか思い浮かばない。

5

中学生がC++を嫌って数週間でつくったBlawnという言語があります

一時期話題になったトピックなので探せばいろいろ参考になる記事はヒットすると思います

投稿2021/08/10 05:16

yambejp

総合スコア109020

rumachi, glyzinieh, mike, m.ts10806, asm👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

4

構文解析器を作る定石のひとつはyaccを使うことじゃないでしょうか。GNUなら上位互換のツールはbisonという名前です。Windows上でも使える版があるようです。探してみてください。

UNIXプログラミング環境
この本の第8章が70ページほど割いてyaccを使ってインタープリタを作ってみせています。いきなりインタープリタを作るのではなく、6段階に分けて少しづつ機能アップしていくという、処理系が成長する過程を見せてくれます。yaccの使い方も次第に習熟できますのでお勧めです。

yaccと並ぶツールにlex(GNUならflex)があります。字句解析器を作るものですが、この本ではlexは紹介だけにとどめて、Cで字句解析器を作っているのが質問者と似た状況なので、これもお勧めできる点だと思いました。
他の章も気が向いたら読んでみると良いです。Unix流の哲学と言いますか、今でも参考になると信じています。

投稿2021/08/10 07:37

編集2021/08/10 09:06
rubato6809

総合スコア1378

BeatStar, YouheiSakurai, katoy, otn👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

3

自作コンパイラ

この記事とか結構有名じゃないですかね。僕もこの記事に従ってコンパイラ作ってみましたけど、凄い勉強になりましたよ。

本だと、まず字句解析して、次に構文解析して、次に意味解析して。。。と進んでいく流れの物が多いのかなと思うんですが、それだと実際に動くコンパイラが出来上がるのが本の終盤になってしまって、本の途中で自分は今何をしようとしているのかが分からなくなってしまう気がします(実体験)。

この記事なら、簡単な四則演算の機能しかないけど「実際に動く」ものを、まず作ることから始めるんで、挫折しにくいかなと思います。

投稿2021/08/19 00:13

編集2021/08/19 04:31
takuyaKK

総合スコア37

ishina_yum, morimorinoki, ikedas👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

777shuang

2021/08/20 01:51

このサイト、一応四則演算のところまでやったのですが、 掲載されているソースコードがコンパイルエラーになったので挫折しました・・
takuyaKK

2021/08/20 02:23

そうですか、、、実行環境が違うのかもしれないですね。 このサイトには以下の記述があるんですが、こちらは試してみましたか? 「WindowsはLinuxとはアセンブリのソースレベルで互換性がありません。ただし、Windows 10ではLinuxを1つのアプリケーションのようにWindows上で動作させることが可能で、それを使うことでWindows上で開発を進めていくことができます。Windows Subsystem for Linux(WSL)というアプリケーションがそのLinux互換環境です。本書の内容をWindowsで実践するときは、WSLをインストールして、その中で開発を進めるようにしてください。」

0

コンパイラやインタープリタをつくるための教科書や大学講座動画は、たくさんあります。

そういったおのをつかって基礎をガッツリと習得することをおすすめします。
(小さい処理系をつくる記事のマネをするより、基本を学んだほうが応用が効きます)

投稿2021/09/26 08:24

katoy

総合スコア22306

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

自己解決

もしコンパイラを完成させたところでコード最適化はそんなにできません。
ですから潔くC++へのトランスパイラをつくったほうが楽だと思われます。

投稿2021/09/19 23:42

777shuang

総合スコア96

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

2021/11/24 13:11

こちらの回答が複数のユーザーから「過去の低評価」という指摘を受けました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。