1 / 249

本資料は、下記の資料と共に使用されることを想定してます。本資料だけをお持ちの方は、下記資料を整えた上で読み進めて下さい。

本資料は、下記の資料と共に使用されることを想定してます。本資料だけをお持ちの方は、下記資料を整えた上で読み進めて下さい。 テキストについては市販されています。教員用CDについては無料で提供してますので、詳しくは 『 コンパイラ入門 』 の付録M 参考情報をご覧下さい。. ソフトウエア実践講座 コンパイラ入門 ソフトバンク クリエイティブ株式会社  ISBN4-7973-3169-0 ソフトウエア実践講座 コンパイラ入門 教員用CD 教員用資料 講義用スライド(本資料) サンプルソースプログラム

Download Presentation

本資料は、下記の資料と共に使用されることを想定してます。本資料だけをお持ちの方は、下記資料を整えた上で読み進めて下さい。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 本資料は、下記の資料と共に使用されることを想定してます。本資料だけをお持ちの方は、下記資料を整えた上で読み進めて下さい。本資料は、下記の資料と共に使用されることを想定してます。本資料だけをお持ちの方は、下記資料を整えた上で読み進めて下さい。 • テキストについては市販されています。教員用CDについては無料で提供してますので、詳しくは『コンパイラ入門』の付録M 参考情報をご覧下さい。 • ソフトウエア実践講座 コンパイラ入門 ソフトバンク クリエイティブ株式会社  • ISBN4-7973-3169-0 • ソフトウエア実践講座 コンパイラ入門 教員用CD • 教員用資料 • 講義用スライド(本資料) • サンプルソースプログラム • 初期テンプレート (Primitive@InitialTemplate.cs) • スキャナ構築後 (Primitive@Scanner.cs) • パーサ構築後 (Primitive@Parser.cs) • シンボルテーブル構築後 (Primitive@SymbolTable.cs) • コード生成後 (Primitive@CodeGenerator.cs)

  2. ソフトウエア実践講座 コンパイラ入門 ~ 究極のソフトウエア開発 ~

  3. 目次 • 準備作業 • 1章  はじめに • 2章  コンパイラ • 3章  問題の把握 • 4章  開発環境の設定 • スキャナの構築 • 5章  語彙定義 • 6章  スキャナの構築 • パーサの構築 • 7章  文法定義 • 8章  パーサの構築 • 9章  パーサの構築(変数と関数) • 10章 パーサの構築(式と代入文) • 11章 パーサの構築(選択文と繰り返し文) • 12章 シンボルテーブル • コードジェネレータの構築 • 13章 コードジェネレータ • 14章 コードジェネレータ(変数と関数) • 15章 コードジェネレータ(式と代入文) • 16章 コードジェネレータ(選択文) • 17章 コードジェネレータ(繰り返し文) • 参考資料 • パーサの構築 • テストプログラム • 言語仕様 • 付録CD-ROM

  4. 1章 はじめに  シラバス  自作コンパイラのイメージ

  5. 1章 はじめにシラバス案(1/6) • コース名 • 対象者: ~大学 ~学部 ~学科 • 開講時期: ~ • コース番号: ~ • 授業科目: ~ • 単位数: ~ • 開講日: ~ • 開講時間: ~ • 開講場所: ~ • 担当教員 • 氏名: ~ • 研究室: ~研究室 • 電話番号: ~ • FAX番号: ~ • メールアドレス: ~ • オフィスアワー: ~ • 担当助手/ティーチング・アシスタント • 氏名: ~研究室 • オフィスアワー: ~

  6. 1章 はじめにシラバス案(2/6) • 目的 • コンパイラに必要な理論と実践を習得 • ゴール • 自作コンパイラの完成 • 必要な理論・知識を身につける • 前提条件 • 最低1つのプログラム言語でプログラムを作成できること • 課題・レポート・プロジェクト • 自作コンパイラを作成するプロジェクトを完成する • 1回目:スキャナー構築後のソース、入力プログラム、出力結果 • 2回目:パーサ構築後のソース、入力プログラム、出力結果 • 3回目:コードジェネレータ構築後のソース、入力プログラム、出力結果 • 期末考査

  7. 1章 はじめにシラバス案(3/6) • 評価 • 自作コンパイラ作成プロジェクト 60% • 期末考査 40% • 成績 • 優 90%以上 • 良 75%以上、90%未満 • 可 60%以上、75%以下 • 不可 60%未満 • 合計が60%に満たない場合、上限を60%として再試験を評価 • 上手な履修方法のアドバイス • スケジュールされた章を予め読んでおく事 • 毎週スケジュールに沿ってプロジェクトを推進・検証する事 • プロジェクト推進に必要な内容を整理しておく事

  8. 1章 はじめにシラバス案(4/6) • 授業スケジュール • 1週目 ~月~日(~) 1章:はじめに 2章:コンパイラ • 2週目 ~月~日(~) 3章:問題の把握 • 4章:開発環境の設定 3週目 ~月~日(~) 5章:語彙定義 • 4週目 ~月~日(~) 6章:スキャナーの構築 • 5週目 ~月~日(~) 7章:文法定義 • 6週目 ~月~日(~) 8章:パーサの構築 • 7週目 ~月~日(~) 9章:パーサの構築(変数と関数) • 8週目 ~月~日(~) 10章:パーサの構築(式と代入文) • 9週目 ~月~日(~) 11章:パーサの構築(選択文と繰り返し文) • 10週目 ~月~日(~) 12章:シンボルテーブル • 11週目 ~月~日(~) 13章:コードジェネレータ • 12週目 ~月~日(~) 14章:コードジェネレータ(変数と関数) • 13週目 ~月~日(~) 15章:コードジェネレータ(式と代入文) • 14週目 ~月~日(~) 16章:コードジェネレータ(選択文) 17章:コードジェネレータ(繰り返し文) 15週目 ~月~日(~) 18章:ポストモーテム(事後検証) • 16週目 ~月~日(~) 期末考査

  9. 1章 はじめにシラバス案(5/6) • 教科書/テキスト • ソフトウエア実践講座 ~コンパイラ入門~ • ソフトバンク クリエイティブ株式会社 • ISBN4-7973-3169-0 添付CD内容 • 統合開発環境プロジェクト一式 • Visual Studio .NET 2003 • Visual Studio 2005 • Visual C#/C++ 2005 Express Edition • Express Edition用擬似アセンブラ • 入出力ライブラリ • iolib.lib / iolib.dll / iolib.inc • コンパイラ開発用テンプレート • C#テンプレートソース(Primitive.cs) • 入力ファイル(in.txt) • 出力ファイル(out.asm) • テストプログラム • 検証用テストプログラムサンプル一式 • HelloWorld.txt • Change.txt • Fibonacci.txt • Prime.txt • 統合化環境用サンプルプログラム • PrimitiveIDE 本スライドにはテキストの一部を抜粋して使用しています

  10. 1章 はじめにシラバス案(6/6)~テキスト目次1章 はじめにシラバス案(6/6)~テキスト目次 • 付録 • A 言語仕様 • B トークンと言語仕様 • C トークン一覧表 • D スキャナ後の言語仕様 • E 文法変換規則 • F 文法変換後の言語仕様 • G 文法とパーサの変換対応表 • H テンプレート • I  アセンブラ関連 • J 素数プログラム、アセンブラ、実行結果 • K フィボナッチプログラム、アセンブラ、実行結果 • L 添付CD-ROMについて • M 参考情報 • 準備作業 • 1章  はじめに • 2章  コンパイラ • 3章  問題の把握 • 4章  開発環境の設定 • スキャナの構築 • 5章  語彙定義 • 6章  スキャナの構築 • パーサの構築 • 7章 文法定義 • 8章  パーサの構築 • 9章  パーサの構築(変数と関数) • 10章 パーサの構築(式と代入文) • 11章 パーサの構築(選択文と繰り返し文) • 12章 シンボルテーブル • コードジェネレータの構築 • 13章 コードジェネレータ • 14章 コードジェネレータ(変数と関数) • 15章 コードジェネレータ(式と代入文) • 16章 コードジェネレータ(選択文) • 17章 コードジェネレータ(繰り返し文) • ポストモーテム(事後検証) • 18章 ポストモーテム(事後検証)

  11. 1章 はじめに1.3 本書で構築するコンパイラについて Input N>1000 (入力) 2:→剰余が無いので素数 3:→2で割り切れないので素数 4:→2で割り切れる 5:→2→3→4で割り切れないので素数 6:→2で割り切れる 7:→2→3→4→5→6で割り切れないので素数 8:→2で割り切れる 9:→2→3で割り切れる 10:→2で割り切れる ・・・ 入力された数値までこれを繰り返す 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59, 61,67,71,73,79,83,89,97,101,103,107,109,・・・ MODULE Prime; VAR i,j,n,q,r,flg : INTEGER; BEGIN WriteStr("N>"); ReadInt(n); i:=2; WHILE i<=n DO flg:=0; j:=2; WHILE j<i DO q:=i/j; r:=i-j*q; IF r=0 THEN flg:=1 END; j:=j+1 END IF flg=0 THEN WriteInt(i); WriteStr(","); END; i:=i+1 END; END Prime.

  12. 2章 コンパイラ  コンパイラについて  コンパイラを構成する要素  これから学ぶべき内容

  13. 2章 コンパイラ2.1 コンパイラの概要 • コンパイラ • 特定のプログラム言語をアセンブラに変換するプログラム • 一般的には、ある規則を別の規則に変換するプログラム 規則=特定の規則に沿った記述やフォーマット • コンパイラとインタープリタ • コンパイラは変換と実行が別のタイミングで行われる 例:C言語のコンパイル、アプリケーションの実行 • インタープリタは変換と実行が同じタイミングで行われる 例:BASICインタープリタ

  14. 2章 コンパイラ2.1 コンパイラの概要 • コンパイラは変換プログラム • 入力プログラム(通常~言語と名前がある) • 出力プログラム(通常、アセンブラ言語) プログラム言語 main() { puts(Hello, World!); } コンパイラ アセンブラ言語 .data Letter dd 0 .code mov Letter, ‘H’ .... 入力 出力

  15. 2章 コンパイラ2.1 コンパイラの概要 • 手続き型言語 • C, Pascal, COBOL, FORTRANなど • オブジェクト指向型言語 • C#、C++、Smalltalkなど • 関数型言語 • Lisp, Scheme, MLなど • 論理型言語 • Prologなど

  16. 2章 コンパイラ2.2 コンパイラの全体構成 アセンブラ言語 .data Letter dd 0 .code mov Letter, ‘H’ .... プログラム言語 main() { puts(“Hello!); } コンパイラ スキャナー パーサ コード ジェネレータ 入力:プログラム 出力:トークン 機能:トークンに分解 「トークン」とはプログラムの最小構成要素 入力:トークン 出力:構文解析木 機能:構成を分析 構成=「文法」~あるべきトークンがあるべき場所に収まっているか 入力:構文解析 出力:アセンブラ 機能:意味(コードを生成)  「意味」とは解析結果

  17. 2章 コンパイラ2.2 コンパイラの全体構成 プログラム MODULE HelloWorld; BEGIN WriteStr(“Hello World!“) END HelloWorld . トークン MODULE HelloWorld ; BEGIN WriteStr ( "Hello World!“ ) END HelloWorld .

  18. 2章 コンパイラ2.2 コンパイラの全体構成 構文解析木(該当する部分のみ抽出) <program>= MODULE IDENT ; <program1> BEGIN <statlist> END IDENT . <program1>= ε | <decllist> <statlist>= <statement> <statlist1> <statlist1> = ε | ; <statement> <statlist1> <statement>= IDENT→WriteStr <statement1> <statement1>= ( <literal> ) <literal>= STR→“Hello World!” | NUMBER | IDENT トークン MODULE HelloWorld; BEGIN WriteStr ( "Hello World!“ ) END HelloWorld .

  19. 2章 コンパイラ2.2 コンパイラの全体構成 構文解析木(該当する部分のみ抽出) <program>= MODULE IDENT ; <program1> BEGIN <statlist> END IDENT . <program1>= ε | <decllist> <statlist>= <statement> <statlist1> <statlist1> = ε | ; <statement> <statlist1> <statement>= IDENT→WriteStr <statement1> <statement1>= ( <literal> ) <literal>= STR→”HelloWorld!” | NUMBER | IDENT アセンブラ .586 .model flat,stdcall INCLUDE iolib.inc .data Letter dd 0 .code _start: mov Letter, 'H' invoke OutputLetter, Letter  ・・・ invoke ExitProcess,0 end _start END

  20. 2章 コンパイラ2.2 コンパイラの全体構成 • 準備作業 • 1~4章:基礎知識と開発環境 • フェーズ1 • 5~6章:スキャナの構築 • フェーズ2 • 7~12章:パーサの構築 • フェーズ3 • 13~17章:コードジェネレータの構築 • ポストモーテム • 18章:まとめと更に深い学習のために

  21. 3章 問題の把握ステップ1 BNFと文法 BNFとEBNF  言語仕様  プログラムと言語仕様との関係

  22. 3章 問題の把握3.2 BNF(Backus Naur Form) • BNF • 「文法」を記述する表記法 • コンピュータ言語を表す為に使われることが多い • 英文法 • 単語と単語の構成・関係を表す • 5文型は単語の品詞から英文の型を表現している • プログラム言語の文法 • プログラムの最小構成要素の構成・関係を表す • 変数、キーワード、オペレータなどの関係 • 代入文の①abc=123、②123=abc、どちらが正しい?

  23. 3章 問題の把握3.2 BNFの定義 • BNF • ターミナル(終端記号) • ノンターミナル(非終端記号)で< >と表記する • 左辺と右辺はターミナルとノンターミナルの集合体 • 左辺 ::= 右辺 • 本書では左辺はノンターミナルだけに制限する • 例題 • <文> ::= <主語> <動詞> <目的語> • <主語> ::= I • <動詞> ::= Love • <目的語> ::= You • 「::=」は置き換えるという意味、以後「→」を使用

  24. 3章 問題の把握3.2 BNFの定義 • BNFが出来ること • 文字列が文法に合致しているかどうかを「識別」できる • 置き換えのステップを「導出」と呼ぶ • 例題 • ステップ1~先頭から開始される~ <文> • ステップ2~<文>は<主語><動詞><目的語>によって置き換えられる~ <主語><動詞><目的語> • ステップ3~<主語>は I によって置き換えられる~ I <動詞><目的語> • ステップ4~<動詞>は Love によって置き換えられる~ I Love<目的語> • ステップ5~<目的語>は You によって置き換えられる~ I Love You • ステップ6~<文>は I Love You に変換換された~

  25. 3章 問題の把握3.2 BNFの定義 <文> ↓ <主語t> <動詞> YOU ↓ ↓ I  LOVE 下記の様 に表す 縦書きでも 同義

  26. 3章 問題の把握3.2 BNF例~数値の識別 • 数値 • 1文字以上の数字 • BNF • <number> → <digit> <number1> • <number1> → ε | <digit> <number1> • <digit> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 • 注:|(OR)は選択を示す(次スライド参照) • 識別できる数値の例 • 1、1、2、3、5、8、13、21・・・ • 識別できない数値の例 • -123(マイナスは定義されていない)、abc(数字ではない)

  27. 3章 問題の把握3.2 BNF例~数値の識別 • BNF • <number> → <digit> <number1> • <number1> → ε| <digit> <number1> • <digit> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 • BNF(上記の記述と同義) • <number> → <digit> <number1> • <digit> → 0 • <digit> → 1 • <digit> → 2 • <digit> → 3 • <digit> → 4 • <digit> → 5 • <digit> → 6 • <digit> → 7 • <digit> → 8 • <digit> → 9 • <number1> → ε • <number1> → <digit> <number1>

  28. 3章 問題の把握3.2 BNF例~数値の識別 • 構文解析木 • 識別に到るBNF(右辺と左辺)を表したもの • 前ページの例題でアニメーションが付いた部分を並べたもの • 1を識別した場合の構文解析木 • <number> → <digit> → 1 <number1> → ε • 13の識別した場合の構文解析木 • <number> → <digit> → 1 <number1> → <digit> → 3 <number1> → ε • ε(エプシロン)の意味 • 該当するBNFやシンボルが「選択・識別」されなかった意味 • 選択・識別する物が無いと明確に示す

  29. 3章 問題の把握3.2 BNF例~数値の識別 • 構文解析木の表記について • トポロジーが一致していればどんな形式でもかまわない • 下記の解析木は同じ意味 • 横書きの場合(13を識別した場合) • <number> → <digit> → 1 <number1> → <digit> → 3 <number1> → ε • 縦書きの場合(13を識別した場合) <number> ↓ <digit> <number1> ↓ ↓ 1 <digit><number1> ↓ ↓ 3 ε

  30. 3章 問題の把握3.2 BNF例~文字列の識別 • 文字列 • 1文字以上の文字でプログラムでは識別子と呼ばれる • BNF • <ident> → <letter> <ident1> • <ident1> → ε | <letter> <ident1> • <letter> → a | b | c | d | e | f | g | h | i | j | k | l | m | • n | o | p | q | r | s | t | u | v | w | x | y | z | • A | B | C | D | E | F | G | H | I | J | K | L | M | • N | O | P | Q | R | S | T | U | V | W | X | Y | Z • 識別できる数値の例 • a、ab, abc, xyz, Hello ・・ • 識別できない数値の例 • 123、abc123(数字は定義されていない)

  31. 3章 問題の把握3.2 BNF例~文字列の識別 • Abを識別した場合の構文解析木 • ステップ1: <ident> • ステップ2: <ident>→<letter> <ident1> • ステップ3: <ident>→<letter>→A <ident1> • ステップ4: <ident>→<letter>→A <ident1>→<letter> <ident1> • ステップ5: <ident>→<letter>→A <ident1>→<letter>→b <ident1> • ステップ6: <ident>→<letter>→A <ident1>→<letter>→b <ident1>→ε

  32. 3章 問題の把握3.3 BNFとEBNF • EBNF • Extended BNF(拡張されたBNF) • BNFよりコンパクトに記述できる • ( )によるグルーピング • まとめて処理できる • *による0回以上の繰り返し • 再帰呼び出しを省略できる • +による1回以上の繰り返し • 再帰呼び出しを省略できる • [ ]により二者択一の選択 • εを使わずに処理できる

  33. 3章 問題の把握3.3 EBNF~( )と* • BNF(識別子) • <ident> → <letter> <ident1> • <ident1> → ε → <lettter> <ident1> → <digit> <ident1> • <letter> → 前例と同じ(英小文字、英大文字) • <digit> → 前例と同じ(0~字、数値) • 同等のEBNF • <ident> → <letter> ( <letter> | <digit> )* • ( )の効果 • ( <letter> | <digit> )によって2つのノンターミナルがまとめて処理 • *の効果 • ( <letter> | <digit> )*により<ident1>の再帰呼び出しが不要

  34. 3章 問題の把握3.3 EBNF~[ ] • BNF • <program> → MODULE <ident> ; <additional> BEGIN ・・・END <ident> . • <additional>→ ε → <decllist> (変数定義が行われるノンターミナル) • 同等のEBNF • <program> --> MODULE <ident> ; [ <decllist> ] BEGIN ・・・END <ident> . • 例題1~変数が無い場合は[ ]内が選択されなかった • MODULE PROGRAM; • ~ここに変数定義が無い~ • BEGIN ・・・ • 例題2~変数がある場合は[ ]内が選択された • MODULE PROGRAM; VAR I, J, K : INTEGER; • BEGIN ・・・

  35. 3章 問題の把握3.3 EBNF~+ • BNF • <decllist> →VAR <decilist1> • <decllist1> →<identlist> : <type> ; <decllist2> • <decllist2> → ε →<decilist1> • 同等のEBNF • <decllist> -->VAR ( <identlist> : <type> ; )+ • 例題1~<decllist>が+により1回選択された場合(前ページの例題2). • 例題2~変数定義のラインは1回以上何回定義されてもよい(この例では3回) • MODULE PROGRAM; VAR I, J, K : INTEGER; VAR a, b : INTEGER; VAR z, z, x, y, z : INTEGER; ・・・ • BEGIN ・・・

  36. 3章 問題の把握3.4 言語仕様=プログラムの設計図 <program> →MODULE <ident> ; [ <decllist> ] BEGIN <statlist> END <ident> . <ident> →<letter> ( <letter> | <digit> )* <decllist> →VAR ( <identlist> : <type> ; )+ <statlist> →<statement> ( ; <statement> )* <identlist> →<ident> ( , <ident> )* <type> →INTEGER | STRING <statement> →<ident> := <expression> | IF <relation> THEN <statlist> [ ELSE <statlist> ] END | WHILE <relation> DO <statlist> END | <ident> "(" <literal> ")“ <relation> →<expression> <rel op> <expression> <expression>→ <unary op> ] <term> ( <add op> [ <unary op> ] <term> )* <term> →<factor> ( <mul op> <factor> )* <factor> →<literal> | "(" <expression> ")“ <literal> →<ident> | <integer> | <string> <integer> →<digit>+ <rel op> →= | < | <= | <> | > | >= <unary op> →+ | - <add op> →+ | - <mul op> → * | / <digit> →0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <string> →" <any character except EOF, EOL and "> “ <letter> →a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

  37. 3章 問題の把握3.4 言語仕様の説明 • <program>は変数定義と文から構成される • <program> →MODULE <ident> ; [ <decllist> ] BEGIN <statlist> END <ident> . • <decllist> →VAR ( <identlist> : <type> ; )+ • <identlist> →<ident> ( , <ident> )* • <type> →INTEGER | STRING • <statlist> →<statement> ( ; <statement> )* • <statement>→<ident> := <expression> | IF <relation> THEN <statlist> [ ELSE <statlist> ] END | WHILE <relation> DO <statlist> END | <ident> "(" <literal> ")“ 変数定義 例 VAR I,J,K: INTEGER; 文 例 WriteStr(“HelloWorld!”)

  38. 3章 問題の把握3.4 言語仕様の説明 • <ident>による識別子~先頭が英字で2文字目以降は英数字 • <ident> → <letter> ( <letter> | <digit> )* • <digit> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 • <letter> → a | b | c | d | e | f | g | h | i | j | k | l | m | n o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z • <string>は” と“で囲まれた文字、但し、EOF, EOL, ”は除く • <string> →" <any character except EOF, EOL and "> “ • EOL(End Of Line)~2行にまたがれない • EOF(End Of File)~ファイルの終わりまで継続できない • 例:”Hello World!”, ”Input N>”, etc • <integer>による数値~1桁以上の数値 • <integer> →<digit>+ • <digit> →0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  39. 3章 問題の把握3.4 言語仕様の説明(2/3) • <unary op>は符号 • <unary op>→+ | - • <add op>は加減演算 • <add op> →+ | - • <mul op>は乗除演算 • <mul op> → * | / • 比較演算子 • <rel op> →= (EQ) → < (LT) → <= (LE) → <> (NE) → > (GT) → >= (GE)

  40. 3章 問題の把握3.4 言語仕様の説明(3/3) • <literal>は<ident>か<integer>か<string> • <literal> →<ident> | <integer> | <string> • <expression>は符号と加減乗除付の<literal>の式(再帰的に定義) • 例1:1+2*3 (加算、乗算) • 例2:-1+-2*-3 (符号付) • 例3:(1+2)*3 (括弧付の式~加算優先) • 例4:(((1))) • <expression>→[ <unary op> ] <term> ( <add op> [ <unary op> ] <term> )* • <term> →<factor> ( <mul op> <factor> )* • <factor> →<literal> | "(" <expression> ")“ • <relation>は比較式~式と式を比較演算子で結合 • 例:123<234 • <relation> →<expression> <rel op> <expression>

  41. 3章 問題の把握3.5 言語仕様とプログラム 相当する言語仕様 (該当する部分のみ) <program>  → MODULE <ident> ; [ <decllist> ] BEGIN <statlist> END <ident> . <statlist>   → <statement> ( ; <statement> )* <statement> →<ident> "(" <literal> ")“ プログラム MODULE HelloWorld; BEGIN WriteStr ( "Hello World!“ ) END HelloWorld . プログラムと言語仕様の対応 MODULE <ident> ; BEGIN <statlist>→<statement>→<ident> ( <literal> ) END <ident> .

  42. 4章 開発環境の設定ステップ2  環境設定と動作検証  プロジェクト環境のセットアップ  C#/アセンブラの開発/実行環境検証

  43. 4章 開発環境の設定4.1 事前準備(開発環境) • 開発環境 • 自作コンパイラを作るために必要な開発/実行環境 • コンパイラ、マクロアセンブラ、リンカが必要 • コンパイラ • ① Visual Studio 2005 • ②Visual Studio .NET 2003 • ③Visual C# 2005 Express Edition (無料ダウンロードはテキスト参照) • アセンブラ • マクロアセンブラ(ml) ~ ①、②の場合 • 擬似アセンブラ(mlx) ~ ③の場合 (添付CDに格納) • リンカ • リンカ(link) ~ ①、②の場合 • Visual C++ 2005 Express Edition ~ ③の場合 (無料ダウンロードについての詳細はテキスト参照)

  44. 4章 開発環境の設定4.1 事前準備(開発方法) • 統合開発環境による開発 • プログラム開発作業の効率化 • プロジェクト(CDで提供)を利用可能 • 新しい言語と環境に慣れる為に、こちらがお勧め • コマンドラインによる開発 • エディタによるプログラム入力 • コンパイル、アセンブル、リンク、実行はコマンド入力 • 前提知識や間接作業が多いので、熟練者向き

  45. 4章 開発環境の設定4.1 事前準備(開発方法) 統合開発環境 豊富な機能とメニューを選択 コマンドライン 全てコマンドを入力

  46. 4章 開発環境の設定4.1 事前準備 • ① 開発環境がインストールされている事を確認 • Visual Studio 2005 • Visual Studio .NET 2003 • Visual C#/C++ 2005 Express Edition (2つ必要) • ② 開発環境を持っていない場合 • Visual C#/C++ 2005 Express Editionをダウンロード • ③ テキスト4.1 事前準備を熟読 • 「陥りやすいトラブル」は必ず目を通すこと!

  47. 4章 開発環境の設定4.1 事前準備 • Visual Studio 2005の統合開発環境を使う場合 • テキスト4.2を参照しながら各自で実行 • Visual Studio .NET 2003の統合開発環境を使う場合 • テキスト4.3を参照しながら各自で実行 • Visual C#/C++ 2005 Express Editionの統合開発環境を使う場合 • テキスト4.4を参照しながら各自で実行 • 上記の開発環境でコマンドラインを用いて開発する場合 • テキスト4.5を参照しながら各自で実行

  48. 4章 開発環境の設定参考 セットアップ Visual Studio 2005 (統合開発環境版)をダブルクリック  Setup.exeをダブルクリックし、インストーラを起動 

  49. 4章 開発環境の設定参考 セットアップ

  50. 4章 開発環境の設定参考 C#の開発/実行環境検証 • 動作検証 • 入力ファイルをコンパイル・実行、出力結果を確認 • 開発環境、方法を自ら検証し、動作確認できる 入力 検証用プログラム In.txt 出力 実行結果 out.asm 開発 環境・方法 入力 出力 C#

More Related