TL/1 の検索結果:

お潤い休み

…プログラミング言語 TL/1 について以前に調べたことがあるのだが、正確な情報はさっぱり見付からず、当時の雑誌を調べる必要があった。 コンピュータのことならインターネットに大抵の情報があるだろうと思っていたので、インターネットの限界を感じたのだ。 郷土資料を多数保管している図書館が資金不足で資料を破棄せざるを得ないという事例は少なくない。 その土地が積み重ねた歴史がそんなつまらない形で消えていくのは実に残念だと思うのだ。 Document ID: 40a36e534b22b1…

TL/1 の呼出規約を予想する

…プログラミング言語 TL/1 について、呼出規約は cdecl か PASCAL を使っているものだろうと先日は予想した。 では cdecl と PASCAL のどちらなのだろうか。 それを検証するためにこのようなプログラムを実際に (TL/1 の実装のひとつである TL/1-FM で) コンパイルして動作させてもらった。 FUNC FOO BEGIN WRITE(0: FOO(1, 2)) END FOO(X) BEGIN RETURN X END呼出規約が素朴な cdec…

TL/1 のエッジケース

プログラミング言語 TL/1 について、予約語と同じ名前の変数 (または関数や手続き) を宣言して使うことが可能であるということは以前に紹介した。 その規則には仕様書からは読み取れない若干の曖昧さがあるのではないかという意見を述べていたところ、当時の実際の処理系 (TL/1-FM) で様々な例を試した結果をコメントで貰ったのでひとつひとつ検証していこうと思う。 うまく動く例1 VAR VAR ARRAY ARRAY[2] BEGIN ARRAY[1]:=123 ARRAY[2…

TL/1 の呼出規約

…プログラミング言語 TL/1 のトランスレータを作った。 その他、 TL/1 の面白いと思った部分を取り上げて何度か記事にしている。 私が TL/1 を紹介するにあたって根拠にしているのは月刊 ASCII の 1981 年 1 月号であり、その号には TL/1 のサンプルとして連珠のプログラムが載っていて、自作のトランスレータでその連珠を変換できることも確認している。TL/1 トランスレータ - 主題のない日記しかし、確認するにあたって、掲載されていた連珠のプログラムに明らか…

Haskell で TL/1 構文解析器を書いた

…プログラミング言語 TL/1 の構文解析器を Haskell で書いてみた。https://github.com/SaitoAtsushi/TL1hs以前に Scheme で書いた TL/1 から C への変換器は仕様が曖昧なところを寛容な方向に解釈して実装したが、今回は自然に考えて、あるいは自然に実装するとこうなるという感覚を優先した。 TL/1 が実際に使われていた当時の処理系に近い解釈になっていると思う。 (貧弱な演算資源しかない環境では先読みが少なくなるように設計され…

TL/1 の変なところ (副プログラム呼出し)

プログラミング言語 TL/1 について私が持っている資料は月刊アスキー 1980 年 1 月号の特集記事の複製とネットだけだ。 それだけでは微妙に曖昧な箇所がある。 そのひとつが副プログラムの呼出しだ。 副プログラムとは手続きか関数のことであり、その呼出し方法についての記述はそれぞれこうある。 手続き名 (式, 式, …, 式)手続き副プログラムの呼出し。引数のある手続きでは、実際の値 (実引数) を「(実引数リスト)」で指定する。(略) 関数副プログラム名 (式, 式, ……

TL/1 トランスレータ

…プログラミング言語 TL/1 のパーサを作ったということを書きました。TL/1 パーサ - 主題のない日記それに機能を追加してパース結果を C のプログラムに変換して出力する機能も付けました。まだインストール手順の整備などは出来ていないのですが、 TL/1 で書かれたプログラムを動かすために必要だと思う部分はおおよそ出来たと思います。TL/1 の言語仕様と共に掲載されていたサンプルのゲーム「連珠」が動くことは確認できました。Document ID: 87931285e2143…

TL/1 パーサ

プログラミング言語 TL/1 のパーサを Scheme (R7RS) で書きました。https://github.com/SaitoAtsushi/TL1月刊アスキーの 1981 年 1 月号に掲載されている仕様をほぼ満足するようになっているはずです。 同時に掲載されていたパズルゲーム「連珠」のコードは解釈できることを確認しています。注意すべき点は箇条書にします。 構文 CALL, SENSE, USR には非対応です。 将来的にコードジェネレータまで作ることを考えると、過去…

TL/1 のわからないところ

プログラミング言語 TL/1 は予約語と同じ名前の変数を作ることが可能だという特徴を以前に紹介した。TL/1 の変なところ (名前解決) - 主題のない日記具体的な効果というとはっきりしない部分がある。 たとえばこんな事例だとどう解釈すべきだろう。 VAR ARRAY ARRAY FOO[1] BEGIN ENDまず ARRAY という名前の単変数を宣言している。 その次の行にある配列宣言の予約語 ARRAY は変数と解釈してエラーにすべきだろうか? BEGIN より前に変数…

コンビネータとパラメタライズ

…プログラミング言語 TL/1 のパーサが微妙な出来なまま放置していたことを思い出した。 TL/1 では予約語をシャドウすることが出来るという性質を実装していなかったのだ。 TL/1 の変なところ (名前解決) - 主題のない日記 これを適切に処理するには変数 (などの名前) 宣言を記憶して残りの部分のパースに使用する必要がある。 柔軟な Scheme であれば楽に出来るだろうと思ったのだがそうでもなかった。 コンビネータとパラメタライズの相性が悪い。例として簡単化した事例を見…

TL/1 の変なところ (関数と手続き)

プログラミング言語 TL/1 では関数と手続きに区別がある。 要は値を返さないのが手続きなのだが、手続きの呼び出しは式ではなく文となることが特徴である。 また、プログラムは文の集合であるとされているので、構文の中で式が許されているところでしか式を書けないし、式の一種 (あるいは一部) である関数呼出しも書けない。例として、一文字入力のための組込関数 GET を取り上げることにしよう。 問答無用で一文字を読み飛ばしたいなら返却値が不要であるからこんな風に書きたくなるかもしれない…

TL/1 の変なところ (論理演算)

プログラミング言語 TL/1 の変数や定数は 1 バイト幅の整数であることは以前述べた通りである。 定数のリテラル表記としては数字や文字での表現があるということも説明したが、 $FF と 0 に関しては更に別の表記として TRUE と FALSE と書くことも出来る。 これは名前から推察できる通り真偽値を表現している。 C を始めとして低レベル寄りのプログラミング言語では整数と真偽値は明確には区別されてない場合があり、 TL/1 もまたそうであるということだ。具体的には TL…

TL/1 の変なところ (WRITE 文)

プログラミング言語 TL/1 においては出力は WRITE 文によって行う。今更だがプログラミング言語入門の伝統に則って hello, world を表示するプログラムを示すことで WRITE 文の使用例としよう。 BEGIN WRITE(0: "hello, world", CRLF) ENDここで WRITE 文の最初で示しているゼロは出力装置を表している。 ファイルやプリンタやコンソールだ。 アーキテクチャによるがおおよそはファイルディスクリプタと考えてよいと思う。今ま…

TL/1 の変なところ (空白文字)

プログラミング言語 TL/1 では空白文字として扱われる文字は以下の通りだ。 ASCII コードが 1F 以下の文字 (制御文字) スペース ピリオド セミコロン 制御文字はともかくとして、ピリオドやセミコロンが空白扱いというのは珍しいのではないだろうか。 どうしてこのようになっているのかという理由は判然としないがピリオドについては一応の用途というか、利用方法の習慣があったようだ。 英文字からなる二項演算子の両端にピリオドを置くという習慣である。 A := 1 .ADC. 2…

TL/1 の変なところ (キャリー付き加減算)

…プログラミング言語 TL/1 の変数は 1 バイトの幅しかないということを説明した。1 バイトというと 0〜255 までの 256 種類の値しか表現できないわけで、その範囲内でプログラミングするのは大変なのだが、それを補うかのようにキャリー付き加減算の演算子 ADC と SBC が用意されている。 このキャリー付き加減算は TL/1 の最大の特徴と言えるだろう。今時の高級言語を使っているとキャリーフラグとかボローフラグという言葉を聞くことさえそうそう無いが、要は計算の結果とし…

TL/1 の変なところ (変数)

プログラミング言語 TL/1 の重要な特徴のひとつとしては、変数が挙げられる。 TL/1 の変数はどれも 1 バイト整数なので型の細かい区別がない。 単変数と配列があるくらいのものだ。そして、定数として使えるのも 1 バイトサイズ、すなわち 0〜255 と制限されている。 リテラル表記は十六進数で $0〜$FF と書くことも出来るし、文字で 'A' とか 'B' とかいった形でも表現できるが、どの表現方法をとっても意味は同じだ。 VAR A BEGIN A := 65 A :…

TL/1 の変なところ (名前解決)

…ログラミング言語に TL/1 というものがある。 近い時期の WICS や GAME といった言語についてはウェブ検索すれば少ないながらも言語仕様についての資料が見付かるのだが、 TL/1 については情報がとても少ないので私が知っていることをまとめようと思いながら十余年も経ってしまった。 ようやくひとつの文章にまとめたので公開することにする。http://www7b.biglobe.ne.jp/~saia/tl1.htmlTL/1 の仕様には他の言語では珍しい奇妙な点がある。…

KMyacc

…年ぶりにバージョンアップしたそうで話題になっている。C以外の言語も生成できるようになったらしい。このツールは優秀で使いやすい。私が公開している「TL/1構文チェッカー」にもKMyaccは使っていたりするし、卒業研究でもお世話になった。実際のところ、私の環境ではbisonを実行すると何故かエラーが出ることがあるというのもKMyaccを利用する理由なんだけどね。どうしてもbisonに依存する場合にはDJGPP版を使ったりするのだが、小さいコードが大好きな私には我慢ならんのですよ。