2025年度前期プログラミングシステム論

曜日・時限 木曜日3時限 期別 前期 週時間数 2
ナンバリング HW330607
開講学科等 総合情報学部-デジタルゲーム学科
教員名 沼田 哲史
沼田 哲史
職務履歴

https://research.osakac.ac.jp/index.php?%e6%b2%bc%e7%94%b0%e3%80%80%e5%93%b2%e5%8f%b2

教員情報データベースに遷移します

目的

この授業では、プログラミングを行うための様々な環境について、その特徴を学ぶ。そしてそれらを構成する要素である、コンパイラ、リンカ、インタプリタ、ヴァーチャルマシンなどの役割とその原理について詳しく学び、実際にインタプリタの作成を通じて、字句解析、構文解析、意味解析、コード生成、最適化といった言語設計手法について理解できるようにする。

授業計画

授業回 形式 学修内容 学修課題
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時間)

授業形式記号

  • A:一斉授業(通常の講義)
  • B:問題発見・解決学習、プロジェクト学習
  • C:体験、実験、実習、演習など
  • D:調査 分析、解析など
  • E:ものづくり、作品制作
  • F:グループワーク(ディスカッション・ディベートを含む)
  • G:プレゼンテーション
  • H:地域・企業 連携型学習
  • I:その他

到達目標

○ 修得する資質・能力:知識・理解 【DP-W-1-1】
 ・インタプリタやコンパイラの基礎技術に関する用語が理解できるようになること。
 ・バーチャルマシンなどのプログラムの実行環境の特徴を説明できるようになること。

○ 修得する資質・能力:態度・志向性 【DP-W-3-1】
 ・自分の作成するアプリケーションにおいて、顧客のニーズをよく把握したうえで、インタープリタの手法を活用したデータ処理を適切に組み込むことができるようになること。

評価方法と評価観点

評価方法 配点合計知識・理解力応用力コミュニケーション力態度・志向性創造力 合計
定期試験またはレポート試験 70% 70% 30% 100%
小テスト、小論文 0%
グループワーク 0%
プレゼンテーション 0%
レポート、宿題 30% 70% 30% 100%
授業での姿勢(ノート、質疑など) 0%
作品、パフォーマンス(実技、実演) 0%
その他1(具体的に: 0%
その他2(具体的に: 0%
100% 70% 30% 0% 0% 0% 100%

教科書・参考書

なし

オフィスアワー

・オフィスアワーは火曜日のお昼休み、教員室(10号館206)で実施します。
 ※学内外の用務のため、オフィスアワーでも教員が教員室に不在の可能性があります。
  事前に numata@osakac.ac.jp までメールでご連絡いただくのが確実です。

・授業のMoodleに「授業に関する質問・相談」のトピックを設け、随時、質問・相談を受け付けます。
 ※回答は授業期間中の平日9:30〜17:00に行います。

その他

・授業内容の理解を確認するためのレポート課題を適宜設定します。レポートは返却しませんが、内容チェックのうえ、授業内で良い回答の紹介や、改善が必要なポイントの解説を行います。
・定期試験やレポート試験の答案は返却しませんが、授業内で同じ内容の小テストを行い、誤答の多い問題を重点的に解説して定期試験に備えられるようにします。その他の課題、レポート、ワーク等の講評は授業内で行います。
・レポートや試験の回答において、半分以上が書籍やインターネット上の情報の単純なコピーである場合、引用とはみなせないため、その評価を0点とします。
・出席回数が8回未満の場合は、D評価とします(これは予定なので再設定することがあります)。

実務経験のある教員による授業科目

この授業は、実務経験のある教員によって実施されます。この授業を担当する沼田は、プログラミングに関する書籍を多数執筆・出版しており、プログラミングの教材開発やソフトウェア開発に関する研究が専門です。