問題タブ [ambiguous-grammar]

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 に答える
167 参照

parsing - あいまいな文法を明確な文法に変換する際に混乱する

あいまいな文法が与えられ、あいまいさをなくすために文法を書き直すように求められます。実際、与えられた文法があいまいである理由がわかりません。

与えられた文法は S -> SS | | | b 、4 つの選択肢があります。

それぞれの選択肢について、文字列をまったく生成しないため D が正しくないこと、文字列 'a' と 'b' のみに一致するため C が正しくないことは既にわかっています。

ただし、答えは A で、正解は BI だと思います。B は S を何度も生成するだけで、B は空の文字列を処理できないため、間違っていると思います。

  1. 与えられた文法があいまいなのはなぜですか?</p>

  2. Bが正しいのにAが間違っているのはなぜですか?

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

shift-reduce-conflict - 皮肉な還元還元問題

私はこの同じ問題をほぼ2週間理解しようとしています。最初はシフト削減エラーでしたが、現在は削減削減問題です。私はそれを非常に多くの方法で試しましたが、今では助けが必要なところまで来ました. 私は多くの言語をコーディングしており、ほぼ 10 年前にコーディングを始めましたが、実際にヘルプを投稿したのはこれが初めてです。

パーサー クラスから BNF 文法を取得した、人気のあるスクリプト エンジンである Angel Script の文法クラスを作成しようとしています。ここで言語リファレンスを見つけることができますhttp://www.angelcode.com/angelscript/sdk/docs/manual/doc_script.html

そして、各ルールのクラス内に、コピーしようとしている BNF 文法のコメントを追加しました。現時点では、私が定義したキーワードを実際には使用していません。競合なしで動作するようになったら、戻ってクリーンアップを試みます。ここに私のクラスがありますhttp://pastebin.com/FydCTqmU

Dll を作成して文法エクスプローラーで実行するだけで、すべてのエラーが表示されます。ほとんどのエラーはすべて同じ問題に起因しているように見えるので、おそらくそれを修正できれば、ほとんどすべてが修正されると思います. 文法をより具体的ではないセクションに分割するのに役立つアプリを作成しましたが、それがより多くのreduce-reduceの問題にぶつかったと思います。

うまくいけばreduce-reduceエラーを通過できるようにコードを圧縮しようとしましたが、まったく同じままのようですが、見た目が雑然としています。誰かが私がそれを正しくするのを手伝ってくれるなら、私は喜んで数百ドルをペイパル経由で送ります. 私はこれを2週間以上続けてきたので、あきらめようとしています。私のメールアドレスは Anth0ny229@live.com です。

shift-reduce から reduce-reduce エラーに変わりました。何をしても問題が発生するようです。頭を包むことができず、本当に助けが必要です。私が言ったように、私は私に電子メールを送るだけで助けのために誰かにお金を払って喜んでいます. 私は、babelua のような Visual Studio 拡張機能を作成して、人々が Visual Studio を使用して Angel Script Scripts を記述できるようにすることを計画しています。また、うまくいけば、デバッグ サポートも追加します。これは素晴らしい追加になると思うので無料になります。したがって、最終的に機能する限り、誰かが何らかの形で支援できる場合は、彼らが報われることを確認して喜んでください. ありがとうございました。

状態 S0 (不十分) 入力に対する削減-削減競合: const 識別子 void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool ? auto :: シフト項目:

アイテムを減らす:

トランジション:

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

grammar - 文脈自由文法 BNF

拡張されていない BNF 文法のヘルプが必要です:

たとえば、文字列 aba、cbc、abacbc は言語に含まれていますが、文字列 abcabc は含まれていません。

これは私がこれまでに持っているものです(正しいですか?間違っている場合は修正してください):

s->asbsc|bsasc|ascsb|ɛ

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

antlr - Xtext 文法の曖昧さ (バックトラッキングが機能しない)

Xtext を使用して、一連の数値を操作するための単純な言語を設計しようとしています。

言語の文字列の例を次に示します。

  • {2,1+6} (数字の 2 と 7 のセット)
  • {1+3, 3+5} + {2..5} (集合 {4, 8} と {2, 3, 4, 5} の和集合)

私は次の文法を使用しています:

MWE2 ワークフローを実行すると、次のエラーが発生します。

mwe2 ファイルでバックトラッキングを有効にしています。

私はそれにこのコードの断片を持っています:

また、mwe2 ファイルで ANTLR に言及している他のフラグメントはありません。

