アプリ版:「スタンプのみでお礼する」機能のリリースについて

アセンブリを使用して、オリジナル言語を作りたいのですが、
何か参考になるウェブサイトや書籍はありますか?

A 回答 (5件)

今の GCC は手書きの構文解析器がベースだったはずです.


確か 4.0.0 になったときに「手書きの構文解析器の方が適切なときにエラーが出せたりして便利なのでこっちに変える」ってアナウンスが出てました.
    • good
    • 0

すみません, さすがに書名も忘れてしまいました. ごめんなさい.


ただ, 「入出力部分」と「解析/合成部分」を作って組合せれば OK なわけです. 前者は, もうそれこそシステムにべったり依存し, しかも「言語の本質」とは全く関係ないところなので話として出しにくいんじゃないでしょうか. 一方で後者の方は「だいたい普通に使うやりかた」というのが確立してますから, そっちは簡単に言ってしまえば「高級言語で全て書いてからハンドアセンブル」という逃げも存在します.
だから, 「アセンブリを使って」というのは, それこそ CP/M の頃のように「普通はアセンブリ」という時代じゃないと, 物として残らないんじゃないでしょうか.
しかし, 「(オリジナルな) 言語処理系」ってなぜかコンスタントに書籍が出るんですよね.... でも, 普通は lex/yacc かなぁ. ごく稀に「構文解析器を作ってみました~」とかいう本もあったりするけど, 10年前の本をして「普通はやらない」とか「そのうち人間国宝級」とか言われるくらい (とはいいつつその本では Pascal の処理系を手書きの構文解析器で処理してますが).
いずれにしても, アセンブリはきついなぁ. C で書かれた手書きの構文解析器なら有名なのがありますが.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>「(オリジナルな) 言語処理系」ってなぜかコンスタントに書籍が出るんですよね
確かに言語処理系の書籍は出ていますが、優秀なものって中々ないですよね。

>C で書かれた手書きの構文解析器なら有名なのがありますが。
よければ教えて下さい。

お礼日時:2008/12/09 23:04

「オリジナルな言語の処理系をアセンブリだけを使って作る」のは, さすがに手間がかかりすぎて無理に近いと思います.


いや, 確かに Z80 (というか i8080) + CP/M の時代にはそういうことをやった本があったのは覚えてますが.... 持ってたけど捨てちゃった.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
その本が凄く欲しいです……。
何かそれに近いような書籍はありませんか?
ないようなら自分でやるしかありませんね。

お礼日時:2008/12/08 16:58

参考書としては#1の方が挙げられた通り。

ただ、全部アセンブラで書くのはお勧めでないです。
プログラム構造からコードを生成するあたりは本来やりたいことだろうから面白いわけですが、字句解析・構文解析は面倒です。
arm[1]=boy+cat(0)*dog のような代入式を表す文字列から演算子・変数名・関数名・添え字などの文法上の要素に分解してデータ構造を作るあたりなど、おそらくやりたいことではないでしょう。文法エラー処理も大変です。
字句解析はlexやflex、構文解析はyaccやbisonといったツールがありますので、それを使うのがいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
flex等のツールで作成する方法で以前に制作した事があります。
その時の制作時には、C言語を使用したので、今度は全てアセンブリでやろうかなと思ったのですが……。
大変そうですが粘ってみます。

お礼日時:2008/12/08 16:56

オリジナル言語の設計や実装については、いわゆるコンパイラやに関する書籍が参考になります。



Aho, Sethi, Ullman "Compilers"
"ヴィルトのコンパイラ構成法"
中田育男 "コンパイラの構成と最適化"

インタプリタ型の場合は"デバッガの理論と実装"のようなデバッガ関連の書籍も役に立ちます。

通常 C などの言語でオリジナル言語を実装する際には、字句解析器や構文解析器を自動生成しますので、アセンブリ言語にこだわるのならその辺は自前で実装する必要があります。この点について参考となる文献は聞いた(見た)ことがありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
挙げられた書籍を探して、目を通したいと思います。

お礼日時:2008/12/08 16:51

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