問題タブ [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 に答える
840 参照

python - PyParsing で関数呼び出しをパースする

私は単純な言語を解析しようとしています。問題は、関数呼び出しの解析に伴います。関数呼び出しが式であり、その後に左括弧、引数リスト、および右括弧が続くことを伝えようとしています。私はこのようなものを持っています:

問題は明らかですexpr。左再帰です。しかし、これを解決するために何をすべきかわかりません。私は右再帰スタイルの文法 (別名 PLY、Yacc など) の経験がありますが、まだ左再帰文法を理解しようとしています。

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

compiler-construction - 文法とSLR、LALRに関するいくつかの課題

知っている:

言語が LL(1) 文法によって生成できる場合、その言語は LL(1) であると言われます。LL(1) 文法が

しかし、私は問題に遭遇しました。

なぜ文法

S-> aBDb

B -> ラムダ

D-> dD | ラムダ

なぜこの文法は LL(1) でも SLR でも LALR でもないのですか? 誰か私を説明できますか?

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

parsing - 特殊なケースの解析

私の理解が正しければ、構文解析によって一連のシンボルがツリーに変換されます。私の質問は、標準的な手順 (LR、LL、PEG、..?) を使用して次の 2 つの例を解析することは可能ですか、それとも特殊なパーサーを手動で作成する必要がありますか?

  1. Python ソース コード、つまり空白でインデントされたブロック

パーサーが先頭のスペースの数を追跡し、それらを中括弧に置き換えてブロックを区切るふりをどこかで読んだと思います。標準の解析手法が十分に強力ではないため、それが基本的に必要なのか、それともパフォーマンス上の理由からですか?

  1. PNG 画像形式。ブロックはヘッダーとブロック サイズで始まり、その後にブロックのコンテンツが続きます。

コンテンツにはヘッダーに似たバイトが含まれる可能性があるため、次の x バイトが「解析」されないこと、つまりスキップされることを「認識する」必要があります。これを PEG で表現するにはどうすればよいでしょうか。つまり、「閉じ括弧」はコンテンツの長さで表されます。

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

compiler-construction - 文脈自由文法を LL(1) に変換する

私は次の文法を持っています:

それを LL(1) 文法に変換するにはどうすればよいですか?

左再帰を排除しようとしたので、

また、最初に左因数分解を行い、次に左再帰を排除しようとしたところ、次のような結果が得られました。

しかし、まだ完璧な答えは得られていません。文法はまだLL(1)ではない気がします。助けてください。

0 投票する
0 に答える
119 参照

parsing - 左再帰を持たず、右優先を示す文法を書き直す正式なアルゴリズム

左再帰がなく、右の優先順位を示す文法を書き直すための正式なアルゴリズムまたは手順はありますか。ウィキペディアで説明されている左再帰を排除するための単純なアルゴリズムなど

たとえば、次のアルゴリズムがあるとします。

望ましい出力は次のようになります。

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

parsing - テーブルベースの LL パーサーは、右再帰なしで繰り返しを処理できますか?

LL 再帰降下パーサーが次の形式のルールを処理する方法を理解しています。

先読みトークンが B の FIRST セット内の端末と一致するかどうかに基づいて、ループを続行するかどうかをチェックする単純なループを使用します。ただし、テーブル ベースの LL パーサーに興味があります。この形式のルールはそこでどのように機能しますか? 私の知る限り、このような繰り返しを 1 つで処理する唯一の方法は右再帰を使用することですが、右連想構文木が望ましくない場合は結合性が台無しになります。

現在、LL(1) テーブルベースのパーサー ジェネレーターを作成しようとしていますが、目的の解析ツリーの形状を変更せずにこのようなケースを処理する方法がわからないため、知りたいです。

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

antlr4 - 文法が LL(1) であることを確認する

ANTLR 4 文法が LL(1) であることを確認したい。古いバージョンの ANTLR でそれを行うオプションがあります。ANTLR 4 に似たようなものはありますか?

ドキュメントに目を通しましたが、何も見つかりませんでした。特にオプションのページが不足しているように見えますが、可能なすべてのオプションのリストさえ見つけられませんでした.

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

parsing - LLパーサー文法

私は以下にこの文法を持っており、LLパーサーを使用して解析できるかどうかを調べようとしていますか? そうでない場合は、説明してください。

私が理解していることから、ペアワイズ分離テストに合格するには、2 つのセットの共通部分が空でなければなりません。

しかし、どこから始めればよいかわからず、教科書とhttp://en.wikipedia.org/wiki/LL_parser#Parsing_procedureを調べてきましたが、従うべき例を完全に理解または見つけることができません。これと同様の他の問題を解決する方法を理解するために、手順または手順を確認する必要があります。どんな助けでも大歓迎です。

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

compiler-construction - LL(1) 解析によるあいまいな文法

これを解決するのに問題があります。LL(1) パースで動作するようにするには、次の文法を書き直す必要があります。

S → 名詞 | 名詞と名詞 | M、名詞、および名詞

M → M、名詞 | 名詞

私が気付いた最初の問題は、ヘッダー M を使用したプロダクションで文法が再帰的であったことでした。これを次のように修正します。

M → 名詞 NewPro

NewPro → 名詞 NewPro

しかし、ヘッダー S の生成があいまいであることに気付きましたが、修正方法がわかりません。名詞を「因数分解」しようとしましたが、実際にはわかりません。

助けてください。

回答ありがとうございます。