問題タブ [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.
javascript - Jison Google ライク パーサー
演算子とブール演算をサポートする Google のような検索クエリを処理できる Jison を使用してパーサーを作成しました。現在、AND OR 演算子と NOT 演算子の間に空白を受け入れる方法がわかりません。任意の助けをいただければ幸いです。以下に、必要な入力/出力の例をいくつか添付しました。
入力:
- 真 && 偽 || 真実
- ( true ) && ( false || true )
- 真&&偽||真
結果:
1-3. ([真]&&([偽]||[真]))
コード:
bison - リストをエコーするためのyacc再帰法?
yacc 再帰を理解するのに苦労しています。そこで、与えられた番号のリストを単純にエコーしたい最小限の言語を作成しました。ジソンを使用しています。JISON は次のとおりです。
空白で区切られた数字のリストをエコーするには、どのようなアクションが必要ですか?
parsing - 特定の条件下でのみ改行に一致
私は、セミコロンを挿入したjavascriptに似た言語のパーサーを書いています。
と
そしてさえ
同じだ。
今のところ、レクサーは改行 ( \n ) と一致するのは、セミコロンとは異なるトークンの後に出現する場合のみです。1 と 2 のような基本的な状況ではうまく機能しますが、3 番目の状況にどのように対処できますか? つまり、表現の途中で改行が発生します。パーサーを汚染するため(どこにでも改行トークンを使用して代替を挿入する)、毎回改行を一致させることはできません。また、ステートメントターミネータであるため、まったく一致させることもできません。基本的に、ステートメントの末尾の解析中に改行文字またはセミコロンがあるかどうかを何らかの方法で確認するのが最善です。
javascript - json形式のjison開始条件
ドキュメントとフォーラムでの長い検索にもかかわらず、node.js で JSON 形式を使用して Jison開始条件の正しい構文を取得できません。
しかし、残念ながら、完全に機能するサンプルを提供している人はいません。
2 つのタグの間にあるテキストを除外しようとしています。lex では開始条件を使用します。Jisonのドキュメントには、それが機能するはずだと書かれています。それにもかかわらず、Jison のエラー メッセージはあまり直感的ではないため、先に進むための実用的なサンプルを見つけていただければ幸いです。
誰にも解決策がありますか?
私の現在のサンプルは失敗します
/node_modules/jison/node_modules/jison-lex/regexp-lexer.js:42 startConditions[条件[k]].rules.push(i);
bison - JISON で文字列を定義する方法
DSL を書き始めたばかりで、JISON ( http://zaach.github.io/jison ) を使用したいと考えています。文法構文を学習しようとしていますが、二重引用符で文字列を指定する際に問題が発生しています。
私がうまくいくと思うのは:
... 多分:
この最初のものは (基本的に) まったく機能しませんが、2 番目のものは少し機能します。文字列が見つかった場合、出力される値にはエスケープされた二重引用符が含まれます。
JISON/BISON/BNF 文法定義の学習に役立つ優れたリソースはありますか? 私は周りを見回してきましたが、私を助けるものを見つけることができませんでした; コンプ/科学専攻ではありません。シンプルなものやもっと充実したものを見逃しているだけですか?
いくつかのコンテキストについて:
単純な条件を解析するための単純な DSL を定義しようとしています。
bison - JISON でルールの多くのインスタンスを取得するにはどうすればよいですか
私は JISON ( http://zaach.github.io/jison ) を使用しており、学習しながら学習しています。パーサーが停止し、最初の一致を超えて続行しないという問題が発生しています。おもう。これが私の文法定義です:
...そして私の入力例:
結果の "AST" に 2 つのエントリが表示されると予想されますが、取得できるのは最初の 1 つだけです。どんな助けでも大歓迎です。
jison - Jison 電卓パーサーがシンボリックな結果を返すようにする簡単な方法はありますか?
Jison パーサーは計算結果を返します。
シンボリック式を返すことを望みます:
と
と
javascript - 入れ子になった括弧を JISON と一致させるが無視する
テンプレートシステムの文法に取り組んでいます。ビルドで問題が発生しましたが、この問題を解決する方法がわかりません。私が行っていることを正確に強調するために、テスト ケースを簡略化しました。
文字列の例:
(foo)
-作品(foo())
- 失敗Expecting 'parenEnd', got 'parenInterior'
foo (foo) bar
foo (foo(function() { console.log('stuff'); })) bar
foo (foo.bar.baz("stuff")) bar
ルールは、括弧内には何でも、どんな文字でも入れるというものです。検証する必要はありません。また、それらが適切な形式に一致していることを確認する必要もありません。一方、私の理解では、パーサーが機能するためには、開始と終了(
を追跡する必要があり)
ます。そうしないと、レクサーは、括弧内のステートメントがどこで始まり、別のステートメントがどこで終わるかを知ることができません(foo()) (bar)
。それを追跡するために、私はparen
開始条件を使用しています。この開始条件は、paren ステートメント内で括弧がヒットするたびに値をインクリメントし、閉じ括弧の場合は値を削除します。
問題は、それが機能していないことです。主な原因は、私のルールにまったく当てはまらないように見えるにも<paren>")"
かかわらず、<paren>"("
うまくルールに当てはまっていることです。構文的には同じように見えますが、一方が機能し、もう一方が機能しないのはなぜですか?
文法