問題タブ [ll]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
grammar - FOLLOW関数の解説 - 文法
関数 FOLLOW を理解するのにいくつか問題があります。文法の次の関数を計算できず、それは良くありません。私はこの機能を理解するための演習を試みました。特にこの演習では、次の文法を使用しました。
S -> E
E -> T E'
E' -> + T E' | マイナス T E' |
T -> F T'
T' -> * F T' |
F -> ID | ( F'
F' -> E) | n)
次の関数の計算結果は次のとおりです。
シンガポールドル
E )、$
E'), $
T +、マイナス、)、$
T' +, マイナス, ), $
F *、+、マイナス、)、$
F' *, +, マイナス, ), $
なぜ FOLLOW(T)=FOLLOW(T') = { +, マイナス, ), $ } なのか、私にはよくわかりません。だから誰かが私にこれを説明できるなら、それはクールだろう
grammar - LL および LR 文法の認識... パーサーではありません
CFG を見て与えられた場合、それが LL クラスの文法か LR クラスの文法かを判断できますか? Google でこの質問を検索したところ、これらの文法のパーサーがどのように機能するかがわかりましたが、それは私が望んでいるものではありません。どんな援助でも大歓迎です。
parsing - この FIRST 関数の説明
LL(1) 文法:
そして、私が読んでいるスクリプトでは、関数FIRST(ε DimList')
が{#, [}
. しかし、どうやって?
私の推測では、(2) の右辺は で始まるε
ので、イプシロンをスキップしてFIRST(DimList')
、(3) と (5) を考慮すると、 に等しいものを{[}
とりますが、(4) のために、 をとるFOLLOW(DimList')
こともでき{#}
ます。
他の方法としては、(2) で始まるため、ε
イプシロンをスキップして取るがFIRST(DimList')
、(2) から FOLLOW(DimList) を取ることもあります...
私はまだ LL(1) 文法の基礎を学んでいますが、最初の方がより理にかなっています。
編集: そしてもちろん、これらのどちらも真実ではない可能性があります。
antlr - Antlr: 特定のコンテキストでキーワードを無視する
ANTLR を使用して、英語に似たドメイン固有言語を構築しています。そのキーワードは状況依存です。(私はそれが汚いように聞こえることを知っていますが、プログラマー以外のターゲット ユーザーにとっては非常に理にかなっています。) たとえば、or
およびなどの通常の論理演算子not
は、角括弧で囲まれている場合、識別子として扱われる必要があります。 . 私の現在のアプローチは次のようになります。
これは、次のような字句定義と組み合わせると、次のようになります。
警告を生成し"Decision can match input such as "{AND..PROCESS, RPAREN..'with'}" using multiple alternatives: 1, 2"
ます。明らかに ANTLR のあいまいさを生み出していますが、解決方法がわかりません。これを修正するにはどうすればよいですか?
parsing - 文法の最初のセットを計算していますか?
私はこの文法を持っており、最初のセットを自分で計算しましたが、示されている方法がわかりにくかったため、作業を表示する方法がわかりませんが、作業を表示する方法ではなく、セットを取得する方法を理解しています.
文法は次のとおりです。
私の最初のセットは次のとおりです。
parsing - スタックで実装された LL(1) パーサー: AST を構築する方法は?
私は現在パーサーを手作業で構築しています。LL(1) パーサーです。現時点では、それは優れた認識機能です。その関数 parse(List tokens) は、tokens が言語のメンバーであるかどうかを決定します。
ここで、その入力に対応する AST を構築したいと思います。ただし、再帰的な降下方法で実装する方法を知っています(すでに実行しています)。つまり、課題として、従来のアルゴリズムのスタックを使用してスタックを実装します。
ここで、PARSING_TABLE は LL(1) テーブルです。しかし、そのような構成で AST をビルドする部分をどのように実装するのだろうか。私は完全な実装を求めるのではなく、実装のアイデアを求めます。
ありがとう !
parsing - Ebnf – これは LL(1) 文法ですか?
ウィキペディアで、EBNF について説明している次のEBNFを見つけました。
さて、パーサーと文法に関する知識が限られているため、これが LL(1) 文法であるかどうかはわかりません。私はそれ用のパーサーを書き込もうとしましたが、 rhsを読み取ろうとすると失敗します。
- LL(1)文法ですか?
- そうでない場合、それを1つに変える方法(可能ですか?)?