問題タブ [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.
parsing - Jisonで新しい行を検出するには?
次のようなJisonコードがあります。
これは現時点での私の入力の様子です (私が計画している最も基本的な構造から始めて、そこから構築したいと考えています):
私が抱えている問題は、改行が検出されないことです。それは常に に入り、line content
決して に入りませんline NL content
。後で、次のようなものを解析したいと思います。
将来、これはもう少し複雑になるでしょうが、私の最初のアイデアは、行ごとに分割することでした (多くの場合、新しい行は区切り文字として機能します)。私はこのことにまったく慣れていないので、これを解決する方法について完全に間違った考えを持っている可能性があります。だから私の質問は、新しい行をどのように検出するのですか? また、私がやろうとしていることに対するより良いアプローチがあれば、どんなアドバイスも大歓迎です。ありがとう。
parsing - Jison の構文エラーが「伝播」されないのはなぜですか?
これは私が持っているコードです:
この種のコードを解析するために使用されます。
この種の JSON に:
ただし、構文エラーは発生しません。Jison デモに移動して解析しようとすると5*PI 3^2
、次のエラーが発生します。
これは期待されています。しかし、解析したいコードの最後の行を変更すると:
のようなものに
次のエラーが表示されます。
これを、次のような生成されたパーサー コードまでたどりました。
したがって、これにより、コードの構造と解析の処理方法に何か問題があると信じるようになりますが、それが何であるかはわかりません。
エラー回復と関係があるようです。それが正しい場合、それはどのように使用されることになっていますか? ソース ルートに至るまで、すべての要素に「エラー」ルールを上向きに追加する必要がありますか?
parsing - 段落を検出する単純な JISON パーサー
GOD SAKEのために!! 段落を含む文書を認識する簡単なジソン文法の書き方??? 私は次の文法を使用しています:
そして、私が使用しているテストのために:
私の文法からわかるように、私が望むのは、段落が単語の配列になったことです。
JISON Web サイトでこれを試してみると、次のことがわかります。
私が期待しているのは
誰か助けてくれませんか????
parsing - バイソンシフト/シンプルな呼び出し式/ラムダ文法で競合を減らす
なぜそれが起こっているのか、そしてそれを解決する方法がわからないというシフト/リデュースの競合があります。
この文法を考えると:
このような式を解析できるようにしたい (網羅的ではない):
しかし、ここでシフト/削減の競合を受け取ります:
シフト/リデュースがいつ発生するかを理解していると思っていましたが、これは私を逃れているので、教育を受ける必要があります.
使用可能な優先順位ディレクティブについて詳しく調べてleft, right, precedence, nonassoc
みましたが、それらを使用してもあいまいさが解決されず、何か間違ったwarning: useless precedence and associativity
ことをしている. 答えが他の人にとって明らかであることを願っています。
最初はこれが Lambda で始まり CallExpressions で終わるという事実に関連していると思っていました()
が、これらのトークンを競合しないように変更しても違いはありません。
/フェイスパーム
javascript - Jison (または Bison) を使用した文字列のペアのトークン化と解析
次のようなファイルを解析するために、Jison (Bison の node.js 実装) を使用してパーサーを構築しようとしています。
目標
これは、リダイレクト パス/URL を格納するファイルです。ユーザーをリダイレクトする方法を知る必要がある場合に、このファイルを参照する他のスクリプトがあります。目標は、誰かがファイルを保存しようとするたびに実行できるパーサーを開発することです。そうすれば、常に適切にフォーマットされていることを確認できます。
基本的に、---
ブロック内のすべてと空行は無視されます。残りの各行は、「リダイレクト レコード」を表します。
「リダイレクト レコード」ごとに、次の構造が必要です。
INPUT_URL_OR_PATH <space> OUTPUT_URL_OR_PATH
つまり、2 つの文字列を区切るには単一のスペースが必要です。
これまでに行ったこと
私は文法/解析に非常に慣れていないので、ご容赦ください。
私がスケッチした言語文法は次のようになります。
端子記号にはEOF
、INPATH
、 、SPACE
、が含まれOUTPATH
ます。
残念ながら、レクサーの開発に問題があるため、まだ実装できる段階にありません。
これは私のjison
ファイルがどのように見えるかです:
明らかに、私はまだ終わっていません。私は現在、同時にいくつかのことに行き詰まっています。
行き詰まっていること
- 空行をスキップできること。
- 、、、
INPATH
およびSPACE
のトークンOUTPATH
化。 - 右再帰とは対照的に、言語文法セクションで左再帰を使用します (違いは何ですか? 私はそれを正しく行っていますか? ここで最良のオプションは何ですか?)。
言い換えれば、私は自分が何をしているのか分からず、実際に助けが必要なのです。
編集さらに調査を行い、最終的には自分の質問に答えたいと思います。