教えて!gooにおける不適切な投稿への対応について

一番最初に開発されたプログラム言語の作り方を教えてください。不思議で仕方がないです。
どうやって、機械に英語や2進数や10進数を分からせたんですか?

gooドクター

A 回答 (10件)

「アルゴリズム+データ構造=プログラム PASCAL <コンピュータ・サイエンス研究書シリーズ 40>」


https://www.kosho.or.jp/products/detail.php?prod …

この本も 1980年代の本で PL/0 という PASCALによく似た
言語の実働するコンパイラの実装が掲載されています。

所謂 「再帰下降型構文解析」の基本と実践が学べます。
これを覚えると簡単な文法の言語なら数日で実装できるようになります。
本当。思ったより簡単なんです。
    • good
    • 0

ちなみにコンピュータに言語をわからせるための技法は


40年前既に確立されていて、言語開発者は皆この本を
読んだものでした。
#ひどく読みにくい本でしたが・・・

この表紙は当時のもので通称 Red Dragon Book と言います(^^;

現在はもっとリアルなドラゴン絵の版が出てます(^^;

https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%8 …
「プログラム言語の作り方」の回答画像9
    • good
    • 0

この答えは実は非常に難しいのですが、現代の主流の中央演算処理装置に特化した話であれば、いわゆるアセンブリ言語でしょう。



実際にCPUを作ったことがあるとわかりやすいのですが、CPUの設計に欠かせないのが命令セットの設計です。CPUは複数並列の電気信号(この一つ一つを「ビット」と呼びます)を受け取り、ビットの並びによってどういった動作をするかを解釈し、その動作に応じた回路に情報を流してその回路の出力結果を取り出す、といったことを繰り返しています。このビットの並びのことを「命令」と言い、その一覧を「命令セット」と言います。

さて、CPUにはビットの並びを与えてやればその通りに動いてくれるのですが、人間が命令をビットの並びとして覚えるのはとても大変です。そこでまずはビットの並びを数値化しました。しかし、やはり動作と数字を対応付けるのはとても大変なので、それぞれに人間が分かりやすい名前を付けてやることにしました。こうやって個々の命令に名前が付けられたものがアセンブリ言語です。

ちなみに、アセンブラとは、アセンブリ言語を命令の数値に変換するソフトウェアですが、純粋な命令セットの羅列以外にラベルやマクロなどを使えるようになっており、より高級なプログラミング言語に昇華しています。アセンブラが登場する前はアセンブリ言語で書かれたプログラムを人力でせっせと数値化していました(ハンドアセンブルと言います)。中高生向けのマイコン教材キットなどでは、そのマイコンに搭載されているCPU向けのアセンブリ言語を紙に書いてプログラミングをし、ハンドアセンブルによって一つ一つ数値変換した上で10キー入力デバイスでプログラムを入力するようになっていると思います。
    • good
    • 0

プログラミング言語で基数を分からせたわけではありません。


コンピューターのアーキテクチャとしてそれが存在するから、
プログラミング言語で理解して処理できるわけです。
また、コンピューターは英語を理解しているわけではありません。
すべてメモリ上に展開されたアドレス情報によって制御されます。

プログラミング言語の仕様としても、リンカなどによって、
各命令のアドレスが参照されることで処理が行われるように
コンパイルがされます。

突き詰めて理解したい場合は、当サイトなどへの質問ではなく、
機械語、アセンブリ言語などの学習をするしかありません。
    • good
    • 0

20歳未満ではありませんが,男です。

簡単な例を示しておきましょう。
 コンピュータの中のメモリを,例えば8ビットずつで,一つ目二つ目と並べてあるとしましょう。8ビットということは,0と1が8個並んでいるわけです。なぜ0と1にできるかというと・・・ここは勉強してください。ある回路のある端子の電圧が〇ヴォルトより上だと1,下だと0とできるものがあるわけです。で,例えば「5」という数字を2進法では「00000101」になります。これがメモリの三つ目に記憶されていたとしましょう。そして「これを2倍にしなさい」という命令は,「この順番(電圧のかかり方)をひとつずつ左に動かしなさい」という動作になっていて結局「00001010」となり,これは2進法の「10」ですね。この「ひとつずつ左に動かせ」とかの部分が機械語(ニューモニック)で書かれていて,それに対してCPUという処理回路が電圧の掛け方を知っているというわけ。そして,CとかFORTRANとかJAVAとかの高級言語は「2倍しなさい」という命令を記述しているわけ。コンパイラというソフトウェアが,この人が読める言語(peaple readable language)を機械が読める言語(machin readable language)に変換して,その命令を電気回路に電圧を順番にかけて処理させているわけ。
    • good
    • 0

機械が直接実行できるのはマシン語で、マシン語はバイナリデータ(2進数のデータ)しか扱えませんが、命令を組み合わせることで様々は構文を解釈させることが可能です。



1980年代 BASICという言語を更に簡略化した
tiny basic という言語が何種類か作られましたが
マシン語(intel8080)で僅か千数百命令しかありませんでした。
2KB以下しか無かったので当時メモリ―が高価だった時代でも
容易に利用出来ました。

コマンド解析や数式解析処理を読みましたが
ここまでマシン語で簡素に書けるのかと感動したことを
覚えています。
    • good
    • 0

答えは「アセンブリ言語」。

「機械語」とも呼ばれる。
決められたシーケンスを動作させるための命令(コマンド)の一群です。

2進数で動作する機械の入力と出力それぞれ意味を付けただけのことです。
10進数の32(2進数の 0010 0000)は空白、
10進数の33(2進数の 0010 0001)は "!"、
10進数の65(2進数の 0100 0001)は "A"、
10進数の66(2進数の 0100 0010)は "B"、

のように割り当てて「0」と「1」の羅列を人が読み取っていました。
要は、分からせたのではなく、そのようにルールを作ったってだけ。
    • good
    • 0

あなたがおっしゃる『コンピュータ』は『計算』や『文字操作』などを行う機械で、計算や文字操作の順序を好きなように変えることが出来るようにしたことで様々な種類の処理をすることができるというものです。



その『計算や文字操作の順序』のことを『プログラム』と言います。

特定の目的に作られた機械はこの『計算や文字操作の順序』を変えることが出来ないのが普通ですが、コンピュータはそれを好きに変えられるというのが最大の特徴です。
そのプログラムを『コンピュータ』という機械の中に『変えられる工夫を入れて組み込んでおく』というのが実際のコンピュータの構造(仕組み)です。

この『プログラムを組み込んでおく』ということを『ストアーする』と言い、そういう仕組みを使っていることから、今日のコンピュータは『ストアード・プログラム方式のコンピュータ』と言います。

コンピュータは『二進法』で書かれた『プログラム』を実行する機械です。
ですから、No.2 さんがおっしゃる様に” 機械に2進数を分からせた」んじゃなくって「二進数を扱う機械を作った」 ”というわけです。

プログラムを『計算や文字操作の順序』と書きましたが、もっと具体的に言えば、次のように細かな操作をやるべき順序で並べたものです。

こたえをクリアする。
最初のデータを持ってくる。
次のデータを最初のデータに足す。
その結果を答えを記憶する場所に記憶する。

これを二進法で書いたものが一番原始的なプログラムです。
今日のコンピュータも、最終的にはこのプログラムで動作しています。
しかし、二進法で書かれたプログラムは0と1が並んだだけのようなものです。
コンピュータはこれを良く理解できるでしょうが、人間にはわかりにくい。

プログラムに使う『計算や文字操作』のひとつひとつの操作のことを『命令』と呼びますが、その命令を1と0で表さず、人間にわかる『足す』『引く』『掛ける』『割る』のような人間語で置き換えたものが最初のプログラミング言語として開発されました。
その名前は『アセンブリ言語』と呼ばれました。
アセンブリ言語に対し、プログラムを表現する1と0とで書く言語を『機械語』と言います。
アセンブリ言語で書いたプログラムの1行1行は0と1で書かれたプログラムの1行1行と完全に一致しています。

機械語のプログラムに比べ、アセンブリ言語で書かれたプログラムは人間にとってはわかりやすいものですが、たとえば 1+2を計算する場合にその数式を書くわけではないので、処理手順の表現方法としてはまだ人間にとって自然な感じではありません。

その『人間の思考に対応した自然な表現』でプログラムを書けるようにしたものが今多くの人が使っているプログラム言語です。
No.2 さんが紹介された Fortran や今日よく使われている C 言語、Java などがこれに当たります。
この人間が日ごろ使う表現に近いということを、言語としては『高級』と表現し、これらを『高級言語』といい、アセンブリ言語のような機械語に近いものを『低級言語』と呼びます。

人間が話す言語に日本語や英語があるように、同じ処理を表現するにもいくつかの表現方法がとれるようになっており、そのためにいろいろな言語が世の中にはあります。
それらは例えば計算に特化していたり、文字操作に特化していたり、AIのための処理に特化していたりと、それぞれ特徴をもっています。

これらの言語で書かれたプログラムは『コンパイラー』と呼ばれる『翻訳ソフト』を使って機械語に変換(翻訳)して実行します。
コンパイラーが人間が書いたものをどのように機械語に翻訳するかはコンピュータサイエンスとか情報工学などを勉強すると理解出来るでしょう。

興味があったらぜひ挑戦してみてください。
    • good
    • 0

> どうやって、機械に英語や2進数や10進数を分からせたんですか?



いや、逆でしょう。「機械に2進数を分からせた」んじゃなくって「二進数を扱う機械を作った」のです。理由は「10進数を機械で扱うのがメンド臭いから」(笑)。それだけ、です。

ちなみに、「一番最初に開発されたプログラム言語」ってのを何を想定してるのか知りませんが、ENIAC(世界初の電子計算機: こいつは10進法を扱えるように設計されてたけど)とかだとパッチコードですよ。
下の写真見れば分かりますが「コードで物理的に接線していく」のが当時の「プログラミング」です。・・・まぁ、これを「プログラミング言語」って呼んで良いのかどうかは知りませんけどね(笑)。

なお、世界で初めて出来た高級言語はFortranと言って、こいつは科学技術計算で、今でも現役です。
「プログラム言語の作り方」の回答画像2
    • good
    • 0

ちょっと古いですけど、以下の書籍とか、同系統の本がいくつもあります。


それらを読まれてみるといいですよ。

yacc/lex―プログラムジェネレータon UNIX (日本語) /五月女 健治
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング