問題タブ [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/Bison 文法内のトークンの行番号を取得する
文法内のトークンの行番号をどのように取得すればよいのでしょうか。次の文法があるとします。
MINUS トークンの行番号を取得するには? 私は jison 内でレクサーを使用していませんが、レクサーをオーバーライドして lex ファイルから渡します。
呼び出すことができることに気付きyylineno
ましたが、文法内の異なるトークンに異なる行番号があり、jison ファイル内の特定のトークンの行番号のみが必要な場合はどうでしょうか。多分何かのような$1.yylineno
?どうもありがとうございました!
javascript - ジソンは私のルールの 1 つを無視します
私はジソンを使おうとしています。
これが私の文法です:
解析しようとすると、返されるgoto http://www.google.com then goto http://www.bing.com
だけです。[ 'l1', { cmd: 'goto', url: 'http://www.google.com' } ]
両方の goto コマンドが返されることを期待しています。
文法を理解するのに何か助けはありますか?
python - PLY で 1 つのトークンに対して複数のルールを処理する方法
私はjisonファイルを扱っており、python PLYのlexモジュールを使用してパーサージェネレーターに変換しています。
この jison ファイルでは、特定のトークンに複数のルールが関連付けられていることに気付きました。たとえば、 tokenCONTENT
の場合、ファイルは次の 3 つのルールを指定します。
COMMENT
別のケースでは、トークンに複数のルールがあります。
異なる州に適用されるルールを区別するのは簡単に思えますが、同じ州に適用される場合はどうでしょうか?
ply.lex を使用して、このジソンを Python ルールに変換するにはどうすればよいですか?
編集
参考までに、この jison ファイルは handlebars.js ソース コードの一部です。参照: https://github.com/wycats/handlebars.js/blob/master/src/handlebars.l
jison - jison オブジェクトを文字列に戻す
そこで、基本的に SQL where ステートメントのサブセットである検索クエリ言語用の .jison ファイルを作成しました。そのファイルはここで見ることができます:
https://gist.github.com/ryanzec/7d1c8100d1b5f03c0a17
文字列を JSON オブジェクトに変換するときに期待どおりに動作するようになりました。今、私はドキュメントを読みましたが、これについて何も見つけることができませんが、出力された JSON オブジェクトを取得して、それを文字列に簡単にコンパイルすることは可能ですか、それともそのプロセスを手動で記述する必要がありますか?
javascript - Jison / Flex: 2 つのトークンの間で何か (.*) をキャプチャしようとしていますが、問題があります
私は現在、rabl とは異なり、小さな小さな DSL に取り組んでいます。ルールの 1 つの実装に苦労しています。問題に入る前に、構文/文法について少し説明します。私の小さな言語では、プロパティ、オブジェクト/配列ブロック、またはカスタム ブロックを定義できます (これらはすべて、json オブジェクト/配列を構築するために使用されます)。「カスタム ブロック」は、私の標準的な式 (プロパティ、オブジェクト/配列ブロックなど) または JavaScript を含むブロックのいずれかです。これらの表現は次のように書かれています -
私が直面している問題は、カスタム スクリプト ノードにあります。JISONがブロック内のものを適切にキャプチャできるように、スクリプトトークンを非常に難しい定義にしています。私のレクサーでは、現在...
その SCRIPT トークンは基本的に、(u) 以降の終了トークン (通常はブロックを終了する) まで (およびそれを含む) に一致します。私の通常のブロック ターミネータ (end) は、実際にはスクリプト トークンの一部であり、完全にハッキリしているため、これは本当に嫌いです。残念ながら、(..) と end の間の何かをキャプチャするより良い方法を見つけることができません。「;」で終わるものをすべてキャプチャする正規表現を作成しようとしましたが、DSL コードに複数のスクリプト ノードがある場合に問題が発生します。キャプチャの一部として「end」キーワードを含めることによってのみ、これを機能させることができました。
私の問題を解決するための洞察をいただければ幸いです。問題を明確に説明していない場合はお知らせください。明確にするために最善を尽くします。よろしくお願いします!
また、文法をきれいにする方法についてのアドバイスも喜んで受け入れます。私はまだこのことにかなり慣れていないので、今は自分のものがめちゃくちゃになっているように感じます :)
jison - jison の %lex および /lex 行は何ですか?
以下のコード スニペットは、http: //zaach.github.io/jison/demos/calc/および jison ドキュメント ページにあります。jison、lex、flex のドキュメントを読んだ後でも、%lex と /lex の構文を完全には理解していません。ジソンスキャナージェネレーターに固有のものですか? 後でドキュメントに示されているjson出力を提供する唯一の機能であることを意味しますか? ジソンのドキュメントではその目的が明示的に説明されておらず、フレックス/レックスの規則ではそのような構文が許可されていないように見えるため、私が尋ねるだけです。
javascript - Jisonを使用して簡単なスクリプトを作成/別の言語に翻訳する
非常に単純なスクリプト構文の「インタープリター」を作成しようと、Jison と遊んでいます (これは個人的ないじりプロジェクトのためであり、ビジネスケースではありません!)
コンパイラを作成しなければならなくなってから約 20 年が経ちましたが、いくつかの概念を理解していないだけだと思います。
私が考えているのは、1 行に 1 つずつ、非常に単純なステートメントのプログラムを Jison に渡し、アクションを実行する Javascript ステートメントのストリームを取得することです。
私はこれを間違って見ているかもしれません-解析中に実際にアクションを実行する必要があるのでしょうか? しかし、これは正しく聞こえません。
とにかく、私が持っているのは(私はこれをオンラインで試していますhttp://zaach.github.io/jison/try/)
したがって、入力の場合:
...私が欲しい:
私が得ているものは次のとおりです。
この種の単一の結果を取得することは理にかなっていますが、出力の構築を進めるために何をすべきかわかりません。
javascript - Jison/Bison を使用した文字列の解析
Jison (Bison 構文を使用する Javascript パーサー ジェネレーター) の使用方法を学ぼうとしています。
次のようなコードがあります。
string が渡された場合、およびindex()
string が渡された場合に返されるパーサーを作成しようとしています。(基本的に、メソッド呼び出しを含む文字列を解析する必要があります)。a
blah(2, 'aba')
b
私は Jison によって提供された例から適応しようとしてきましたが、解析がどのように機能するかを理解していないことが妨げになっています!
これが私の文法ファイルです:
明らかに、まだ完全ではありません。括弧を認識しません。パーサーにこの文字列を渡す簡単な例から始めます{{index}}
。現在のパーサーにこれを与えると、 が返されます}}
。私の文法の(間違いなく間違った)理解に基づいて、私はそれが返されることを期待していindex
ます.
私は何を間違っていますか?
javascript - jisonで追加の入力を「parse」に渡すにはどうすればよいですか?
文字列を解析したいのですが、この文字列には、実行時に解決される変数への参照が含まれている可能性があります。理想的には、これらの変数とその値のハッシュを parse 関数の 2 番目の引数として渡したいと思います。
現在、sed -i '' 's/parse: function parse(input) {/parse: function parse(input, in_data) { data = in_data;/' grammar.js
grammar.jison から grammar.js をビルドして実行していますが、これは最適なソリューションとは言えません。これを行うための推奨される方法は何ですか?
私のジソン文法では、次のようなものがあります。
そしてモジュールセクションで:
data
実行時にハッシュを渡したいので、次のようにします。
javascript - JISON (Parser Generator) でユーザー定義関数を作成するには?
代入機能を備えた抽象構文木計算機の作成は既に完了していますが、UDF をどのように実行できるかわかりません。
「funcasgn」と呼ばれる新しい関数を追加し、定義済み関数をある程度解析することを計画しました。
ただし、 defined-function の引数 (名前とサイズの両方) は任意であり、ユーザーが関数を呼び出すと、パーサーはそれらの引数に値を割り当てる必要があります。
何か案は?