|| 英語(English)
学習支援計画書(シラバス) 検索システム
専門教育課程 情報工学科
授業科目区分 科目名 単位数 科目コード 開講時期 履修方法
専門教育課程
専門科目
専門
プログラミング言語とコンパイラ
Programming Languages and Compiler
2 E533-01 2024年度
6期(後学期)
修学規程第4条を参照
担当教員名
*印は、実務経験のある教員を示しています。
授業科目の学習・教育目標
キーワード 学習・教育目標
1.字句解析とトークン 2.構文解析とDSL 3.意味解析とディスパッチ 4.式の処理とスタックマシン 5.前置・中置・後置・AST システムソフトウェア、アプリケーションソフトウェアを作成して動作させるための翻訳ソ フトウェアと実行環境の仕組みを学ぶ。これは、ネットワークで流通するデータ形式の解析 ・処理にも活用できる。プログラミング言語の制御構造とデータ管理方法を理解する。履修 者はコンパイラやインタプリタを作成するためのアルゴリズムとその実装方法を修得するこ とにより、データ表現の解読や処理プログラムを作成できるようになる。
授業の概要および学習上の助言
 サンプルとしてコンパクトな実例を通して、コンパイラ開発方法とインタプリタを実践的に学ぶ。  1. プログラミング言語の制御構造とデータ管理  2. テキストデータ、HTML等の文字列検索  3. コンパイラの処理(字句解析、構文解析、式の解析、意味解析、コード生成)  4. プログラムを実行するためのメモリ管理  5. 実行環境(中間コード、仮想マシン、インタプリタ) 6. コンパイラ関連ツール 【留意事項】  ・進捗により内容が変更になることがある。  ・レポート、試験の注意は講義内で説明する。
