1 |
A |
授業ガイダンス ・コンパイラ型言語、インタプリタ型言語、ヴァーチャルマシン型言語の動作原理 ・プログラミング言語の分類方法 |
事前学修 |
シラバスをよく読み、授業の目的と主な内容、進め方について確認する。 普段利用しているプログラミング言語をリストアップし、その特徴について調べる。 (2時間) |
事後学修 |
授業内で解説した内容に基づいて、各種のプログラミング言語の特徴を詳しくまとめてくる。 自分が知っているもののほか、触れたことがないプログラミング言語についても調べると良い。 (2時間) |
2 |
A,C |
プログラミング言語とは? ・HTMLはプログラミング言語であるか? |
事前学修 |
プログラミング言語の定義について調べ、自分なりの考えをまとめてくる。(2時間) |
事後学修 |
プログラミング言語とマークアップ言語の違いについて探求し、授業内で提示された問題に対する自分の意見を整理する。(2時間) |
3 |
A,C |
計算式の処理 ・レベル別の数式処理 ・逆ポーランド記法の導入による演算子の優先度の取り扱い |
事前学修 |
プログラミングにおいて利用される、数学的な計算式や演算子に関する基本的な知識を復習する。 演算子の優先度や結合規則について学び、数式の解釈方法を確認する。 (2時間) |
事後学修 |
レベル別の数式処理に関する例題や演習問題を解いて、実際の数式を処理するスキルを向上させる。 複雑な数式をシンプルなステップに分解し、計算を行う方法を練習する。 (2時間)
|
4 |
A,C |
プログラミング言語を設計する ・拡張BNF (Backus-Naur Form) 記法によるプログラミング言語の形式的な文法記述 |
事前学修 |
拡張BNF記法と呼ばれるものには、様々な種類のものがある。インターネット上で、その種類についてどのようなものがあるかを調べてくる。(2時間) |
事後学修 |
授業内で紹介した拡張BNF記法を用いて、メールアドレスやURLなどの身近な規則を表してみる。 異なる要件に基づいてシンプルなプログラミング言語を設計し、その文法を考える。 (2時間) |
5 |
A,C |
字句解析 ・読み込まれたソースコードを分割してトークン列を生成するまでの流れ |
事前学修 |
字句解析(Lexical Analysis)の基本的な概念と役割について調べる。 正規表現や有限オートマトンなど、字句解析に関連する主要なアルゴリズムやツールについて調査し、理解する。 (2時間) |
事後学修 |
授業で提示された字句解析器を用いて、様々なプログラムコードをトークン列に分割する練習を行う。 エラーハンドリングや不正な入力など、実践的な問題への対処方法について考える。 (2時間) |
6 |
A,C |
構文解析、評価実行 ・トークン列を対象に構文解析を行い、構文木を生成する。 ・生成された構文木に対して再帰的な関数呼び出しを行うことで、プログラムの実行が行われる。 |
事前学修 |
構文解析 (Syntax Analysis) の基本的な概念と役割について調べる。(2時間) |
事後学修 |
構文解析器を実装し、トークン列から構文木を生成する演習を行う。 サンプルの文法規則を使用して、構文解析プロセスを実際に実行する。 (2時間) |
7 |
A,C |
演算の優先順位を文法で表す ・逆ポーランド記法が不要の優先順位の取り扱い |
事前学修 |
演算子の優先順位と結合性についての基本的な概念を復習しておく。(2時間) |
事後学修 |
学習した文法規則を使用して、演算子の優先順位を考慮したプログラムの文法解析を行う。 サンプルの数式を解析し、優先順位に基づいて正しい解析結果を得る練習を行う。 (2時間) |
8 |
A,C |
GOTO文/関数のサポート ・条件判定におけるAND演算やOR演算がGOTO命令で実現される仕組み ・関数呼び出しの動作原理 |
事前学修 |
プログラムの制御構造におけるジャンプや分岐に関する基本的な知識を復習する。 関数の概念、引数、戻り値、スタックの動作(スタックフレームの役割やスタックの操作)など、関数呼び出しの基本原理について学習する。 (2時間) |
事後学修 |
サンプルのプログラムコードを使用して、GOTO文を含む条件判定やループを実装し、制御フローを理解する。 サンプルプログラムを実行し、条件判定やループの動作を観察する。 スタックの動作をシミュレーションし、関数呼び出しのスタックフレームがどのように管理されるかを確認する。 (2時間) |
9 |
A,C |
意味解析、C言語への変換、コード生成と最適化
|
事前学修 |
意味解析 (Semantic Analysis) の基本的な概念について学ぶ。 意味解析の主要な目標やタスクについて理解し、プログラムの意味の正確性がなぜ重要かについて考察する。 (2時間) |
事後学修 |
意味解析でエラーが出る例について、普段使っているC++の場合を想定してまとめる。 C#やJavaなどのコード最適化の仕組みを調べてまとめる。 意味解析に関連するエラーチェックや警告の実装も含め、意味解析の実際のプロセスを体験する。 (4時間) |
10 |
A,C |
コンパイラコンパイラANTLR4の紹介 ・拡張BNF記法を用意することで、言語処理系が自動生成される環境について解説する。 |
事前学修 |
ANTLR4とは何か、どのような役割を果たすツールかについて調べる。(2時間) |
事後学修 |
ANTLR4ツールを実際に使って、拡張BNF記法を定義し、言語処理系を自動生成する実践を行う。 学習した拡張BNF記法を使用して、既存の言語を拡張したり、新しい言語を設計したりする実践を行う。 (4時間) |
11 |
A |
スクリプトエンジンとしてのインタプリタ実装 ・スクリプトエンジンがどのようにプログラムを実行し、ゲーム実行に影響を及ぼすかの解説。 ・スクリプトエンジンのアーキテクチャと設計パターン |
事前学修 |
スクリプトエンジンの基本的な概念や役割について学習し、スクリプトエンジンとしての重要性を理解する。(2時間) |
事後学修 |
授業で始めたインタプリタの実装を継続する形で、自作のゲーム上で実際に動作するスクリプトエンジンを完成させる。(3時間) |
12 |
A |
XMLによるデータ表現 ・XML文書の構造や要素、属性 ・XMLの目的と用途 ・ゲーム実装におけるXML活用の実例 |
事前学修 |
XMLの基本的な概念や用語、文法について学習する。DTD(Document Type Definition)の役割や基本的な文法規則について学習し、XML文書のバリデーションに関する知識を確認する。(2時間) |
事後学修 |
学習したXML解析技術を使用して、実際のXMLデータを解析し、データの抽出やクエリを行う。 XMLデータがどのように実際のプロジェクトやアプリケーションで使用されているかについて調査してまとめる。 (3時間) |
13 |
A |
まとめ |
事前学修 |
これまでの内容、とくに字句解析・構文解析・意味解析について、よく復習しておく。(2時間) |
事後学修 |
授業内で紹介する論文などを読んで、最新の関連技術についての知識を得る。(4時間) |