アセンブラとコンパイラ・インタプリタ

Size: px
Start display at page:

Download "アセンブラとコンパイラ・インタプリタ"

Transcription

1 Copyright 守屋悦朗 2005 アセンブラとコンパイラ インタプリタ ここでは 人間にとってより分かりやすい言語 ( アセンブラ語や BASIC, FORTRAN, C, Pascal などの汎用プログラミング言語 ) で書かれたプログラムを コンピュータのハードウエアが直接理解して実行できるプログラム (= 機械語 ) に翻訳するプログラムについて考える アセンブラ語のプログラムを機械語に翻訳するプログラムがアセンブラであり 汎用言語で書かれたプログラムを機械語に翻訳するプログラムがコンパイラ ( 翻訳系 ) である コンパイラは実行前に前もって翻訳をすませるのに対し 実行時にプログラムを 1 行 1 行逐一通訳するようなプログラムをインタープリタ ( 通訳系 ) という 1. アセンブラ すでに見たように 機械語でプログラムを組むのはきわめて大変である そこで 機械語命令を 8 ビットの 2 進数 ( 命令コード ) で書いたり 命令の対象になるデータの格納されている場所 ( 主記憶装置上のアドレス ) を 16 ビットの 2 進数で書いたりする代わりに 命令に決まった名前 ( ニモニック ) を付けておき また アドレスにも自由に名前 ( ラベル ) を付けることができるようにしたものがアセンブラ言語 ( アセンブラ語 ) である アセンブラ言語は こういった名前付けなどがうまくできるようにする命令 (DS 命令や DC 命令 ) を備えていると同時に そのようなアセンブラ言語で書かれたプログラムを機械語に翻訳する作業 ( この作業は アセンブラと呼ばれるプログラムが行う ) がきちんとできるようにするためにアセンブラへ情報 ( プログラムの始まり 終わり 実行開始位置など ) を伝えるための命令 ( アセンブラ制御命令 ) も持っている さらに マクロ機能のような高級な機能を持っていることもある このようなアセンブラ言語は人間にとっては機械語でプログラムを書くよりはるかに簡単になるが コンピュータのハードウエアはアセンブラ言語で書かれたプログラムを直接理解することができないので機械語に翻訳してあげる必要が生じる これを行うプログラムがアセンブラ (assembler) であり その作業をアセンブル作業とかアセンブリング (assembling) という 人間 アセンブラ語 プログラム アセンブラ 機械語プログラム コンピュータ ソースプログラム 目的プログラム 翻訳前のプログラムを原始プログラム ( ソースプログラム ソースコード source

2 program, source code) といい 翻訳した結果を目的プログラム ( オブジェクトコード 目的コード object code) という 目的コードは そのまま主記憶装置へロードしてすぐさま実行できる形の場合と そうでない場合とがある 前者の場合 目的コード内のすべてのアドレスが絶対番地 ( 主記憶装置の各語 ( ワードマシンの場合 ) あるいは各バイト ( バイトマシンの場合 ) に付けられたアドレスのこと absolute address) になっていなければならない 後者の場合 各プログラム単位 (program unit, サブルーティン単位 ) の目的コード内のアドレスは そのプログラム単位の先頭から何語目か ( 何バイト目か ) という値 ( 相対番地という relative address) になっている ( 注 ) 前者のようにそのまま主記憶装置へロードしてすぐさま実行できる形の目的コードを実行形式 ( ロードモジュール (load module)) という これに対し 後者のような目的コードは 先頭番地を変えるだけで主記憶装置のどこにでもロードして実行することができるので 再配置可能型 (relocatable) であるという 再配置可能型プログラム (1つ以上のプログラム単位の集まり ) は実行直前に各プログラム単位の先頭番地を決めて実行形式に変換され ( この作業を行うプログラムをリンカー (linker) とかリンケージエディタ ( 連係編集プログラム linkage editor) という ) 主記憶装置にロードされる( この作業を行うプログラムをローダー (loader) という ) リンカーの部分まで含めてアセンブラということもある ソースコード 1 再配置可能コード 1 プログラム単位 1... アセンブラ... リンカー実行形式 ソースコード k 再配置可能コード k プログラム単位 k 名前表とロケーションカウンタアセンブラが上のように機械語への翻訳を行うためには プログラム内に現れる記号番地 ( 上の例では EXMPL, BGN, DONE, A, B, MAX) の相対番地 ( プログラムの先頭から数えて何語 ( バイト ) 目か ) を知る必要ある 次の例を考えよう 左側にアセンブラ言語のプログラムを 右側にそれを機械語に翻訳したもの ( この場合 再配置可能型コード ) を示した 話を簡単にするために 2パスのアセンブラを考える kパスアセンブラ (k-pass seembler) とは 目的コードを生成するまでにソースコードをk 回見るタイプのものである

3 アセンブラ語プログラム 機械語コード (relocatable code) EXPL START BGN 相対番地 (LC) コード BGN LD GR1,A B LD GR2,B C SUBA GR1,GR JPL DONE LD GR1,GR DONE ST GR1,MAX D RET 000A A DC B 000C B DC C 0022 MAX DS 1 000D 0000 END 2パスアセンブラの場合 1パスめで アセンブラは機械語コードの命令コード部分をはじめ アンダーラインした以外の部分を決定することができる 同時に 各命令が何語使う命令であるかも知ることができる アンダーラインした部分は 記号番地に対応するアドレス ( 相対番地 ) であるが それはその記号番地が命令のラベル部に出現するまで判明しない そこで ロケーションカウンター (location counter)lc を用意し これにはプログラムの先頭からの語数 (= 相対番地 ) をカウントする また 名前表 (name table 記号表 symbol table ということもある ) を用意し 記号番地が初めて出現すると名前表に登録し その記号番地が命令のラベル部に現れたときに そのときの LC の値をアドレスとして対応させる 上例の場合 次のようになる : A A B A B LC=0 LC=0 LC=2 LC=5