教科書および参考書・リザーブドブック
教科書:指定なし 参考書:指定なし リザーブドブック:指定なし
履修に必要な予備知識や技能
プログラミング言語は、アーキテクチャ、OS、ソフトウェア工学および利用方法により発展しているため広い視野を持つこ とが必要である。コンパイラの各処理はうまくいかない場合もあるため各自で動作を確認し徐々に機能拡張して理解すること 。コンパイラの処理を理解するには履修者のプログラムでの動作確認と動作を理解しようとする熱意が必要である。アルゴリ ズム、プログラミング、オペレーティングシステムの知識が必須であるので、不得意分野を復習しておくこと。
学生が達成すべき行動目標
No. 学科教育目標
(記号表記)
I,K,N コンパイラの動作原理を理解し、コンパイラの処理の流れ、各処理の入力、処理内容、出力を説明できる。
I,K,N サンプルコードを見て処理手順を説明でき、処理優先度を考慮した上で、トークン種別、構文を拡張することができる。
I,K,N スタック、ヒープなどプログラム実行に必要な機能の動作や、リスト、辞書等のデータ構造を説明できる。
I,K,N 構文や式を中置、前置、後置、ASTに相互変換できる。
達成度評価
評価方法
試験 クイズ
小テスト
レポート 成果発表
(口頭・実技)
作品 ポートフォリオ その他 合計
総合評価割合 40 30 30 0 0 0 0 100
指標と評価割合 総合評価割合 40 30 30 0 0 0 0 100
総合力指標 知識を取り込む力 30 15 15 0 0 0 0 60
思考・推論・創造する力 10 15 15 0 0 0 0 40
コラボレーションと
リーダーシップ
0 0 0 0 0 0 0 0
発表・表現・伝達する力 0 0 0 0 0 0 0 0
学習に取組む姿勢・意欲 0 0 0 0 0 0 0 0
※総合力指標で示す数値内訳、授業運営上のおおよその目安を示したものです。
評価の要点
評価方法 行動目標 評価の実施方法と注意点
試験 筆記試験による
クイズ
小テスト
筆記試験またはレポートによる
レポート 演習結果の提出
成果発表
(口頭・実技)
作品
ポートフォリオ
その他
具体的な達成の目安
理想的な達成レベルの目安 標準的な達成レベルの目安
コンパイラのアルゴリズムの本質を理解し目的に合ったパーサ を作れる。実用されているプログラミング言語のコンパイラの ソースコードが読め、拡張できる。 コンパイラの処理フローと中間成果物の特性を言える。サンプ ルコードをもとに課題のプログラムに拡張し正常な出力を得ら れる。
CLIP学習プロセスについて
一般に、授業あるいは課外での学習では:「知識などを取り込む」→「知識などをいろいろな角度から、場合によってはチーム活動として、考え、推論し、創造する」→「修得した内容を表現、発表、伝達する」→「総合的に評価を受ける、GoodWork!」:のようなプロセス(一部あるいは全体)を繰り返し行いながら、応用力のある知識やスキルを身につけていくことが重要です。このような学習プロセスを大事に行動してください。
※学習課題の時間欄には、指定された学習課題に要する標準的な時間を記載してあります。日々の自学自習時間全体としては、各授業に応じた時間(例えば2単位科目の場合、予習2時間・復習2時間/週)を取るよう努めてください。詳しくは教員の指導に従って下さい。
授業明細
回数 学習内容 授業の運営方法 学習課題 予習・復習 時間:分※
1 授業ガイダンス コンパイラ概要 プログラミング言語概要 Python言語復習 講義・演習 Python言語の復習 予50 復100
2 文字列検索: HTML言語演習 自然言語検索(形態素解析、nグラム) HTMLパーサの利用 正規表現 講義・演習 語句の頻度やリンク先の集計プロ グラムを作成する 予50 復100
3 字句解析: トークン分割 字句定義方法(BNF, 正規表現, 構文図) 定数、識別子、演算子、コメント、予約語の抽出 字句抽出の優先度 pyparsingの利用方法 講義・演習 BNF,構文図、正規表現の演習 トークン分割プログラムの作成 結果の保存と一覧表示 予50 復100
4 字句解析(続き): 字句解析プログラム 清書処理 ブロックレベルのカウント レポート出題予定 小テストまたはクイズ実施予定 講義・演習 トークン分割プログラムを完成さ せること 予50 復100
5 構文解析: DSL(ドメイン固有言語) 文の構造理解と定義 宣言文、代入文、while文、if文、return文 関数宣言と引数リスト、ブロック 講義・演習 文抽出プログラムを完成すること 予50 復100
6 構文解析(続き): 複合文の扱い レポート出題予定 講義・演習 文の識別結果の保存と表示 予50 復100
7 式の処理: 前置・中置・後置記法と相互変換 演算の優先度と結合方向、括弧による優先度処理 操車場アルゴリズム スタックマシン 講義・演習 前置・後置変換プログラムの作成 予50 復100
8 式の処理(続き): レポート出題予定 小テストまたはクイズ実施予定 講義・演習 簡単な電卓プログラムの作成 予50 復100
9 AST(抽象構文木): ノードの追加と検索、管理するデータ リストと辞書による木構造の実装 構造の可視化 講義・演習 字句解析→構文解析→構文木作成 プログラムを完成させること 予50 復100
10 インタプリタの作成 講義・演習 インタプリタの動作確認と完成 予50 複100
11 意味解析、コード生成: 他言語、アセンブラへの変換方法 命令の選択方法、メモリ配置、レジスタ選択 仮想マシン 講義・演習 シンボルテーブル作成、相互参照 テーブル作成プログラム 予50 復100
12 再帰、再入可能、再使用、再配置を実現するしくみ: スタック、フレームポインタ、ヒープ、スコープ alloc,free,ガーベージコレクション 仮想記憶、メモリ制御機構 バディアルゴリズム レポートまたは小テスト実施予定 講義・演習 理解度が低い部分の復習 予50 復100
13 最適化、関連ツール: 最適化処理 リンカ、ライブラリアン、コンパイラコンパイラ、構 文チェッカ、仕様書作成支援 プログラミング言語の言語仕様定義の確認 総合的な復習 講義・演習 第1回から13回の学習内容につい て総合的に復習しておく 予50 復100
14 達成度確認試験、発展的話題 試験 理解度が低かった部分の復習 発展的話題で興味がある部分の確 認 150
15 自己点検 達成度試験の解説、 発展的話題 解説、講義・質疑