Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森.

Slides:



Advertisements
Similar presentations
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
Advertisements

Problem A : Everlasting...? 原案 : 泉 模範解答 : 黄・野田 解説 : 野田.
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
内部ドメイン専用言語支援のため の 型に連動した字句・構文ルールの 変更機構 理学部 情報科学科 千葉研究室 07_02363 市川 和央 指導教員 千葉 滋 教授 1.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Problem R: ツンデレチェッカー 問題作成・解説: 北村.
Problem by D. Mikurube Slides by Y. Izumi
コンパイラ 2011年10月17日
επιστημη さん 提供の VB.NETプログラムを丸裸にする!?
問題作成・解説: 北村 解答作成協力: 小西・松本
基礎プログラミングおよび演習 第9回
Problem G : Entangled Tree
言語処理系(6) 金子敬一.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
文法と言語 ー文脈自由文法とLR構文解析2ー
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
文法と言語 ー文脈自由文法とLL構文解析ー
プログラミング言語論 第4回 式の構文、式の評価
原案: 矢藤(kohyatoh) 解答: 高原(rankalee, shimejitan), 矢藤 解説: 矢藤
第6章 2重ループ&配列 2重ループと配列をやります.
Problem C: Princess' Japanese
模擬国内予選2014 Problem C 壊れた暗号生成器
言語処理系(5) 金子敬一.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報科学(10-11) 言語処理系と仮想機械.
コンパイラ 2011年10月24日
二分探索木によるサーチ.
「ユーザー設定リスト」の作成と削除 ◎ 新しい「リスト」の作成法
東京工科大学 コンピュータサイエンス学部 亀田弘之
PROGRAMMING IN HASKELL
言語プロセッサ 第7回目 平成27年11月16日.
プログラミング言語論 第3回 BNF記法について(演習付き)
FlexとBison+アルファ -実習編-
コンパイラ 第13回 上昇型構文解析(1) 38号館4階N-411 内線5459
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
文法と言語 ー文脈自由文法とLR構文解析2ー
データ構造と アルゴリズム 第七回 知能情報学部 新田直也.
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報処理Ⅱ 第14回 2006年1月23日(月).
プログラムの基本構造と 構造化チャート(PAD)
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
文法と言語 ー文脈自由文法とLR構文解析ー
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
アルゴリズムとデータ構造 2012年7月2日
5.チューリングマシンと計算.
アルゴリズムと数式の表現 コンピュータの推論
第14回 前半:ラムダ計算(演習付) 後半:小テスト
情報処理Ⅱ 2005年1月25日(火) レポート課題2の解説.
アルゴリズムとデータ構造 2013年7月2日
4.プッシュダウンオートマトンと 文脈自由文法の等価性
情報処理Ⅱ 2005年10月28日(金).
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
コンパイラ 2012年10月11日
文法と言語 ー文脈自由文法とLR構文解析2ー
情報処理Ⅱ 小テスト 2005年2月1日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
4.2 再帰下降解析 (1)再帰下降解析とは ■再帰下降解析(Recursive Descent Parsing)
Presentation transcript:

Problem J: いにしえの数式 問題作成・解説: 北村 解答作成協力: 八森

問題 演算子の優先順位と結合方向が与えられる どの項とどの項が結合しているかを正しく表現せよ 例 + より * の方が優先順位が高い * は左から右に結合する このとき、 a + b * c * d は (a+((b*c)*d)) となる

解法 入力形式がややこしい! 入力文字列の長さがたかだか100文字なので、効率 の悪い方法でも正しくパーズさえできれば解ける 頑張って読みましょう 入力文字列の長さがたかだか100文字なので、効率 の悪い方法でも正しくパーズさえできれば解ける 入力文字列の長さ L に対して、 O(L2)-time のアルゴリズ ムでも可 O(L)-time で解くアルゴリズムも存在する

他にも、優先順位の低い演算子から 処理していくなど、 いろいろなバリエーションはありうる 素朴な方法 O(L2)-time 変数と演算子をそれぞれ独立したノードとする 一番優先順位の高い演算子を選ぶ 優先順位が同じ演算子が複数ある場合は、左結合のときは左から、 右結合のときは右から優先して選ぶ 演算子とその両隣のノードをまとめて1つのノードにする ノードが1つになるまで繰り返す 括弧は前もって処理 例: a + b * c * d a + b * c * d a + (b*c) * d a + ((b*c)*d) (a + ((b*c)*d)) 他にも、優先順位の低い演算子から 処理していくなど、 いろいろなバリエーションはありうる

構文木 + * * a d b c 演算子を節点、変数やリテラル項などを葉ノードとし たツリー 処理を再帰的に書くことができる 例: a + b * c * d + * * a d b c

再帰降下法 文字列を効率よくパーズする手法 O(L)-time やり方 詳しくはコンパイラの教科書を参考のこと 左再帰のない文脈自由文法を作る。例: Expr ::= Term ( ‘+’ Term | ‘-’ Term )* Term ::= Factor ( ‘*’ Factor | ‘/’ Factor )* Factor ::= Var | ‘(‘ Expr ‘)’ 非終端記号それぞれについてパーザ関数を作る 必要なら先読みをして入力文字列の読み取りが逆戻りしないよう にする Expression* expr() { t1 = term(); if (nextchar() == ‘+’) then ... ... return new Expression(...); } 詳しくはコンパイラの教科書を参考のこと

この問題でも再帰降下法が使えるか? 使えます それぞれの結合の強さをレベルとして、以下のように 文法を定義する Expr ::= Expr0 Expri ::= Expri+1 ( opi Expri+1 )* ExprL ::= Var | ‘(‘ Expr ‘)’ なんと関数1個でパーズできる 同一レベル内の項が揃ってから結合方向に従って構 文木を作ればよい

解答状況 14 accepts / 24 submissions 14 users tried 最初の正答は高橋周平さん(171分) 挑戦した方は皆さん解けたようです 最初の正答は高橋周平さん(171分)