私が使用している Xtext のバージョンは、Xtext Web サイトから入手できる Full Eclipse に統合された Xtext 2.8.0 です。

バックトラッキングが既に有効になっている場合、ANTLR がバックトラッキングを有効にすることを提案するのはなぜですか? 私の文法に何か問題がありますか?

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

swift - Swift はジェネリック コンストラクターをどのように明確にしますか?

次の Swift 式を検討してください

Generic<Foo, Bar>通常、これは、引数を持つコンストラクターへの一般的な呼び出しとして読み取られます(1)

ただし、トークンを少し並べ替えると、2 つの個別の比較を表すこともできます。たとえば、GenericFooが不適切な名前の数値変数である場合です。

ここで観察できることは、このようなジェネリック コンストラクターを使用した式は非常に曖昧であり、人間にとっても曖昧さを解消するのは容易ではないということです。ここでの問題は、Swift にはコンストラクターのキーワードがないnewため、場合によってはメソッド呼び出しと演算子があいまいになることです。したがって、Swift コンパイラ (パーサー) が上記の式をどのように曖昧さをなくすかに興味があります。構文解析の方法はコンテキスト (型、変数、関数) に依存しますか、それともパーサーによって解決できますか?

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

parsing - LALR のあいまいさの解決

最近、 LALRジェネレーターを書くのに十分なほどLALRに頭を悩ませており、そのためのJavaまたはc#スタイルの文法を構築しようとしています(その始まりはここで指定されています)。

車輪の再発明のように、パーサー ジェネレーターを作成するのは余分な労力であることはわかっていますが (なぜ Antlr を使用しないのですか?)、私の目標は、サードパーティのツールチェーンに依存せずに自分自身をコンパイルできるホビー OS をブートストラップすることです。私の問題はジェネレーターではなく、文法にあります。

ステートメントと式のあいまいさを減らす/減らすことに遭遇しています。

dangling-else などの特定の種類のあいまいさを解決する方法は知っていますが、これらのいくつかは直感的ではなく、困惑しています。

これらを解決する最善の方法は何ですか? また、ソリューションの視覚化に役立つプロトタイピング ツールはありますか? それとも、振り出しに戻って、文法用の GLR パーサー ジェネレーターを実装してみるべきでしょうか?

これらのステートメントは合法です。

設定方法は次のとおりです。

したがって、パーサーがステートメントを予期している場合、*LR(k) アイテム セット カーネルはmethod-body -> { * stmts-opt }、状態の完全なアイテム セットは次のようになります。

識別子がシフトされると、次の状態になります。

これは解析または縮小され、次の状態になります。

競合の可能性。nested-name親状態では、とにドットがあるため、先読みは役に立ちませんprimary-expr。よし、ネストされた名前で削減してみましょう:

ここには何も表示されません...では、primary-expr代わりに by を減らすのはどうですか:

++ をシフトすると、次のようになります。

...別のreduce-reduce競合。

(の代わりに をシフトしてみましょうident:

identまたは(をスタックにシフトする場合も同じ問題が発生します。

これらは、私がこれまでに遭遇したものです。basic-nameは よりも優先されるため、 のようなものは と解釈され、実際に関係式である場合はエラーになるとrel-expr想定しています。x < nbasic-name -> ident < type-list *

私の脳は、本当に助けが必要なところまで来ました。

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

xtext - XText: 識別子によるあいまいな文法

あいまいな Xtext 文法に問題がありますが、正しい解決策が見つかりません。

私が得る問題は、RESET ステートメントに RESET するフィールドがいくつかある可能性があることです。ただし、「:=」トークンが見つかった場合、パーサーは代わりに AssignmentStatement の開始を検出する必要があります。構文述語を使用してみましたが、次のようにして文法を明確にすることしかできませんでした。

ただし、お気づきかもしれませんが、次のように、これは予期された動作ではありません。

':=' トークンでエラーを返します。AssignmentStatement に述語マーカーを追加してみました。

また:

しかし、成功しませんでした。エラーはすべての場合にあります:

私はかなり迷っているので、ヒントは大歓迎です。

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

grammar - この YACC 文法を明確にすることは可能ですか? 式: ... | 式式

yacc / bisonで簡単な電卓を書いて​​います。

式の文法は次のようになります。

このように演算子の優先順位を宣言しました。

問題は最後のルールにあります:

5(3+4)(3-24)電卓のように式を記述できるようにしたいので、このルールが必要です。

この文法を明確にすることは可能ですか?