問題タブ [jison]

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

grammar - ブロック構造にインデントを使用する Jison 文法の例を探す

Jisonを使用してブロックのPythonのようなインデントを解析する文法を定義する方法の簡単な例を誰かが持っていますか?

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

grammar - この文法は曖昧ですか?

CoffeeScriptのようにインデントなしで区切り記号をほとんど使用せずに、 Jisonを使用して言語を定義しようとしています。これは私が達成したいことのようなものです:

これは、いくつかのプロパティを持つ 3 つのオブジェクトを定義し、それらを追加します。最初の定義は名前のリストを使用して 2 つのオブジェクトを指定し、2 番目の定義は空白が重要でないことを示していることに注意してください。

名前のリストとプロパティのリストの間に開始記号と終了記号がないにもかかわらず、文法があいまいではないように感じます。文法では、すべての名前リストの後にプロパティ リストが続くことを指定しています。次のようなプロダクションを含む、定義を指定するだけの文法を書くと、これはすべてうまくいくようです。

ここで、文法の式部分の規則を、私が知る限りごく普通の方法で追加します。

Jison は、いくつかの番号付けされた状態のさまざまな先読みトークンの束に対して「複数のアクションが可能」であると不満を漏らしています。リダクション オプションは通常、次のようになります。

文法は明確だと思いますが、どうすればこれをジソンに納得させることができますか? 1 つではなく 2 つのトークンを先読みする必要があるようですが、それは盲目的な推測であり、Jison のドキュメントでは、(まだ?) LL( k ) 文法をサポートしていないと述べています。

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

javascript - JisonパーサーのSyntaxError

ツールの出力を解析するJisonを使用してパーサーを作成しようとしていjavapます。.jisonファイルの内容は次のとおりです。

残念ながら、「jison javap.jison」を実行すると、次のエラーが発生します。

に置き換えてみまし"Classfile"たが、代わりに\w+のエラーが発生します。\\w+

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

bison - 動的パーサー - 別のファイルからトークンを読み取る

次のような新しい言語を解析したいとしましょう。

main.mylang

tags.mylangそして、次のような別のファイルがあります。

実行main.mylangすると出力されます

私が抱えている問題は、mylang開発者が実装したように、「猫」、「犬」、および「ベーコン」が別のファイルで定義されていることです。つまり、事前に文法の一部にすることはできません。

解析中にこれらのタグを文法に動的に追加することは可能ですか? \w+認識されないタグでエラーが発生するようにするため、ワイルドカードなどを追加したくありません。

編集:jisonに基づいた を使用してこれを書いていbisonます。

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

javascript - この文法はどのようにあいまいですか?

Jison で簡単な式パーサーを作成しています。これが私の文法です:

実行しようとすると、次のエラーが表示されます。

ただし、最終的には正しい出力が生成されます。たとえば、2 + 3 * 5 / 7 % 11は に正しく変換され2 + 3 * 5 / 7 % 11;ます。

私の文法は曖昧ではないように見えるのに、なぜジソンは不平を言っているのですか?

更新: @icktoofay が説明したように、これは演算子の結合性の問題です。演算子を非終端記号として解析すると、演算子の優先順位と結合性に関する情報が失われます。したがって、次のように問題を解決しました。

つまり、この文法では、2 項演算子の後にオプションの改行を 1 つだけ使用できます。二項演算子の後に任意の数の改行が続くように書き直すにはどうすればよいですか? また、演算子ごとに 2 つのルールを記述する必要がない方法もあるはずです。

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

javascript - Jison で 0 個以上のトークンをどのように照合しますか?

私は Jison で簡単な式パーサーを作成しており、任意の数の改行を式の二項演算子の後に続けることができます。これまでの私の文法は次のとおりです。

ご覧のとおり、二項演算子ごとに 2 つのルールを記述しています。それは私には非常に冗長に思えます。1 つ以上のトークン ( Kleene plus ) ではなく、 0 個以上のNEWLINEトークン ( Kleene star ) に一致するプロダクションが必要です。ジソンでこれをどのように行いますか?

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

parsing - このシフト/リデュースの競合は Bison のどこから来ているのでしょうか?

Jison (javascript パーサー) で非常に単純な言語を定義することによって、解析のコツをつかもうとしています。バイソンと同じ/非常によく似た構文を受け入れます。

これが私の文法です:

シフト/削減の競合が 1 つ発生しています。ジソンの出力は次のとおりです。

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

jison - 基本電卓内の「IF ELSE」ステートメント

「IF ELSE」ステートメントを使用して独自の電卓を実装しようとしています。基本的な電卓の例を次に示します。

次のような「IF」ステートメントを追加してもわかりません。

パーサーはうまく生成します。では、この IF(5>2)THEN (5+2) ELSE (5*2) のようなステートメントをどのように使用できますか。もちろん、電卓の機能はうまく機能しますが、「IF」は機能しません。