569162 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

けむしろうの部屋別館

けむしろうの部屋別館

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Calendar

Archives

2024年06月
2024年05月
2024年04月
2024年03月
2024年02月

Category

Favorite Blog

ZIKOMANZOKU rooms kotoraya2000さん
しゅみっだ~~~ もこもこ5781さん
今日のご遺体 秘密の洗体レディーさん

Comments

コメントに書き込みはありません。

Freepage List

2006年01月25日
XML
カテゴリ:プログラミング
JR-100という1981年に発売されたナショナルのパソコン(時代的にはマイコンと言った方が相応しいが)のエミュレータを作ってます。

ROMデータを吸い上げなくてもだれでも使えるように、ユーザーズガイドに載っている外部仕様を満たすように一から作っているのですが、実機では少々の文法違反でも許容してしまうのが悩みの種です。
使う側にとっては融通が効いていいのかもしれませんが…。

文法違反許容の例:
  1. 予約語が空白を含んでいても良い。
    例えば"PRINT"も"P R I N T"もエラーとならない。

    →入力文字列をトークンに分割する処理が複雑になって困る。

  2. FOR文が入れ子になってなくても良い。
    一般的にはFOR文は入れ子になっていないとスタックオーバーフローになって実行が停止するが、JR-100のBASICでは次のようなプログラムが正常動作する。

    10 FOR I=1 TO 100
    20 FOR J=1 TO 100
    30 GOTO 50
    40 NEXT J
    50 NEXT I
    このままだとJループの状態がスタックに積まれ続けるためいずれオーバーフローするはずだがしない。

    →NEXT文の処理で特別な処理をする必要がある。

  3. IF文が文法違反の形式を受け付ける。
    JR-100のBASICでのIF文の文法は以下です。
    IF 条件式 [THEN] 文の並び
    THENは省略可能。
    ところがTHENの後ろの文の並びの部分で数値定数を書くことができ、その場合はGOTO文が省略されていると見なされる。例えば"IF A=0 10"は"IF A=0 THEN GOTO 10"と等価となる。

    →IF文を文法解析するときに特別な処理が必要となる。
    コンパイラを作ったことがある人は分かると思いますが、
    IF [THEN]
    という文法を作れば追加したくなりますがそれは間違い。
    "IF A=0 THEN B=C"という文を解析しようとすると、Bというトークンを読み込んだ時点で、これがGOTO文を省略したものか代入文の左辺なのかが区別できない。したがってTHENの後ろは数値定数でなければならない。

他にもまだ知らない落とし穴があるかもしれません。

現代的なプログラミング言語の理論から見るとちょっとルーズですが、当時はユーザ視点に立った(立ちすぎた)プログラムが作れたわけで、ある意味では幸せだったのかもしれません。

プログラミング可能なメモリ領域も16KBと非常に限られてましたし、1行も72文字以内という制限もあり、仕方なかったという面もあります。

もっとも、エミュ作者としては淡々と機能を実装していくのみです。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2006年01月26日 05時07分49秒
コメント(0) | コメントを書く
[プログラミング] カテゴリの最新記事



© Rakuten Group, Inc.