問題タブ [parser-combinators]

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

scala - パーサーコンビネーターを使用して残りの入力を破棄する

ENDトークンまで次の文字列を解析し、残りを無視したいだけです。

使用する

無限ループに入り、OutOfMemoryError になります。私は何を間違っていますか、これを修正するにはどうすればよいですか?

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

scala - Scala パーサー コンビネーターでの演算子の優先順位

演算子の優先順位を考慮する必要がある解析ロジックに取り組んでいます。私のニーズはそれほど複雑ではありません。まず、足し算と引き算よりも掛け算と割り算を優先する必要があります。

例: 1 + 2 * 3 は 1 + (2 * 3) として扱われます。これは簡単な例ですが、要点はわかります。

[優先順位ロジックに追加する必要があるカスタム トークンがいくつかあります。ここで受け取った提案に基づいて追加できる可能性があります。]

演算子の優先順位を扱う一例を次に示します: http://jim-mcbeath.blogspot.com/2008/09/scala-parser-combinators.html#precedencerevisited

他のアイデアはありますか?

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

scala - Scalaパーサーが無限ループでスタックする

私はscalaで単純なパーサーを書き込もうとしていますが、繰り返しトークンを追加すると、Scalaは無限ループでスタックしているようです...

そしてそれを呼び出すためのコード

感謝の気持ちを込めて受け取ったアドバイス

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

scala - Scalaで型に解析する方法

Scalaで、具体的な型階層を徐々に構築するパーサーを作成しようとしています。私は始めました:

大丈夫です。/hello/はクイックトークンに解析されます

次に、クイックトークンを複合式に追加します。クラスがあります

書けると思っていたのに…

しかし、それは機能しません。単語はOption[String]型で、quicktokenはString型であると書かれています。私は何が欠けていますか?

0 投票する
4 に答える
555 参照

scala - ParseResults を他のメソッドに渡すにはどうすればよいですか?

仮パラメータにはどの型を指定する必要がありますparseか? parse内部にカーソルを合わせると と表示されますが、ローカル変数がスコープ内にないため、もちろんそれは のパラメータ タイプとしては機能しませんwhateverval parse: parser.ParseResult[parsing.Program]semanticAnalysisparse

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

parsing - この構造を解析する方法:「name [arg、arg]」とscalaコンビネーターパーサー?

私はこれらのようないくつかの文字列を持っています:

私はそれをscalaコンビネーターパーサーで解析したかったのですが、これは私が何とか得た最高のものです:

で動作しnameますが、動作しませんname[arg]- string matching regex\ z'が期待されていると言いますが、[' found。それを修正することは可能ですか?

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

parsing - Trifectaのレイアウトパーサーを使用する

私は、Haskellのようなレイアウト構文を使用して非常に単純な関数型言語を解析するためにTrifectaを実験しています。Trifecta自体に紹介資料が見つからなかったため、HaddockのドキュメントとParsecでの経験に取り組んでいます。

私が抱えている問題は、Haddockのドキュメントでさえあまり役に立たないため、レイアウト関連のものを使用することです。

次のコードが与えられます:

次のテキストを次のように解析しようとしていますtest

しかし、この解析エラーで失敗します:

しかし、2行目と3行目をコメントアウトすると、機能します。

では、2行目と3行目を含めても解析するにはどうすればよいですか?

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

scala - パス依存型に失敗

あるトレイトで、別のトレイトのメソッドから返されたパーサーを使用するのに問題があります。コンパイラは型の不一致について文句を言いますが、問題はパスに依存するクラスが原因であるように見えます。欲しいものをどうやって手に入れるのかわからない。

そしてエラー:

それぞれの「何か」メソッドは、パスが囲んでいるクラス(OuterparserまたはInnerparser)に固有のパーサー型を定義しています。Outerparserの「quoted」メソッドは、タイプOuterparser.this.Parserのインスタンスを想定していますが、Innerparser#Parserを取得しています。

このクラスまたは他のクラスから取得したパーサーでquotedを使用できるようにしたいと思います。どうやってやるの?

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

parsing - scala のパーサー コンビネーターを使用した段階的な評価

Scala パーサー コンビネーター ライブラリを学んでいます。いくつかの算術式を抽象的な構文ツリーで解析する実用的なパーサーを実験しました。だから私が電話するとき

私のパーサーはすべての入力を解析し、評価を提供します。しかし、どうすれば段階的な評価を行うことができますか?

言う

3 + 4 * 7

それは印刷します

3 + 28

それから

31

別の行で。

私はAPIをスキャンしましたが、そこにあるドキュメントはあまり役に立ちません...助けてくれてありがとう。

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

scala - Scala パーサー コンビネーター: C スタイルのコメントを効率的に解析する

/* ... */Scala パーサー コンビネーターを使用してC スタイルの複数行コメント (つまり、) を (効率的に) 解析する最良の方法は何ですか?

私が関与しているプロジェクトでは、C に似たプログラミング言語を解析しており、複数行のコメントをサポートしたいと考えています。のサブクラスを使用しますがStandardTokenParsers、これは既にそのようなコメントを ( 経由で) 処理していますStdLexical。ただし、このクラスはかなり短い複数行のコメントに対してのみ機能し、それ以外の場合はスタック スペースが不足します。

また、物事をより効率的にするために、独自の空白の定義を提供しようとしました。次のように ( StackOverflow に関する別の質問にRegexParser触発されて)を使用しました。

これにより、状況はわずかに改善されましたが、コメントが数十行を超えるとスタック オーバーフローが発生します。これを改善する方法はありますか?