言語処理系(4) 金子敬一 練習問題 2.2 値呼び,参照呼び, begin 複写復元連係,名前 A := 2; 呼び,を用いたとき B := 3; の印字結果? PROC(A+B,A,A); proc PROC(X,Y,Z); print A begin end Y := Y + 1; Z := Z + X end PROC; • 練習問題 2.2 出力結果は, • 値呼び proc PROC(X,Y,Z); begin Y := Y + 1; Z := Z + X end PROC; begin A := 2; B := 3; PROC(A+B,A,A); print A end 2 練習問題 2.2 出力結果は, • 参照呼び proc PROC(X,Y,Z); begin Y := Y + 1; Z := Z + X end PROC; begin A := 2; B := 3; PROC(A+B,A,A); print A end 8 練習問題 2.2 出力結果は, • 複写復元連係 proc PROC(X,Y,Z); begin Y := Y + 1; Z := Z + X end PROC; begin か A := 2; B := 3; PROC(A+B,A,A); print A end 37 練習問題 2.2 出力結果は, • 名前呼び proc PROC(X,Y,Z); begin Y := Y + 1; Z := Z + X end PROC; begin A := 2; B := 3; PROC(A+B,A,A); print A end 9 3 字句解析 3.1 字句解析系の役割 3.2 字句解析系を設計するための簡単な 方法 3.1 字句解析系の役割 • 字句解析系の設計 入力文字列 入力文字列 呼出し 字句解析系 字句 構文解析系 構文解析系 解析木 字句解析系 字句 解析木 3.1 字句解析系の役割 • 字句解析の必要性 構文解析よりも簡単な作業 分離することで構文解析も単純化 字句解析時に実行可能なこと 1. 行番号の数え上げ 2. 出力リストの作成 3. 余白の除去 4. 注釈の削除 3.1 字句解析系の役割 • 入力バッファリング ’i’’n’’t’’ ’’x’’1’’;’’ ’’i’’n’’t’’ ’ ”int” 3.1 字句解析系の役割 • 入力バッファリング ’i’’n’’t’’ ’’x’’1’’;’’ ’’i’’n’’t’’ ’ ”int” ”x1” 3.1 字句解析系の役割 • 入力バッファリング ’x’’1’’;’’ ’’i’’n’’t’’ ’’v’’e’’r’’y’ ’l’’o’’n’’g’’n’’a’’m’’e’’;’’ ’’i’’n’ 3.1 字句解析系の役割 • 入力バッファリング ’x’’1’’;’’ ’’i’’n’’t’’ ’’v’’e’’r’’y’ ’l’’o’’n’’g’’n’’a’’m’’e’’;’’ ’’i’’n’ 3.1 字句解析系の役割 • 予備操作 − 注釈の除去 − 不要な空白の除去 − 行数の数え上げ 3.2 字句解析系を設計する ための簡単な方法 • 遷移図 字句の発見を表す 現れ得る入力文字 0 英字 状態 遷移 1 * 1文字戻す 3.2 字句解析系を設計する ための簡単な方法 • 識別子に対する遷移図 英字または数字 始め 0 英字 1 区切り記号 2 * ちょっと休憩 (雑談) CMの中の外国語 • Volare, cantare... う... • Что? Что? 飛ぶ,歌 何? 何? • Il offre sa confiance et son amour. 信頼と愛情を提供する. • 有烏龍茶嗎? ウーロン茶あります か? 休憩おわり 3.2 字句解析系を設計する ための簡単な方法 • 遷移図からプログラムへ − 入力バッファから次の文字を読み込 む.(関数GETCHAR) − 対応する辺が出ていれば,対応す る状態へ制御を移す. − 2重丸の状態でなければ,失敗. − すべての遷移図を試しても駄目なら ば字句誤り. 3.2 字句解析系を設計する ための簡単な方法 • 状態0 state0: C := GETCHAR(); if LETTER(C) then 始め 0 英字 goto state1 else FAIL() 3.2 字句解析系を設計する ための簡単な方法 • 状態1 英字または数字 1 state1: C := GETCHAR(); if LETTER(C) or DIGIT(C) then 区切り記号 goto state1 else if DELIMIT(C) then goto state2 else FAIL() 3.2 字句解析系を設計する ための簡単な方法 • 状態2 state2: RETRACT(); return(id, 2 * INSTALL())
© Copyright 2024 ExpyDoc