問題タブ [lemon]

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 投票する
3 に答える
324 参照

c++ - パーサー生成コードのデバッグ

Lemon Parser を使用してパーサー コードを生成しました。生成されたコードをデバッグできません。コントロールには、現在実行中のステートメント以外のソース コードが表示されます。ブレークポイントがずれています。gdb と Visual C++ を試してみました。どちらも同じ問題を抱えています。デバッグ方法を教えてください。

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

parsing - レモンLALRパーサーの簡単な文法

私はしばらくの間これで立ち往生しています。私は次のような単純なものを解析したいと思います:

好きなもの:word1 word2 .. wordN嫌いなもの:word1 word2 .. wordN

Lemon+Flexを使用しています。現時点では、私の文法は次のようになっています。

ただし、これは最初の2単語でのみ機能します。明らかに、おそらく再帰的定義で、私は何か間違ったことをしていますか?どんな頭を上げても大歓迎です:)

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

css - Lemon Parser Generator によるあいまいな文法

したがって、基本的には、PEAR パッケージ PHP_LexerGenerator および PHP_ParserGenerator によって生成されたレクサー/パーサーを使用して、PHP で構造 CSS コードを解析したいと考えています。私の目標は、次のようなファイルを解析することです。

疑似クラスがない限り、これで問題ありません。疑似クラスを使用すると、 のように要素に:CSS 名 ( )を追加できます。やや怠惰なため、パーサーは有効な疑似クラスのリストを持たず、クラス名としてすべてを受け入れます。[a-z][a-z0-9]*a.menu:visited

私の文法(すべての特殊なケースと空白を無視して)は次のようになります。

さて、次を解析しようとすると

<name>パーサーは、二重コロンの後に a が続くことを期待していると不平を言います。そのため、 を として読み取ろうとしますsimple:( <selector>SO の構文強調表示を見てください)。

<definition>パーサーがルールを試すのに十分なバックトレースができないのは私のエラーですか? それとも、レモンはこれを表現するのに十分なほど強力ではありませんか? もしそうなら、パーサーがこの文法で動作するようにするにはどうすればよいですか?

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

php - レモン文法の問題(優先?)

関数呼び出しをサポートするために作成した単純な文法に問題があります。
Greg によるレモンベースの PHP_ParserGenerator を使用しています。

これは、文法の関連部分です。

パーサーをコンテキストで初期化しarray('user' => array('name' => 'Dennis')); 、次のコードを実行すると:

$resultデニス」です。人生は素晴らしい。

しかし、関数呼び出しの引数として CONTEXT_REFERENCE を指定すると、機能しません。

$resultus3r.nam3」です。期待したほどではありません。記録として、予想される出力はもちろん「D3nnis」です。(user.nameは最初に文字列 'Dennis' に置き換えられ、その後関数に渡されstr_replace()ます)。

優先度に関係があると思います。しかし、これを行うために何を変更すればよいかわかりません。非常にまばらな Lemon のドキュメントはあまり役に立ちません。

どんな助けでも大歓迎です!ありがとう

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

parsing - Lemon パーサーで変数を使用しますか?

Lemon パーサー駆動のアプリで数学変数を許可したいと考えています。たとえば、ユーザーが x^2+y を入力した場合、これを x と y の値の 100000 の異なるペアに対して評価できるようにしたいと考えています。うまくいけば、毎回再解析する必要はありません。私が考えることができる唯一の方法は、パーサーにオブジェクトのツリーを生成させ、入力が与えられたときに式を評価することです。より良い/より簡単な/より速い方法はありますか?

ここでは、パフォーマンスが問題になる場合があります。しかし、コーディングのしやすさとコードの維持にも気を配っています。

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

php - レモン用の「hello world」パーサー

単純な "hello + world" を解析するレモン パーサー (それぞれ PEAR の PHP_LexerGenerator) 用の y ファイルを作成するために、何時間もかけて最善を尽くしています。

私はこの (ドイツ語) チュートリアルを使用しました。はい、電卓のチュートリアルがあると便利ですが、最後に、より複雑なもの (「変数」を使用) を解析したいと思います。

この「言語」の解析/トークン化「hello + world」の定義は何ですか?

これは私が試した他の多くのことの中でもあります:

IDENT の代わりに、VALUE、string なども試しました... SQLite/parser.y ファイルでさえ役に立ちませんでした。

ご協力いただきありがとうございます。

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

parsing - 式呼び出しとの Shift/Reduce 競合

この単純なパーサーを Lemon を使用してコンパイルしようとすると、競合が発生しますが、どのルールが間違っているのかわかりません。binaryexpression または callexpression を削除すると、競合がなくなります。

[編集] LParenthesis に左側の結合性を追加すると、競合が解決されました。ただし、それが正しいことかどうかは知りたいです。一部の文法 (fe C++) では、構築演算子 '()' と呼び出し演算子 '()' の優先順位が異なることがわかりました。だから私は正しいことについて確信が持てません。

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

parsing - レモンパーサジェネレータを使用した「期待されるトークン」

構文エラーが発生したときに「期待されるトークン」リストを生成する既知の方法はありますか?パーサジェネレータとしてレモンを使用しています。

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

grammar - この文法が矛盾するのはなぜですか?

LALR(1)パーサージェネレーターであるLemonでコンパイルされます。

エラーメッセージは次のとおりです。

デバッグ出力は次のとおりです。

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

javascript - SQLite3 用の JavaScript SQL パーサーの生成 (Lemon? ANTLR3? を使用)

ここ数週間、私はSQLステートメントを解析して扱いやすいものにするという美しい世界に飛び込んできましたが、許可されたすべてのトークン/フォーマットを適切に処理するには、おそらく完全なレクサー/パーサーが必要になることがわかりました。同じこと。

私は主に create table ステートメントに興味がありますが、完全な汎用パーサーはさらに優れているでしょう。これは、Web 上の誰もまだこれを持っていないようです。

私はコンピューターの卒業生ではありませんが、独学なので、これは私にとってかなりの学習曲線です。私が取った手順は次のとおりです。

  1. 正規表現でSQLを解析する
  2. 失敗しました。正規表現を修正してください
  3. さらに悪いことに、SQLite ソースを掘り下げて、SQLite 固有のプロジェクトである Lemon パーサーを使用していることを確認します。
  4. 手動でjsに変換できると考えて、Lemon + PHPパーサーを機能させてみてください。(失敗した)
  5. Emscripten に、Lemon で生成された C のパーサーを動作させるようにしてください (依存関係の地獄、失敗しました)。
  6. 他のパーサー/レクサー ジェネレーターを検索します。ANTLR3 に注意してください。
  7. 出力形式を変更し、エラーをバックトレースすることによって、 Sqljet 言語ファイルを JavaScript に変換するために昼夜を問わず試みます。

私は優れたAntlrWorks GUI を使用して何が問題なのかを突き止めようとしましたが、壊れているのが Javascript スタックなのか、Java スタックなのか、それとも .g 形式が v2 の古い形式なのかはわかりません。

適切な再利用可能な Sqlite パーサーを生成するための正しい方向性を教えてくれるパーサー/レクサー ジェネレーターの経験を持つ人はいますか? mysql と pl/sql の両方のパーサーを JavaScript で生成できるようです。それは、sqlite .g 形式を更新する必要があるということですか?