4 DONE A B DONE 8 MAX A 11 B DONE 8 MAX A 11 B 12 DONE 8 MAX A 11 B 12 DONE 8 MAX 13 LC=8 LC=11 LC=12 LC=13 2パスめでは 名前表に従って機械語コードのアドレス部を埋めることができ 機械語コードは確定する 1パスアセンブラの場合 1パスめでは アドレスが義の命令語のアドレス部から名前表の対応する所へのポインタ ( 上例の矢印の向きを逆にしたようなもの ) を埋め込んでおく パスの最後ですべての記号番地のアドレスが確定したら ポインタをたどって未確定の命令のアドレス部にその確定値を書き込む 2. コンパイラ アセンブラといえども 人間にとってはまだ使いにくい アセンブラは機械語とほぼ 1 対 1 対応なので それぞれのマシンに依存した仕様になってしまい コンピュータごとに別々のアセンブラを覚えなければならないという難点もある そこで 人間の使う言語 ( 自然言語 ) により近い言語を使ってプログラムを書くことができるようにすると 今度はそのような言語で書かれたプログラムを機械語に翻訳するプ

5 ログラムが必要になる 自然言語に近いプログラミング言語で 特定用途に限定せずどんな目的のプログラムでも書けるようにデザインされたものを汎用プログラミング言語 (general purpose programming language) とか高級言語 (high-level language) とかコンパイラ言語といい そのような言語で書かれたプログラムを機械語に翻訳するプログラムをコンパイラ (compiler) という 人間 高級言語の プログラム コンパイラ 機械語プログラム コンピュータ ソースプログラム 目的プログラム 高級言語 (C++ 言語 ) 中間コード 機械語コード main( ) { int x, y, z; // 変数宣言 LD GR1,C A0 cin >> x; cin >> y; MULA GR1,V A3 if (y>x) { MULA GR1,V A3 z=x; x=y; y=z; ST GR1,W A6 } LD GR1,C A1 cout << 3*x*x+2*y+1; MULA GR1,V A4 // 特に意味はない出力 ADDA GR1,W A6 } ADDA GR1,C A2 ST GR1,W A6 C001 DC C002 DC C003 DC V001 DS V002 DS V003 DS W001 DS この例で分かるように 高級言語ごとに異なるコンパイラが必要になる (C 言語には C 言語用のコンパイラが BASIC には BASIC 用のコンパイラが というように ) 機械語への翻訳は実行前に行われる

6 機械語へ直接翻訳するのではなく 一旦 アセンブラレベルの中間言語へ翻訳する方式もある 高級言語のプログラムのたった1 行も機械語に翻訳すると何十行にもなるほど 翻訳作業は大変である * プログラムという 文字列 の中で 変数 配列名 関数名 キーワードなど各種の名前の区別 四則 比較 代入など各種演算を表す文字列の判別 等々 この作業を字句解析とか語彙解析という * 文 ( ステートメント ) の判別と それぞれの文に対応する機械語コードへの変換 これを行うためには 文がどのような構造を持っており したがってどのようなコードを生成すべきであるかを解析しなければならない この作業を構文解析という コンパイル開始 構文解析部 字句解析部 コード生成部 コンパイル修了 字句解析字句解析 (lexical nalysis) は コンパイラがまず最初に行う作業である 高級言語で書かれたソースプログラムを文字列として読み その中の部分文字列を種別に分類する 種別には 定数 ( 整数定数 実数定数 文字定数 文字列 ) 変数名 配列名 関数名 キーワード 演算子 ( 代入 比較 四則 論理など ) 区切り記号( 空白文字 タブ 改行 ) 注釈などがある 注釈は読み捨てられるが その他は種別ごとに管理する ( 名前は名前表 定数は定数表に登録される ) このような種別分けされたものをトークン(token) という 例えば 上例の C++のプログラムは次のようなトークンの列に分解される : main ( ) { int x, y, z ; 関数名左 ( 右 ) 左 { キーワード名前コンマ名前コンマ名前セミコロン cin >> x ; cin >> y ; if 名前演算子名前セミコロン名前演算子名前セミコロンキーワード ( y > x ) { z = x ; 左 ( 名前比較演算子名前右 ) 左 { 名前代入演算子名前セミコロン x = y ; y = z ; } 名前代入演算子名前セミコロン名前代入演算子名前セミコロン右 } cout << 3 * x * x + 名前 演算子整数定数乗法演算子名前乗法演算子名前加法演算子

7 2 * y + 1 ; } 整数定数乗法演算子名前加法演算子整数定数セミコロン右 } 構文解析字句解析して得られたトークンの列は 高級言語の文法に照らしてどのような構造 ( 意味 ) をもっているかを分析する この作業を構文解析 (syntax analysis) という 例えば 3*x*x+2*y+1 は算術式であるが 算術式 とは何か ( 算術式の外見的な形 = 構文 ( シンタックス syntax)) が高級言語の文法できちんと定義されている必要がある そのような文法の厳密な定義法としては例えばバッカス記法 (BNF: Backus Naur form) などがある 例えば 算術式 の構文はバッカス記法を使って < 算術式 >::=< 算術式 >< 加法演算子 >< 項 > < 項 > < 項 >::=< 項 >< 乗法演算子 >< 因子 > < 因子 > < 因子 >::=<1 次子 > < 因子 > <1 次子 > <1 次子 >::=-<1 次子 > (< 算術式 >) < 変数 > < 定数 > < 変数 >::=x y z < 定数 >::=< 整数定数 > < 整数定数 >::=0 1 2 < 乗法演算子 >::=* / < 加法演算子 >::=+ - と定義される ( これが 算術式の 文法 である ) 例えば 1 行目は次のように読む : 算術式とは 算術式の直後に+を書いてその後ろに項を書いたものであるか または 算術式の直後に-を書いてその後ろに項を書いたものであるか または 単独の項だけである 上記の算術式は この文法的には次ページに示したような構造をしている ( 一意的に定まる ) 構文解析結果をこの木構造(tree structure) で表したものを構文解析木 (parse tree) と呼ぶ このような構文解析のアルゴリズムはいろいろ知られているが この講義の範囲を超えているのでここでは述べない コード生成構文解析が終わると その情報をもとにコードの生成 (code generation) を行う コードの生成法もいろいろあるが ここでは詳細は述べない 実際には 構文解析と同時に中間コードを生成してしまうアルゴリズムもある 中間コードから機械語への変換は一般にやさしくなるような中間コードが用いられる

8 3 * x * x + 2 * y + 1 整数定数乗法演算子変数乗法演算子変数加法演算子整数定数乗法演算子変数加法演算子整数定数 定数定数定数 1 次子 1 次子 1 次子 1 次子 1 次子 1 次子 因子因子因子因子因子因子 項項項 項 項 項 算術式 算術式 3*x*x+2*y+1 の構文解析木 算術式 中間言語このような構文木も一種の中間言語 (intermediate language) といえる その他の中間言語として 数式のための逆ポーランド記法 (reverse Polish notation) 3つ組コード 4つ組コードなどがある 逆ポーランド記法は後置記法 (postfix notation) とも呼ばれ 数式における演算子をオペランドの後ろに書く書き方である 例えば a+b*(c-d)/e は abcd-e/* と書く 普通の数式の書き方は 演算子をオペランドの間に書く書き方で中置記法 (infix notation) とも呼ばれる これらに対し 演算子をオペランドの前に書く記法を前置記法 (prefix notation) とかポーランド記法 (Polish notation) という 前置記法 -*ab+c/de 中置き法 a*b-(c+d/e) 後置記法 ab*cde/+-

9 前置記法や後置記法では括弧が要らない これらの記法は 構文解析木をたどる方法と密 接に関係しているが それについてはここでは述べない 3つ組コード (triple code, 二番地命令 two-address code ともいう ) や4つ組コードはよく使われるもので 3つ組コードは次の形の命令を使って記述する : 番号.( 演算子 第一オペランド 第二オペランド ) 例えば 5. (+, x, 100) は ( 変数 5) x を意味する ( 変数?) は作業用変数を表す 例えば z=123*x+(y-z) は次のような3つ組コードに変換される : 1. (*, 123, x) 2. (-, y, z) 3. (+, 1, 2) 4. (=, 3, z) 4つ組コード (quadruple code, 三番地命令 three-address code ともいう ) は ( 演算子 第一オペランド 第二オペランド 結果の変数 ) の形の命令を用いて記述する 例えば 上例は次のようになる : (*, 123, x, w1) (-, y, z, w2) (+, w1, w2, z) 最適化目的コードをできるだけ効率が良いものにすることをコードの最適化 ( code optimization) といい コンパイラの重要な仕事の一つである 現在のコンパイラはこの最適化機能を必ず備えているため プログラマが考える以上に効率の良い機械語プログラムが生成される 最適化は中間コードに対して行われる場合と 機械語コードに対して行われる場合がある 実行速度の向上に貢献する場合と 記憶容量の縮小に貢献する場合がある : 共通の部分式の除去 不要コードの除去 少ない回数のループの展開 ループ普遍量の抽出とコード移動 演算子の強さの軽減

10 3. インタプリタ パソコン初期の BASIC 言語にはコンパイラがなく インタープリタ方式で実行された インタープリタ (interpreter) 解釈実行系とか通訳系とも呼ばれ 高級言語で書かれたプログラムを先頭から1 行ずつ順にその意味を解釈しながら実行していくプログラムである ソースプログラムの形のままで解釈実行することもあるが 構文解析木や中間言語などに変換しておいてそれを解釈実行する方式のものもある ここでは 数式 ( 算術式 ) を逆ポーランド記法に翻訳しておいてから それを解釈実行するインタープリタを例として考える すでに見たように 数式 (a+b)*(c-d) は逆ポーランド記法で ab+cd-* と表される これを解釈実行するのに スタックを用いる : 演算子が出現すると スタックのトップとセカンドをオペランドとしてその演算を適用して 結果をスタックにプ ッシュする a d b c c c-d a a+b a+b a+b a+b (a+b)*(c-d) 参考書 : 疋田輝夫 石畑清 コンパイラの理論と実現 共立出版 疋田輝夫 コンパイラ 昭晃堂 守屋悦朗 コンピュータサイエンスのための離散数学 2 章 サイエンス社 1991.

11 始め 問題 / 仕事... 解決策を検討する 解法 / 作業手順... アルゴリズムを考える algorithm... コーディング ( プログラムを書く ) coding プログラム ( 机上 )... プログラミング言語で記述 Pascal,C,FORTRAN など... 入力 ( エディタを使う ) editor デバッグ ソースプログラム source program debugging ( 原始プログラム ) 人間にしかわからない文字の列 エラーが ある場合... コンパイラによって機械語に翻訳 compiling プログラムを修正する 目的コード object program 未確定部分を含む機械語コード library ライブラリや 他の目的 コード... リンカによって他のプログラムと結合編集する linkage editing 実行可能プログラム executable program 機械語で記述された命令の列 ( コンピュータが理解できる 0,1 の列 ) データ... 実行 execution (run) 実行結果... 結果が ok なら終了終り

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め Copyright 守屋悦朗 2005 コンピュータの仕組み (2) ソフトウェア 3.3 アセンブラプログラミング (CASLⅡ) 情報処理技術者試験基本情報技術者試験 (http://www.jitec.jp/index.html) では 仮想コンピュータ (16ビットのワードマシン 主記憶容量 64KW)COMETⅡを定義し COMETⅡ のためのアセンブリ言語 CASLⅡを定めている COMETⅡとCASLⅡの仕様は情報処理技術者試験センターのウェブサイト

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 3 4 週 プログラミング言語の形式的な記述 2014 年 4 月 23 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 10 週 Java 仮想マシンとその機械語 2014 年 6 月 11 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週 (6/11)

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン () 仮想マシン 復習 仮想マシンの概要 hsm 仮想マシン プログラム言語の処理系 ( コンパイラ ) 原始プログラム (Source program) コンパイラ (Compiler) 目的プログラム (Object code) 原始言語 (Source language) 解析 合成 目的言語 (Object Language) コンパイルする / 翻訳する (to compile

More information

オートマトンと言語

オートマトンと言語 オートマトンと言語 回目 4 月 8 日 ( 水 ) 章 ( 数式の記法, スタック,BNF 記法 ) 授業資料 http://ir.cs.yamanashi.ac.jp/~ysuzuki/public/automaton/ 授業の予定 ( 中間試験まで ) 回数月日 内容 4 月 日オートマトンとは, オリエンテーション 4 月 8 日 章 ( 数式の記法, スタック,BNF) 3 4 月 5 日

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 11 週 条件分岐文と繰り返し文のコード生成 2014 年 6 月 18 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 6 回目 if 文と if else 文 今日の講義で学ぶ内容 関係演算子 if 文と if~else 文 if 文の入れ子 関係演算子 関係演算子 ==,!=, >, >=,

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 仮想マシン (2), コード生成 http://cis.k.hosei.ac.jp/~asasaki /lect/compiler/2007-1204.pdf ( 訂正版 ) 1 概要 仮想マシン 概要 ( 復習 ) 制御命令 出力命令 コード生成 式のコード生成 文 文の列のコード生成 記号表 2 演習で作るコンパイラの例 test.hcc Int main() { int i j; i = 3;

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1 COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1 ここでは機械命令レベルプログラミングを学びます 機械命令の形式は学びましたね機械命令を並べたプログラムを作ります 2 その前に プログラミング言語について 4 プログラミング言語について 高級言語 (Java とか C とか ) と機械命令レベルの言語 ( アセンブリ言語 ) があります 5 プログラミング言語について

More information

PowerPoint Presentation

PowerPoint Presentation プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.

More information

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 2017.12.7 前回の演習問題の解答例 1. 四則演算のできる計算機のプログラム ( 括弧も使える ) 2. 実数の扱える四則演算の計算機のプログラム ( 実数 も というより実数 が が正しかったです ) 3. 変数も扱える四則演算の計算機のプログラム ( 変数と実数が扱える ) 演習問題 1 で行うべきこと

More information

講習No.1

講習No.1 プログラムはどこに保存され, どこで実行されるのか? 復習 ハードディスク キーボード Central Processing Unit 例えば i7, ARM, Cortex-A17 ディスプレイ 例えば 4G バイト メモリ プログラムは, ワープロ文章などと同様, ハードディスクなどにファイルとして保存されている. プログラムは, メモリ上に呼び出されて ( ロード ) 実行される. プログラムの作成

More information

CASL入門

CASL入門 3 章 アセンブラ言語 CASLⅡ の仕様 ここでは アセンブラ言語の説明をします ちょっと待て 第 2 章の話は アセンブラ言語の話ではなかったのか と思われた人はいませんでしょうか 一般に プログラム という場合 その構成要素は次の 3 つに分かれます 1 動作のための命令加算 減算 比較などの命令 2 領域確保や定数定義など 動作しない部分 3 プログラム名の定義などこのうち 1が第 3 章で説明した部分にあたります

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 2 回目 ようこそ Java へ 今日の講義で学ぶ内容 画面へのメッセージの表示 文字や文字列 数値を表現するリテラル 制御コードを表すエスケープシーケンス 画面出力の基本形 ソースファイル名 : クラス名.java class クラス名 System.out.println(" ここに出力したい文字列 1 行目 "); System.out.println(" ここに出力したい文字列

More information

kantan_C_1_iro3.indd

kantan_C_1_iro3.indd 1 章 C# の学習を始める前に プログラムの 01 基本 Keyword プログラムプログラミング言語 プログラムとは プログラムとは コンピューターへの命令の集まりです 学校の先生が プリントを持ってきて と生徒に指示した場合を考えてみましょう 先生をプログラマー ( プログラムの作成者 ) 生徒をコンピューターとしたとき プリントを持ってきて という指示がプログラムです 人間とは違い コンピューターは曖昧な指示を理解できません

More information

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的 第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的 あるいは半永久的に保存する装置 CPU が直接読み書きできる主記憶装置 ( メモリ ) と データの保管などに使われる補助記憶装置

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum

More information

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

ガイダンス

ガイダンス 情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 4 回目演算子 今日の講義で学ぶ内容 演算子とオペランド 式 様々な演算子 代表的な演算子の使用例 演算子とオペランド 演算子 演算の種類です例えば + - * / 掛け算の記号は ではなく *( アスタリスク ) を使います割り算の記号は ではなく /( スラッシュ ) を使います オペランド 演算の対象です例えば 5( 値 ) num( 変数 ) 式 演算子とオペランドの組み合わせにより構成される数式です式は演算結果をもちます

More information

文法と言語 ー文脈自由文法とLR構文解析2ー

文法と言語 ー文脈自由文法とLR構文解析2ー 文法と言語ー文脈自由文法とLR 構文解析 2 ー 和田俊和資料保存場所 http://vrl.sys.wakayama-u.ac.jp/~twada/syspro/ 前回までの復習 最右導出と上昇型構文解析 最右導出を前提とした場合, 上昇型の構文解析がしばしば用いられる. 上昇型構文解析では生成規則の右辺にマッチする部分を見つけ, それを左辺の非終端記号に置き換える 還元 (reduction)

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 5 回目演算子の優先順位と変数の型変換 今日の講義で学ぶ内容 演算子の優先順位 優先順位の変更の方法 キャスト演算子と型変換 演算子の優先順位 演算子の優先順位 式を計算するときの演算の順序です例えば a=b*c+d; では乗算を先に計算するというルールです ( 主な演算子の優先順位 ) 演算子 名前 結合規則 ++ 後置インクリメント 左 -- 後置デクリメント 左!

More information

Microsoft PowerPoint - Compiler01note.pptx

Microsoft PowerPoint - Compiler01note.pptx 第 1 回の概要 http://www.info.kindai.ac.jp/compiler 38 号館 4 階 N-411 内線 5459 takasi-i@info.kindai.ac.jp 本科目の内容 (compiler) とは何か の構成 の作成方法 字句解析 構文解析 制約検査 コード生成 最適化情報システムプロジェクト I と連携 成績について 課題レポート (30%) 中間試験 (30%)

More information

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

コンピュータ中級B ~Javaプログラミング~  第3回 コンピュータと情報をやりとりするには? Copyright (C) Junko Shirogane, Tokyo Woman's Christian University 2012, All rights reserved. 1 コンピュータ サイエンス 2 第 7 回ソフトウェア 人間科学科コミュニケーション専攻 白銀純子 Copyright (C) Junko Shirogane, Tokyo Woman's Christian University

More information

コンピュータの仕組み(1)ハードウェア

コンピュータの仕組み(1)ハードウェア Copyright 守屋悦朗 2005 コンピュータの仕組み (1) ハードウェア 2.1 CPU の基本原理 2 つの整数の和を出力するプログラムを考えよう main() { int a, b, c; /* 変数 a,b が整数値をとる変数であることを宣言する */ a = 1; /* a に 1 を代入する */ b = 2; /* b に 2 を代入する */ c = a+b; /* a と

More information

CプログラミングI

CプログラミングI C プログラミング I Swap 関数を作る Stack データ構造のための準備 整数変数 x と y の値を取り替える関数 swap を作る 最初の試み : swap-01.c #include void swap(int a, int b) { int tmp; tmp = a; a = b; b = tmp; int main(void) { int x=10, y=30;

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Excel VBA の基本 1 VBA Visual Basic for Applications Office シリーズに搭載されているプログラミング言語 マクロを作成するために使われる 1 プログラミングとは 人間の意図した処理を行うようにコンピュータに指示を与えること セル A1 の内容をセル B1 にコピーしなさいセル A1 の背景色を赤色にしなさいあれをしなさいこれをしなさい 上から順番に実行

More information

言語プロセッサ2005

言語プロセッサ2005 url: kameken.clique.jp/lectures/lectures2014/compiler2014/ 言語プロセッサ 2014 Language Processors 2014 平成 26 年 9 月 22 日 ( 月 ) 東京工科大学コンピュータサイエンス学部亀田弘之 まずはイントロから なぜ言語プロセッサを学ぶのか? (Why do we study a course 言語プロセッサ?)

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

新版 明解C++入門編

新版 明解C++入門編 第 1 章画面 出力 入力 C++ C++ C++ C++ C++ C++ C++ C++ #include using C++ C++ C++ main C++ C++ C++ int double char C++ C++ C++ string C++ C++ C++ 21 1-1 C++ 歴史 C++ C++ 歴史 CC with classes Fig.1-1 C C++ Simula 67

More information

Microsoft Word - CompA-Ex doc

Microsoft Word - CompA-Ex doc コンパイラ演習参考資料 2008/09/23 担当 : 佐々木晃 算術式の処理と逆ポーランド記法 ( 第一回スライド 29 ページ ) (1) 実数値 (double の値 ) を格納するスタックを実装せよ ( 配列やリストを使うとよい ) (2) 逆ポーランド記法によって実数値の算術演算を行う計算機のプログラムを作成せよ 演算子や被演算子の各要素同士は空白で区切られるものとする (a) 四則演算のみなお

More information

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft PowerPoint - 3.ppt [互換モード] 3. プッシュダウンオートマトンと文脈自由文法 1 3-1. プッシュダウンオートマトン オートマトンはメモリがほとんど無かった この制限を除いた機械を考える 理想的なスタックを利用できるようなオートマトンをプッシュダウンオートマトン (Push Down Automaton,PDA) という 0 1 入力テープ 1 a 1 1 0 1 スタッb 入力テープを一度走査したあと ク2 入力テプを度走査したあと

More information

UNIX 初級講習会 (第一日目)

UNIX 初級講習会 (第一日目) 情報処理概論 工学部物質科学工学科応用化学コース機能物質化学クラス 第 3 回 2005 年 4 月 28 日 計算機に関する基礎知識 Fortranプログラムの基本構造 文字や数値を画面に表示する コンパイル時のエラーへの対処 ハードウェアとソフトウェア ハードウェア 計算, 記憶等を行う機械 ソフトウェア ハードウェアに対する命令 データ ソフトウェア ( 命令 ) がないとハードウェアは動かない

More information

講習No.9

講習No.9 日本語は通常 2 バイトの文字コード.JIS コード, シフト JIS コード, Unicode (UTF-8) 等の様々な文字コードがある. アスキーコード表 (ASCII code) アスキーコード ( 値 ) 漢字変換無しでキーボードから直接入力できる半角文字 32 48 0 64 @ 80 P 96 ` 112 p 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える

More information

Microsoft Word - Javacc.docx

Microsoft Word - Javacc.docx JavaCC 実習レポート課題について以下の実習のために コンパイラのページ http://www.info.kindai.ac.jp/compiler/ から javacc.zip をダウンロードしてください javacc.zip は以下のファイルから成ります javacc/ sample0.k, sample1.k, samplell2.k : k 言語の例プログラム sample0.asm,

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 2 第 03 回 (2007 年 05 月 07 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること hp://www.nlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 07 日分と書いてある部分が 本日の教材です 本日の内容

More information

数値計算

数値計算 プログラム作成から実行まで 数値計算 垣谷公徳 17 号館 3 階電子メール : kimi@ee.ous.ac.jp Source program hello.c printf("hello\n"); コンパイラ Library libc.a 0011_printf000101001 1101_getc00011100011 1011_scanf1110010100 コンパイル Object module

More information

スライド 1

スライド 1 東北大学工学部機械知能 航空工学科 2015 年度 5 セメスター クラス D 計算機工学 6. MIPS の命令と動作 演算 ロード ストア ( 教科書 6.3 節,6.4 節 ) 大学院情報科学研究科鏡慎吾 http://www.ic.is.tohoku.ac.jp/~swk/lecture/ レジスタ間の演算命令 (C 言語 ) c = a + b; ( 疑似的な MIPS アセンブリ言語 )

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ コンピュータ工学 Ⅰ 中央処理装置 Rev. 2019.01.16 コンピュータの基本構成と CPU 内容 ➊ CPUの構成要素 ➋ 命令サイクル ➌ アセンブリ言語 ➍ アドレッシング方式 ➎ CPUの高速化 ➏ CPUの性能評価 コンピュータの構成装置 中央処理装置 (CPU) 主記憶装置から命令を読み込み 実行を行う 主記憶装置 CPU で実行するプログラム ( 命令の集合 ) やデータを記憶する

More information

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ 4 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プログラミング技術 工業 333 実教出版 ) 共通 : 科目 プログラミング技術 のオリエンテーション プログラミング技術は

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

Microsoft Word - problem3.doc

Microsoft Word - problem3.doc コンパイラ演習 : 作成問題 3 ( 担当 : 佐々木晃 ) 次のような言語のコンパイラを作成することが目的である 目的機械は hsm 仮想機械とする 昨年度までの講義資料 ( 中田先生 開先生による ) も参考にすること 演習問題 B3 問題番号 : B3 課題名 : コンパイラの作成 3 (1) 記号表の実装 (2) JavaCC プログラム課題 3 (1) 記号表の実装 記号表を実現するクラス

More information

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが MPASM MPASM は Microchip Tecnology Inc. 社の開発した PIC のためのアセンブリ言語である ここでは MPASM の文法と使用法などについて記述する 1. 文法 ソースコードファイルは ASCII テキストファイルエディターを使って作成する そのように作られたソースコードは以下に示す基本的ガイドラインに従うべきである ソースファイルの各行は次の 4 つのタイプの情報を含んでよい

More information

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf(hello, n); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a hello printf(hello) 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 5 馬青 1 文字処理 数値処理 : 整数 浮動小数点数 単一の文字は と ( シングルクォーテーション ) で囲んで表現される 文字のデータ型は char または int である int を用いたほうが ライブラリの関数の引数の型と一致する 以下は全部 int の使用に統一する 従って int ch; で文字変数を宣言しておくと ch= A ; のように ch に文字 A

More information

Microsoft Word - no01.doc

Microsoft Word - no01.doc 応用プログラミング I II 2009.4.7 1. プログラミングとは 1.1 ハードウエアとソフトウエアパソコンをはじめとするコンピュータは ハードウエア といわれます このハードウエアだけで何ができるかといえば単なる計算だけです もちろんそれを表示することもできませんし キーボードから文字を打つこともできません 計算ができるといっても 数字を入力できないのですから数値を与えることすらできないのです

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

第2回講義:まとめ

第2回講義:まとめ C 言語のキーポイント 5=x は NG, x=y=6 は OK. (x=y)=6 は? *ptr=7 は? int x; printf( %d, x) は scanf ( %d, x) は 非 0 が真 0 が偽 for 文は while 文で書き直せる 逆も真 配列は 0- オリジン 関数呼び出しでは 仮引数が実引数で初期化される 式を評価するとき副作用を起こす演算子は ( 複合 ) 代入演算子

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte

More information

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

Microsoft PowerPoint - class2-OperatorOverLoad.pptx クラス Class (3) メンバ関数と演算子のオーバロード 上級プログラミング講義資料 成蹊大学理工学部情報科学科 1 多重定義 ( オーバロード ) 関数のオーバロード C++ の関数では シグニチャ ( 関数名, 引数の型および個数のこと ) が異なることによって 同名の関数が複数存在することが出来る 演算子のオーバロード四則演算子をはじめとする演算子を 新たに定義したクラスを取り扱うように多重定義することが出来る

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 8 回目 for 文 今日の講義で学ぶ内容 for 文 変数のスコープ for 文の入れ子 繰り返し文 1 for 文 for 文最初に一度だけ初期化の式を処理します条件が true の場合 文を実行し 更新の式を処理して繰り返します条件が false の場合 for 文を終了します 条件は boolean 型で 関係演算子で表現される式などを記述します for( 初期化の式

More information

Microsoft PowerPoint - 03BNFScanner.ppt [互換モード]

Microsoft PowerPoint - 03BNFScanner.ppt [互換モード] コンパイラ理論 3 BNF と EBNF そして構文解析へ 3 章ステップ 1: 問題の把握 櫻井彰人 と文法 と EBNF 言語仕様 プログラムと言語仕様との関係 コンパイラ入門 C# で学ぶ理論と実践 より 3.2 BNF(Backus Naur Form) 文法 を記述する表記法 コンピュータ言語を表す為に使われることが多い 英文法 単語と単語の構成 関係を表す 5 文型は単語の品詞から英文の型を表現している

More information

Microsoft Word _VBAProg1.docx

Microsoft Word _VBAProg1.docx 1. VBA とマクロ 1.1 VBA とは VBA(Visual Basic for Applications) は 1997 年に Microsoft 社がマクロを作成するために開発された言語である Windows 対応のアプリケーションを開発するためのプログラミング言語 Visual Basic をもとにしているため 次のような特徴がある 1 VBA は Excel Word, Access,

More information

Microsoft Word - no11.docx

Microsoft Word - no11.docx 3. 関数 3.1 関数関数は数学の関数と同じようなイメージを持つと良いでしょう 例えば三角関数の様に一つの実数値 ( 角度 ) から値を求めますし 対数関数の様に二つの値から一つの値を出すものもあるでしょう これをイメージしてもらえば結構です つまり 何らかの値を渡し それをもとに何かの作業や計算を行い その結果を返すのが関数です C 言語の関数も基本は同じです 0 cos 1 cos(0) =

More information

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft PowerPoint - 3.ppt [互換モード] 第 3 回簡単な計算 プリプロセッサ 1 今回の目標 定数とその型を理解する 演算子とその効果を理解する 簡単なライブラリ関数の使用法を理解する ヘロンの公式を用いて 3 角形の面積を求めるプログラムを作成する 2 ヘロンの公式 ヘロンの公式 : 3 辺の長さがわかっているときに 3 角形の面積を求める方法 d = a + b + c 2 S = d ( d a )( d b )( d c ) 3

More information

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ コンピュータ工学 Ⅰ Rev. 2018.01.20 コンピュータの基本構成と CPU 内容 ➊ CPUの構成要素 ➋ 命令サイクル ➌ アセンブリ言語 ➍ アドレッシング方式 ➎ CPUの高速化 ➏ CPUの性能評価 コンピュータの構成装置 中央処理装置 (CPU) 主記憶装置から命令を読み込み 実行を行う 主記憶装置 CPU で実行するプログラム ( 命令の集合 ) やデータを記憶する 補助記憶装置

More information

18/12/06 情報工学実験 C コンパイラ (2018 年度 ) 担当 : 笹倉 佐藤 その 3 yacc の構造 定義部 %% 定義部の終了 規則部 %% 規則部の終了 ユーザ定義サブルーチン部 :C のプログラムを書く 形は lex と同じ 1

18/12/06 情報工学実験 C コンパイラ (2018 年度 ) 担当 : 笹倉 佐藤 その 3 yacc の構造 定義部 %% 定義部の終了 規則部 %% 規則部の終了 ユーザ定義サブルーチン部 :C のプログラムを書く 形は lex と同じ 1 情報工学実験 C コンパイラ (2018 年度 ) 担当 : 笹倉 佐藤 2018.12.6 その 3 yacc の構造 定義部 定義部の終了 規則部 規則部の終了 ユーザ定義サブルーチン部 :C のプログラムを書く 形は lex と同じ 1 yacc yacc のキモは規則部 規則部には文法規則を書く左辺 : 右辺 yacc は入力されたプログラムを右辺から左辺に 還元 していく この規則にアクションが書かれていたら還元するときにアクションも実行する.

More information

Report#2.docx

Report#2.docx 1.scanf() 関数による標準入力と基本演算子 ⅱ.1234 円の買い物をして 1 万円札を出したときの お釣りの札と硬貨の枚 数を求めるプログラムを作成せよ a)scanf() 関数を用いて 価格と支払い金額を入力せよ ソースコードの一部 ( 冒頭のコメントは省略 ) 12 13 14 15 16 17 18 1 20 21 22 23 24 25 26 27 28 2 30 31 32 33

More information

gengo1-8

gengo1-8 問題提起その 1 一文字ずつ文字 ( 数字 ) を読み込み それぞれの文字が何回入力されたかを数えて出力するプログラム int code, count_0=0, count_1=0, count_2=0, count_3=0,..., count_9=0; while( (code=getchar())!= EOF ){ } switch(code){ case 0 : count_0++; break;

More information

テスト 1/5 ページ プレポスト OSIV/MSP JCL とユーティリティ 受講日程受講番号氏名 1 ジョブ制御文で指定する情報として間違っているものを選びなさい 1. 実行プログラム名 2. 入出力データセット名 3. コンピュータの機種名 4. 実行プログラムの処理順序 解答 2 ジョブ制御

テスト 1/5 ページ プレポスト OSIV/MSP JCL とユーティリティ 受講日程受講番号氏名 1 ジョブ制御文で指定する情報として間違っているものを選びなさい 1. 実行プログラム名 2. 入出力データセット名 3. コンピュータの機種名 4. 実行プログラムの処理順序 解答 2 ジョブ制御 1/5 ページ プレポスト OSIV/MSP JCL とユーティリティ 受講日程受講番号氏名 1 ジョブ制御文で指定する情報として間違っているものを選びなさい 1. 実行プログラム名 2. 入出力データセット名 3. コンピュータの機種名 4. 実行プログラムの処理順序 2 ジョブ制御文の種類として間違っているものを選びなさい 1. DD 文 2. PARM 文 3. EXEC 文 4. 空文 3

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

Microsoft Word - no02.doc

Microsoft Word - no02.doc 使い方 1ソースプログラムの入力今回の講義では C++ 言語用の統合環境ソフトといわれるプログラムを利用します デスクトップにある CPad for C++ のアイコン ( 右参照 ) をダブルクリ ックしましょう ( 同じアイコンで Java_pad とかい エディタ部 てあるものもありますので気をつけてください ) これで 起 動します 統合環境を立ち上げると エディタ部とメッセージ部をもった画面が出てきます

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

講習No.12

講習No.12 前回までの関数のまとめ 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) にコピーされる. 関数内で定義した変数は, 関数の外からは用いることができない ( ローカル変数 ). 一般に関数内で仮引数を変化しても, 呼び出し側の変数は変化しない ( 値渡し ). 関数内で求めた値は return 文によって関数値として呼び出し側に戻される.

More information

CASL入門

CASL入門 4 章 機械語の設計 ここでは 機械語の設計をしてみましょう 機械語の設計! そんなことができるのでしょうか 情報処理技術者試験の CASLⅡ 説明書の参考資料には 命令後の構成は定義しないが と記載されています アセンブラ言語を理解するためには機械語の理解が非常に大切になりますし 自分で設計してみれば格段に理解が容易になります そこで 定義されていないなら 定義してしまおう というわけです CASLⅡが動くコンピュータである

More information

Microsoft Word - problem5.doc

Microsoft Word - problem5.doc コンパイラ演習 : 作成問題 5 ( 最終課題 ) ( 担当 : 佐々木晃 ) 目的機械は hsm 仮想機械とする 昨年度までの講義資料 ( 中田先生 開先生による ) も参考にすること 演習問題 B5( 締め切り =2008/01/27) 問題番号 : B5 課題名 : コンパイラの作成 5 ( 昨年度の第 5 回とは問題が異なるので 間違わないようにしてください ) 問題 JavaCC を用いて,

More information

Report#2.docx

Report#2.docx プログラミング Ⅰ Report #2( 再 ) 提出日 :2013 年 8 月 1 日所属 : 工学部情報工学科学籍番号 :e135732j 氏名 : 前城健太郎 scanf() 関数による標準入力と基本演算子 1 1234 円の買い物をして 1 万円札を出したときの お釣りの札と硬貨の枚 数を求めるプログラムを作成せよ 1.2 scanf() 関数を用いて 価格と支払い金額を入力せよ 1.2.1

More information

Microsoft PowerPoint - Compiler03note.pptx

Microsoft PowerPoint - Compiler03note.pptx コンパイラ 第 3 回字句解析 決定性有限オートマトンの導出 http://www.no.knd.c.jp/compler 38 号館 4 階 N4 内線 5459 tks@no.knd.c.jp コンパイラの構造 字句解析系 構文解析系 制約検査系 中間コード生成系 最適化系 目的コード生成系 処理の流れ情報システムプロジェクト I の場合 output (); 字句解析系 output ( 変数名

More information

情報処理演習 B8クラス

情報処理演習 B8クラス 予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ

More information

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ アセンブリ言語 ( 超簡単命令セット版 ) 取扱説明書 平成 26 年 2 月改訂版 目次 1 はじめに 2 1.1 利用できるデータの範囲やアドレス空間 命令長についての注意 2 2 プログラムの書き方と実行の方法 3 2.1 このマニュアルでの表記について 3 2.2 入力上の注意 3 2.2.1 使用できる文字について 3 2.2.2 ラベルの付け方 3 2.3 命令長の書き方 4 2.3.1

More information

gengo1-2

gengo1-2 変数 プログラム中で 値を格納するには変数 variable を用いる変数は 格納する値の型によって 整数型 文字型 などの型 type をもつ変数を使うには 利用に先立って変数の宣言 declaration をしなければならない 値 変数の値はコンピュータのメモリ上に格納される 具体的にメモリのどの場所に格納されるかは言語処理系が自動的に扱うので プログラマ ( 特に初級者 ) が意識する必要はない

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 1 p 1 T 0 S = i=0 p 0 T i = i=0 2

More information

Microsoft Word - CygwinでPython.docx

Microsoft Word - CygwinでPython.docx Cygwin でプログラミング 2018/4/9 千葉 数値計算は計算プログラムを書いて行うわけですが プログラムには様々な 言語 があるので そのうちどれかを選択する必要があります プログラム言語には 人間が書いたプログラムを一度計算機用に翻訳したのち計算を実行するものと 人間が書いたプログラムを計算機が読んでそのまま実行するものとがあります ( 若干不正確な説明ですが ) 前者を システム言語

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 09: ポインタ 文字列 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-09 1 関数できなかったこと 配列を引数として渡す, 戻り値として返す 文字列を扱う 呼び出し元の変数を直接書き換える 例 : 2 つの変数の値を入れ替える関数

More information

Microsoft PowerPoint - 4.ppt [互換モード]

Microsoft PowerPoint - 4.ppt [互換モード] 第 4 回簡単な計算 プリプロセッサ 1 今回の目標 定数を理解する 演算子とその効果を理解する 簡単なライブラリ関数の使用法を理解する ヘロンの公式を用いた3 角形の面積を求めるプログラムを作成する 2 ヘロンの公式 ヘロンの公式 : 3 辺の長さがわかっているときに 3 角形の面積を求める方法 d = a + b + c 2 S = d ( d a )( d b )( d c ) 3 定数の分類と型

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

計算機アーキテクチャ

計算機アーキテクチャ 計算機アーキテクチャ 第 11 回命令実行の流れ 2014 年 6 月 20 日 電気情報工学科 田島孝治 1 授業スケジュール ( 前期 ) 2 回日付タイトル 1 4/7 コンピュータ技術の歴史と コンピュータアーキテクチャ 2 4/14 ノイマン型コンピュータ 3 4/21 コンピュータのハードウェア 4 4/28 数と文字の表現 5 5/12 固定小数点数と浮動小数点表現 6 5/19 計算アーキテクチャ

More information

Prog1_2nd

Prog1_2nd 2019 年 10 月 3 日 ( 木 ) 実施浮動小数点数 Java 言語で実数を扱う場合, 実用的な計算には変数のデータ型としては,double 型を用いる 浮動小数点数とは, 実数を表す方式の一つで,2 進数の場合は例えば 1.101 2 3 ( 判り易さの為にここでは 2 や 3 は 10 進数で表記 ) の様な表記法である なお, 第 1 回の教材にあった, 単精度, 倍精度という用語で,

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

Microsoft PowerPoint - ProcML-12-3.ppt

Microsoft PowerPoint - ProcML-12-3.ppt プロセッサと 年次前次前期 ( 第 回 ) 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow か? () + + () + + 答 答 中島克人 情報メディア学科 nakajima@im.dendai.ac.jp () - = + + 答 進数の加減算 (overflow( overflow) 演習 次の ビット演算の結果は overflow

More information

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 前回の復習 関数を作る : 何を引数として どういう計算をし 何を返すか 関数についての注意 : * main 関数で使われている変数と同じ名前の変数があっても それらには何ら関係はない * 関数名と同じ変数は その関数内では使わないようにする ( 紛らわしさを少なくするため

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt コード生成 (2) http://cis.k.hosei.ac.jp/~asasaki /lect/compiler/2007-1211.pdf 1 概要 宣言文と記号表 ( 配列 ) 今日はやりません 2 宣言 a = 1; b = a+2; putint(b); int main(){ int a; int b; a = 1; b = a+2; putint(b); } PUSH 0 26 LDC

More information

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 1 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/teachers/w48369 2/CPR1/ 2017-07-05 まとめ : ポインタを使った処理 2 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作ります FORTRAN の場合 OPEN 文でファイルを開いた後 標準入力の場合と同様に READ 文でデータを読みこみます

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 条件分岐 if~else if~else 文,switch 文 条件分岐 if~else if~else 文 if~else if~else 文 複数の条件で処理を分ける if~else if~else 文の書式 if( 条件式 1){ 文 1-1; 文 1-2; else if( 条件式 2){ 文 2-1; 文 2-2; else { 文 3-1; 文 3-2; 真条件式

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 p 1 S = T i = 1 2 p i p i+1 i=0 i=0

More information