再帰降下の構文解析からLL(1)
-
02-07-2019 - |
質問
下記の簡単な"電卓の表現"文法(BNF)が簡単に解析されるな再帰降のパーサは、予測LL(1):
<expr> := <term> + <term>
| <term> - <term>
| <term>
<term> := <factor> * <factor>
<factor> / <factor>
<factor>
<factor> := <number>
| <id>
| ( <expr> )
<number> := \d+
<id> := [a-zA-Z_]\w+
では常にへ数分で出られる次のトークンを知るためのルール。しかし、そのエフェクトを加え、以下のルールに関連付けます:
<command> := <expr>
| <id> = <expr>
を目的と相互作用の計算機のコマンドラインは、変数のようになります:
calc> 5+5
=> 10
calc> x = 8
calc> 6 * x + 1
=> 49
では使用できませんの簡単なLL(1)予測するパーサが構文解析 <command>
用することはできますかんのための連想パーザaspそうですが、必要とすることを知りトークンです。を利用して後退するのですか、それともだけの実施LL(2)という二つのトークンです。
どのように詳しくパーサに発電機を扱うことでこの問題(AOETOOLSは、インスタンス)?
解決
の問題
<command> := <expr>
| <id> = <expr>
ただの"見る" <id>
できないの始まりは、assignement(第規則)はい"<factor>
".お知り合いの次のトークンである。
AFAIK AOETOOLSはLL(*)(ともできる生ラットパックパーサについて知っておきましょな誤りでも扱うこgrammareを考えるトークンです。
場合のセレブを巻き込んで大流行しての文法を提供しているいずれかの追加のキーワードの譲渡など let x = 8
) :
<command> := <expr>
| "let" <id> "=" <expr>
を利用す =
耗評価:
<command> := "=" <expr>
| <id> "=" <expr>
他のヒント
私がこれを解決する方法と再帰降下パーサー:のいずれかを使用(り)lookaheadまたは後退.
Lookahead
command() {
if (currentToken() == id && lookaheadToken() == '=') {
return assignment();
} else {
return expr();
}
}
後退
command() {
savedLocation = scanLocation();
if (accept( id )) {
identifier = acceptedTokenValue();
if (!accept( '=' )) {
setScanLocation( savedLocation );
return expr();
}
return new assignment( identifier, expr() );
} else {
return expr();
}
}
問題は、文法:
<command> := <expr>
| <id> = <expr>
ではない相互再帰きます。のための再帰的アパーサが必要となりまを決定する非再帰的に等価です。
rdentato)家系図は長寿祝い等のギフを示してどうすればいいと遊ぶことができ、文法を学びます。このpowerpointの似問題になります詳細および表示方法を示します確認ください:http://www.google.com/url?sa=t&source=web&ct=res&cd=7&url=http%3A%2F%2Fxml.cs.nccu.edu.tw%2Fcourses%2Fcompiler%2Fcp2006%2Fslides%2Flec3-Parsing%26TopDownParsing.ppt&ei=-YLaSPrWGaPwhAK5ydCqBQ&usg=AFQjCNGAFrODJxoxkgJEwDMQ8A8594vn0Q&sig2=nlYKQVfakmqy_57137XzrQ
AOETOOLS3 用"LL(*)"のパーサに対してLL(k)パーサが、その先を見に到達するまでは入力の終わりまで、後退、特別に最適化されdeterminstic有限オートマトン(DFA).