- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文法と言语-VRL
* * * * * * * * * * 文法と言語ー文脈自由文法とLR構文解析ー 和田俊和 資料保存場所 http://vrl.sys.wakayama-u.ac.jp/SS/ 前回までの復習 言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる. 文法にはタイプ0からタイプ3までのレベルがあり, プログラム言語としてはタイプ2「文脈自由文法」 プログラム中の字句の表現にはタイプ3「正規文法」 が用いられる. 文脈自由文法 文脈自由文法(Context Free Grammar:CFG)は,前後の記号に関係なく「非終端記号1つ」を「非終端記号と終端記号から成る記号列」に置き換えるという生成規則 A→t のみを持つ文法 出発記号に対して生成規則の要素を何度か適用して終端記号列を得ることを「導出」と呼ぶ. 終端記号列と文法が与えられたとき,生成規則がどのように適用されたのか,つまり,導出の過程を求めることを「構文解析」と呼び,その結果,導出木が得られる. 導出木からそれを簡略化した「構文木(演算子木)」が求められ,それを利用した式の計算などが可能である. 正規文法 正規文法は,「非終端記号1つ」を「終端記号」もしくは「終端記号 非終端記号」に置き換えるという生成規則 A→a or B→bB のみを持つ文法 正規文法で表現できるのは,「整数」「実数」「識別子(変数名)」「キーワード」など,比較的単純な記号の並びである. 正規文法によって規定される言語は,正規表現によって表現することができる. 正規表現から,それに唯一に対応付けられる「非決定性有限状態オートマトン(NFA)」が機械的に対応付けられる. 字句解析オートマトンの生成 機械的に求められたNFAは,ε-closureによる新たな状態の導入により計算機で実行可能なDFAに変換することができ,さらに状態数の最適化などが行われ,字句解析に用いられる. このような字句解析オートマトンを生成するプログラムに lex がある. lex は拡張された正規文法と,C言語プログラムを与えることで,簡単にオートマトンが生成できる. 文脈自由文法における導出 導出には最左導出と,最右導出があり,文法および構文解析法によっては,これらの導出が無限ループになることがある. 算術式の評価に於いては必ず,最右導出を行う必要がある. 最左導出は算術式以外の文を対象とした構文解析に用いることが可能であり,構文解析表とスタックを用いた「LL構文解析」,再帰呼び出しを用いた「再帰下降型構文解析」などがある. これら最左導出の構文解析アルゴリズムは,導出木を上から下へと辿る「下降型」構文解析法である. 確認の問題 push(‘a’,S), push(‘b’,S), pop(S), push(‘c’,S), pop(S),pop(S) 上の操作で,pop(S)によって取り出される記号列は? LL構文解析問題(前回の問題) S→F S→-F+S F→1 上記文法の元で,-1+1をLL構文解析で構文解析するとどうなるか?構文解析表を求め,導出木を示しなさい. 構文解析表の作り方(例) S→F S→-F+S F→1 Fi(F)=φ , Fi(S)=φ Fi(S)={-}, Fi(F)={1} S→FというルールからFi(S):=Fi(S)∪Fi(F)とする Fi(S)={-,1}, Fi(F)={1} - 1 + $ S 2 1 - - F - 3 - - LL構文解析の結果 S→F S→-F+S F→1 [S,$], 入力:- ルール2の適用 [-,F,+S,$], スタックと入力の‘-’を削除. [F,+,S,$], 入力:1 [1,+,S,$],入力:1,スタックと入力の1を削除 [+,S,$],入力:+スタックと入力の+を削除 [S,$],入力:1 ルール1の適用 [F,$],入力:1 ルール3の適用 [1,$],入力:1 スタックと入力の1を削除 意味:S→-F+S→-1+S→-1+F→-1+1 - 1 + $ S 2 1 - - F - 3 - - S F - 1 + S F 1 最右構文解析法 LR構文解析 最右導出と上昇型構文解析 最右導出を前提とした場合,上昇型の構文解析がしばしば用いられる. 上昇型構文解析では生成規則の右辺にマッチする部分を見つけ,それを左辺の非終端記号に置き換える「還元(reduction)」という操作を繰り返し,出発記号に到達する 還元操作を行うには手がかりが必要 算術式→算術式加減演算子項 という生成規則の右辺にマッチする部分を 1-2-3-4 という記号列から見つける問題を考える. 明らかに”1-2-3”が右
文档评论(0)