FE Pseudo Language Interpreter
FE = Fundamental Information Technology Engineer Examination(基本情報技術者試験)
This is an unofficial tool. Not affiliated with IPA (Information-technology Promotion Agency, Japan).
基本情報技術者試験で使用される疑似言語を、VSCode上で実行・デバッグできる拡張機能です。
試験の過去問や練習問題を「実際に動かしながら」学習できます。
注意:非公式な個人的に作成されているアプリです。そのため、ソースコードは公開しておりません。
対象
- 基本情報技術者試験の学習者
- プログラミング初学者
- 教育機関・研修用途
機能
.pseudo ファイルの実行(出力パネルに結果を表示)
- ステップ実行(
F10:ステップオーバー / F11:ステップイン)
- ブレークポイントの設定
- 変数ウィンドウでの変数値の確認
- Watch ウィンドウでの式の評価(変数名・四則演算・比較式・論理演算・配列アクセス・関数呼び出しに対応)
- コールスタックの表示(現在の関数名と行番号のみ、ネストした呼び出しの全履歴表示は未対応)
- 疑似メモリパネル:変数のアドレスと配列の実体をグリッドで可視化(クリアボタンで初期表示状態に戻せます)
- トレース表パネル:ステップ実行中の変数の変化を表形式で記録(監視式の追加、CSV出力に対応)
- フローチャートパネル:
.pseudo ファイルの制御フローをJIS X 0121準拠の図記号でリアルタイムに可視化
- 新規
.pseudo ファイルの作成(コマンドパレット/エクスプローラー右クリック/エクスプローラー上部アイコン、自動採番・初期テンプレート挿入)
- シンタックスハイライト
- コードフォーマッター
- 特殊記号のスニペット入力(
←、×、÷、≧、≦、≠、〇)
使い方
新規ファイル作成
- コマンドパレット(
Ctrl+Shift+P)から 疑似言語: 新しいFE疑似言語ファイル を選択
- または、エクスプローラーでフォルダを右クリック → 「新しいFE疑似言語ファイル」
- または、エクスプローラー上部のアイコンをクリック
Untitled-1.pseudo のような名前で新規ファイルが自動生成され、初期テンプレートが挿入された状態でエディタに表示される
- エディタに、手書きでコードを入力して、保存する。
実行
.pseudo ファイルを開く
Ctrl+F5 を押す、またはエディタ右上の ▶ ボタンをクリック
- コマンドパレット(
Ctrl+Shift+P)から 疑似言語: 実行 を選択することもできます
デバッグ
.pseudo ファイルを開く
F5 を押す、またはコマンドパレットから 疑似言語: デバッグ を選択
- VSCode 標準のデバッグUI(変数ウィンドウ・Watch・コールスタック・ブレークポイント)が使えます
- 疑似メモリパネルがパネルエリアに表示され、配列のアドレスと実体の対応を確認できます
- トレース表が表示され、ステップごとの変数の変化を表形式で確認できます
フローチャート表示
.pseudo ファイルを開く
- エディタ右上の type-hierarchy アイコンをクリック、またはコマンドパレットから
疑似言語: フローチャートを表示 を選択
- エディタ右側にプレビューパネルが開き、コードの制御フローが図示されます(左右分割表示)
- 同じ
.pseudo ファイルで再実行すると、既存のパネルが更新されます(新規パネルは開きません)
- パースエラーがある場合は、パネル内にエラーメッセージが表示されます
疑似メモリパネル
デバッグ中、画面下部のパネルに 疑似メモリ が表示されます。
- 変数エリア(上段):各変数のアドレスと値
- 実体エリア(下段):配列の実体セル
- 矢印でポインタと実体の対応関係を視覚化
arrayB ← arrayA のような参照渡しでは、2つのポインタが同じ実体を指します
テーマは Cream / Dark / Mint から選択できます。
トレース表パネル
デバッグ中、右サイドバーに トレース表 が表示されます。
ステップ実行のたびに「行番号・コード・各変数の値」が1行ずつ記録され、変数の変化を時系列で追跡できます。
- 値が変化したセルは背景色でハイライト表示されます
- 配列は
[10, 20, 30] の形式で表示されます
- 監視式入力欄に任意の式(例:
x + y、arr[1])を入力すると、評価結果が列として追加されます
- 「CSV出力」ボタンで、トレース表の内容をCSVファイルとして保存できます(UTF-8 BOM付き、Excel対応)
- クリアボタン(タイトルバー)でテーブルと監視式を全てリセットできます
右サイドバーが閉じている場合は Ctrl+Alt+B(View: Toggle Secondary Side Bar)で開いてください。
フローチャートパネル
.pseudo ファイルのコードを、JIS X 0121準拠の図記号でフローチャート化して確認できます。
- 端子記号(角丸矩形):開始・終了
- 処理記号(矩形):代入・変数宣言
- データ記号(平行四辺形):出力文
- 判断記号(ひし形):if / elseif / else
- ループ端記号(角を斜めに切り落とした六角形):while・do-while・for
- 定義済み処理記号(二重線矩形):関数呼び出し
関数定義は、それぞれ独立したフローチャートとしてメインの処理と横に並べて表示されます。
外部CDNに依存しない自前のSVGレンダラーで描画しているため、オフライン環境でも利用できます。
パネル右上の 「PNG保存」 ボタンをクリックすると、フローチャートをPNG画像としてローカルに保存できます。
対応構文
| 構文 |
例 |
| 変数宣言 |
整数型: x |
| 変数宣言(初期値付き) |
整数型: x ← 10 |
| 変数宣言(複数) |
整数型: x, y, z |
| 代入 |
x ← 10 |
| 算術演算 |
x + y、x × y、x ÷ y(実数除算)、x ÷ y の商(整数除算・切り捨て)、x mod y |
| 比較演算 |
x が y より大きい、x ≧ y、x ≦ y、x ≠ y |
| 論理演算 |
x and y、x or y、not x |
| 条件分岐 |
if、elseif、else、endif |
| 前判定繰り返し |
while、endwhile |
| 後判定繰り返し |
do、while |
| 増減繰り返し(昇順) |
for (i を 1 から 5 まで 1 ずつ増やす)、endfor |
| 増減繰り返し(降順) |
for (i を 5 から 1 まで 1 ずつ減らす)、endfor |
| 配列(1次元) |
整数型の配列: data |
| 配列(2次元) |
整数型の二次元配列: matrix |
| 配列アクセス(2次元) |
matrix[i, j](IPA仕様の , 記法) |
| 配列末尾追加 |
list の末尾に x の値を追加する |
| 値の入れ替え |
data[i] と data[j] の値を入れ替える |
| 関数定義・呼び出し |
〇 関数名(引数) |
| 出力 |
x の値を出力する |
| 出力(複数・コンマ区切り) |
x の値と y の値をこの順にコンマ区切りで出力する |
| コメント(行) |
// コメント |
| コメント(ブロック) |
/* コメント */ |
| return |
return x |
| break(ループ終了) |
繰返し処理を終了する |
| break(ラベル付き) |
αの行から始まる繰返し処理を終了する(// α コメントが付いたループ行を終了) |
| 大域変数 |
大域: 整数型: g |
| クラス定義 |
クラス ClassName … endクラス |
| インスタンス生成 |
ClassName: obj / obj ← ClassName(引数) |
| フィールドアクセス |
obj.fieldName |
| フィールド代入 |
obj.fieldName ← 値 |
| 自身のフィールド参照(コンストラクタ内) |
自身のfieldName |
| 外部クラスファイルの読み込み |
/* @include ClassName.pclass */ |
クラス
クラス定義
クラス〜endクラス でクラスを定義します。
コンストラクタは 〇ClassName(引数) として定義します。
クラス Point
整数型: x
整数型: y
〇Point(整数型: qX, 整数型: qY)
自身のx ← qX
自身のy ← qY
endクラス
〇main()
Point: p
p ← Point(3, 5)
p.x の値を出力する // → 3
p.y の値を出力する // → 5
フィールドの型にはプリミティブ型だけでなく、他のクラス型も指定できます(連結リストなど)。
.pclass ファイルと @include ディレクティブ
クラス定義を別ファイル(拡張子 .pclass)に分離し、/* @include */ で読み込めます。
.pseudo ファイルと同じディレクトリに配置してください。
ListElement.pclass
クラス ListElement
文字型: val
ListElement: next
〇ListElement(文字型: qVal)
自身のval ← qVal
endクラス
main.pseudo
/* @include ListElement.pclass */
大域: ListElement: listHead ← 未定義の値
〇main()
ListElement: node
node ← ListElement("A")
listHead ← node
listHead.val の値を出力する // → A
複数の .pclass ファイルを読み込む場合は @include を複数行書きます。
/* @include NodeA.pclass */
/* @include NodeB.pclass */
注意:循環 @include(A が B を include し、B が A を include する)は検出されエラーになります。
配列のインデックス
IPA の問題文では、問題によって配列の要素番号が 1 始まり または 0 始まり のどちらかで指定されます。
ファイル内のコメントに問題文の記述をそのまま書くと、インタープリターが自動で判別します。
1 始まり(デフォルト)
ディレクティブを書かない場合、または「要素番号は 1 から始まる」と記述した場合は 1 始まり として動作します。
/* ここで,配列の要素番号は 1 から始まる */
文字列型の配列: data ← {"a", "b", "c"}
data[1] の値を出力する // → a
data[3] の値を出力する // → c
0 始まり
「要素番号は 0 から始まる」と記述すると 0 始まり として動作します。
/* ここで,配列の要素番号は 0 から始まる */
文字列型の配列: data ← {"a", "b", "c"}
data[0] の値を出力する // → a
data[2] の値を出力する // → c
ディレクティブはファイル内のどこに書いても認識されます(コメント内外を問いません)。
変数ウィンドウと疑似メモリパネルのインデックスラベルも自動的に切り替わります。
スニペット
| 記号 |
ひらがなprefix |
ローマ字prefix |
〇 |
まる |
maru |
× |
かける |
kakeru |
÷ |
わる |
waru |
← |
だいにゅう |
dainyuu |
≧ |
いじょう |
ijou |
≦ |
いか |
ika |
≠ |
ひとしくない |
hitoshikunai |
ひらがなprefixがうまく動作しない時は、ローマ字prefixを使用してください。
配列ディレクティブ
| 挿入テキスト |
prefix |
/* ここで,配列の要素番号は 0 から始まる */ |
array0 / 0はじまり / zerohajimari |
/* ここで,配列の要素番号は 1 から始まる */ |
array1 / 1はじまり |
対応ファイル
拡張子 .pseudo のファイルが対象です。
既知の制限
- 文字列操作関数(部分文字列取得など)は未対応です
- 算術関数(切り捨て・切り上げ・絶対値など)は未対応です
- 標準入力(キーボード入力)には対応していません
- 関数のデバッグ時、フローチャートやトレース表、疑似メモリにバグがある場合があります。順次対応中ですのでご了承ください。
除算の挙動について
÷ は型に関係なく常に実数除算を行います(例:7 ÷ 2 → 3.5)。
整数除算(切り捨て)が必要な場合は ÷ の商 を使用してください(例:7 ÷ 2 の商 → 3)。
ライセンス
本ソフトウェアは 「FE疑似言語 教育利用ライセンス 1.0」 の下で提供されています。
許可されること
- 個人利用
- 教育目的での利用
- 複製
- 無償での再配布
- 学校・大学・学習塾・研修での利用
- 教材や授業での利用
- ブログや動画での紹介
禁止されること
- ソフトウェアの改変
- 改変版の配布
- 商用利用
- 有償販売
- 他のソフトウェアやサービスへの組み込み
詳細については、LICENSEを参照してください。
免責事項
本ソフトウェアは現状のまま提供されます。
本ソフトウェアの利用により生じたいかなる損害についても、作者は責任を負いません。