問題タブ [s-expression]

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 に答える
2288 参照

python - pyparsing からのネストされた辞書出力

私はpyparsingを使用して、次の形式の式を解析しています。

私のテストコードは次のようになります。

次の形式で出力します。

リスト出力は問題ないようです。しかし、その後の処理のために、ネストされた辞書の形式で出力したいと思います。

クラスを試しDictましたが、成功しませんでした。

pyparsingでそれを行うことは可能ですか? または、リスト出力を手動でフォーマットする必要がありますか?

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

c++ - 解析元の元の文字列から、リンクされた s 式の位置を見つけるにはどうすればよいですか?

演算子またはオペランドが期待どおりにフォーマットされていないために Lisp のようなシーケンスの解析が失敗したときに役立つエラーを生成するために、私はsexp.h ファイル リファレンスを読んでいます。

現在、このcparse_sexp関数を使用して、lisp スタイルの式を一連の s-expressionseltオブジェクトに解析しています。

ここpcで、 は型のポインターでpcont_t*expressionですstd::string。次に、このpcポインターを使用して、eltを使用してオブジェクトを調べますpc->last_sexp

ただし、対処方法がわからない値に遭遇した場合は、次のように記述できるようにしたいと思います。

(Operator Operand1 Operand2)行が元の文字列から取られた場所expression

これを実現するには、それぞれのトークンが取得された場所を知る必要があります。sbuffer型内の値を確認できることはわかっpcont_tていますが、元の文字列へのポインタが得られるだけです。lastPos私に現在の位置を与えることになっていますが、文字列の末尾を返すだけです。文字列を使用中に解析して、自分がどこにいるのかを確認するにはどうすればよいですか?

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

parsing - (Prolog) Lisp s-expression を解析して Prolog 用語にする

トークン化されたリストを受け取り、変数が評価された方程式の値と統合された式を返す必要があるパーサーを Prolog で作成しました。

現在、私のパーサーは以下を返しています。

このパーサーを修正する方法を知っている人はいますか? 以下のコードを含めました。

編集:以下はパーサーの私の作業バージョンです:

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

vb.net - VBでリストを逆にする方法は?

コンピューター プログラミング (ビジュアル ベーシック) コースで LISP 式を扱っていますが、ちょっとした質問があります。

vb.net でリストを反転するにはどうすればよいですか?

たとえば、次のように入力するとします。

次の出力を返します。

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

lisp - シンボリック式ストリーム I/O

Common Lisp では、どのようにしてシンボリック式をストリームから読み書きすることができますか? たとえば、無名関数をファイルに書き込み、それを読み取って funcall したい場合があります。

ただし、そのコードは疑わしい出力になります

読み戻そうとすると、エラーが発生します。

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

recursion - 深くネストされたツリーを読み取るとスタック オーバーフローが発生する

ファイルから大量の SEXP をメモリに読み込もうとしていますが、小さな入力では問題なく動作しているように見えますが、より深くネストされた入力では sbcl がスタックを使い果たします。sbcl が単純に超えられないハードな再帰制限 (1000 関数の深さ) があるようです (奇妙なことに、そのスタック サイズが大きくなった場合でも)。例 (コードはこちら):make check-c動作しますがmake check-cpp、以下のようにスタックを使い果たします:

では、なぜ再帰を使用しているのでしょうか。実際にはそうではありませんが、残念ながら組み込み関数(read)は再帰を使用しており、そこでスタック オーバーフローが発生しています。もう1つのオプション(私が取り組み始めたもの)は、read読み取りを再実装する複雑さを避けるために、別のプログラムからフィードしているより制限された構文に依存する反復バージョンを作成することです上記のリポジトリのlispブランチにあります)。

ただし、より標準的なソリューションを希望します。read再帰を回避することにより、深くネストされた構造を解析できるビルトインの代替手段はありますか?

編集:これは、入力データではなく、sbcl 自体の克服できない問題のようです。簡単な例として、次を実行してみてください。

そしてsbclで:

同じ障害が発生します。

編集: について尋ねたところ#sbcl、どうやら制御スタック サイズは実際には新しいスレッドにのみ適用され、メイン スレッドのスタック サイズは他の多くの要因にも影響されるようです。だから私は別のスレッドに読んでみました。それでもうまくいきませんでした。このレポをチェックアウトしてmake check、興味があれば実行してください。