問題タブ [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.

0 投票する
1 に答える
131 参照

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') = { +, マイナス, ), $ } なのか、私にはよくわかりません。だから誰かが私にこれを説明できるなら、それはクールだろう

0 投票する
1 に答える
176 参照

grammar - LL および LR 文法の認識... パーサーではありません

CFG を見て与えられた場合、それが LL クラスの文法か LR クラスの文法かを判断できますか? Google でこの質問を検索したところ、これらの文法のパーサーがどのように機能するかがわかりましたが、それは私が望んでいるものではありません。どんな援助でも大歓迎です。

0 投票する
1 に答える
103 参照

parsing - この FIRST 関数の説明

LL(1) 文法:

そして、私が読んでいるスクリプトでは、関数FIRST(ε DimList'){#, [}. しかし、どうやって?

私の推測では、(2) の右辺は で始まるεので、イプシロンをスキップしてFIRST(DimList')、(3) と (5) を考慮すると、 に等しいものを{[}とりますが、(4) のために、 をとるFOLLOW(DimList')こともでき{#}ます。

他の方法としては、(2) で始まるため、εイプシロンをスキップして取るがFIRST(DimList')、(2) から FOLLOW(DimList) を取ることもあります...

私はまだ LL(1) 文法の基礎を学んでいますが、最初の方がより理にかなっています。

編集: そしてもちろん、これらのどちらも真実ではない可能性があります。

0 投票する
1 に答える
440 参照

antlr - Antlr: 特定のコンテキストでキーワードを無視する

ANTLR を使用して、英語に似たドメイン固有言語を構築しています。そのキーワードは状況依存です。(私はそれが汚いように聞こえることを知っていますが、プログラマー以外のターゲット ユーザーにとっては非常に理にかなっています。) たとえば、orおよびなどの通常の論理演算子notは、角括弧で囲まれている場合、識別子として扱われる必要があります。 . 私の現在のアプローチは次のようになります。

これは、次のような字句定義と組み合わせると、次のようになります。

警告を生成し"Decision can match input such as "{AND..PROCESS, RPAREN..'with'}" using multiple alternatives: 1, 2"ます。明らかに ANTLR のあいまいさを生み出していますが、解決方法がわかりません。これを修正するにはどうすればよいですか?

0 投票する
1 に答える
1277 参照

parsing - 文法の最初のセットを計算していますか?

私はこの文法を持っており、最初のセットを自分で計算しましたが、示されている方法がわかりにくかったため、作業を表示する方法がわかりませんが、作業を表示する方法ではなく、セットを取得する方法を理解しています.

文法は次のとおりです。

私の最初のセットは次のとおりです。

0 投票する
2 に答える
2295 参照

parsing - スタックで実装された LL(1) パーサー: AST を構築する方法は?

私は現在パーサーを手作業で構築しています。LL(1) パーサーです。現時点では、それは優れた認識機能です。その関数 parse(List tokens) は、tokens が言語のメンバーであるかどうかを決定します。

ここで、その入力に対応する AST を構築したいと思います。ただし、再帰的な降下方法で実装する方法を知っています(すでに実行しています)。つまり、課題として、従来のアルゴリズムのスタックを使用してスタックを実装します。

ここで、PARSING_TABLE は LL(1) テーブルです。しかし、そのような構成で AST をビルドする部分をどのように実装するのだろうか。私は完全な実装を求めるのではなく、実装のアイデアを求めます。

ありがとう !

0 投票する
2 に答える
2071 参照

parsing - Ebnf – これは LL(1) 文法ですか?

ウィキペディアで、EBNF について説明している次のEBNFを見つけました。

さて、パーサーと文法に関する知識が限られているため、これが LL(1) 文法であるかどうかはわかりません。私はそれ用のパーサーを書き込もうとしましたが、 rhsを読み取ろうとすると失敗します。

  • LL(1)文法ですか?
  • そうでない場合、それを1つに変える方法(可能ですか?)?