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

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

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

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

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

プログラミング言語

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

Q&A

解決済

2回答

2043閲覧

Cコンパイラ(PL0)

orgfZ2iN975lvS6

総合スコア1

C

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

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

プログラミング言語

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

0グッド

0クリップ

投稿2022/01/10 07:59

編集2022/01/10 10:59

visualstudioでPL0コンパイラを編集しています。if文にelseを追加しましたが、if文の真偽に関わらずelse文が実行されてしまいました。if文が真の時はcase elseは実行されないなどの区別はどうすればよいのでしょうか?
出典 : 田中育男氏のホームページ > コンパイラ > PL0'コンパイラのソースリスト
http://www.k.hosei.ac.jp/~nakata/oCompiler/PL0compiler/prog_proc1.html
http://www.k.hosei.ac.jp/~nakata/oCompiler/PL0compiler/compile.c

case If: //if文のコンパイル
token = nextToken();
condition(); //条件式のコンパイル
token = checkGet(token, Then);
backP = genCodeV(jpc, 0); //jpc命令
statement(); //文のコンパイル
backPatch(backP); //上のjpc命令にバックパッチ
return;
case Else:
token = nextToken();
statement(); //文のコンパイル
return;

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

actorbug

2022/01/10 09:03

コンパイルするのに必要なすべてのソースへのリンクを提示してください。 あと、出典を明示してください。 リンク先からすると、中田育男氏の著書でしょうか。
guest

回答2

0

ベストアンサー

else は文の始まりではないので、if文の処理のところに追加するべきです。

C

1 case If: /* if文のコンパイル */ 2 token = nextToken(); 3 condition(); /* 条件式のコンパイル */ 4 token = checkGet(token, Then); /* "then"のはず */ 5 backP = genCodeV(jpc, 0); /* jpc命令 */ 6 statement(); /* 文のコンパイル */ 7 token = nextToken(); // ★ 8 if (token == Else) { // ★ 9 backP2 = genCodeV(jmp, 0); // ★ 10 backPatch(backP); // ★ 11 token = nextToken(); // ★ 12 statement(); // ★ 13 backPatch(backP2); // ★ 14 } // ★ 15 else // ★ 16 backPatch(backP); /* 上のjpc命令にバックパッチ */ 17 return;

このコードは適当に書いたもので実際には使えないと思います。

投稿2022/01/10 09:33

編集2022/01/10 09:57
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どこのなんというコンパイラをお使いでしょうか

case if とか case else とかの構文は標準のC言語にはないですよ

投稿2022/01/10 08:44

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2022/01/10 09:01

case If: / case Else: だから問題ない。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問