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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

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

Q&A

0回答

380閲覧

pl'0でのswitch文の実装

aujxj

総合スコア0

プログラミング言語

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

0グッド

0クリップ

投稿2022/12/22 23:59

visualstudioでPL0コンパイラを編集しています。pl'0で新しくswich文を使用できるようにしようと思いコンパイラ編集しています。現在は、switchの値とcaseの値の一致しているかの比較方法と不一致だった場合にそのcaseのところを実行しない方法がわからずに困っています。わかる方いらっしゃいましたら教えていただきたいです。
出典 : 中田育男氏のホームページ > コンパイラ > 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 Switch: token = nextToken(); expression(); statement(); backP = genCodeV(jpc, 0); if (token.kind == Case) { if ( == ) { /*caseの値がswitchの値と一致しているかの判定*/ a++; /*caseの値が一致したことを示しdefaultが動かないためのもの*/ statement(); if (token.kind == Break) { /*breakがあったら終了*/ return; } else { /*breakがない場合はcaseの値一致関係なしに実行*/ token = checkGet(token, Case); expression(); token = nextToken(); statement(); } } else { backPatch(backP); } } if (a == 0) { /*caseが全部一致しなかったときにdefautを実行*/ token = checkGet(token, Default); statement(); } return;

なお、こちらはcompile.cのstatement()関数に追加した部分です。

また、token.kindでswitch,case,break,defaultは使用できるようにgetSource.h、getSource.cに定義しています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際に実行するプログラム例

function multiply(x,y) var a,b,c; begin a:=x; b:=y; c:=0; switch a+1 begin case 1; c:=a-b; break; case 2; c:=a+b; case 3; c:=a*a; default c:=b*b; end; return c; end; const m=2,n=1; var x,y; begin x:=m; y:=n; write x; write y; writeln; write multiply(x,y); writeln end.

switch文の動きとしてはC言語と同様にしたく、caseの値が一致したら中身を実行し、breakがあるところまで実行。case句すべての値が一致しなかった場合のみdefaultのところを実行する。

分かる方いらっしゃいましたら教えていただきたいです。

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

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

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

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

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

aujxj

2022/12/24 05:19

参考にはしましたが、私ではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問