2017-10-25 10 views
0

私のプロジェクトでは(https://pub.dartlang.org/packages/petitparser)のpetitparserを使用することを検討しています。文字列として格納されたLispコードを処理するために使用したいと思います。例えばダーツPetitparserは、Lispコードを処理する

、このように与えられたデータ:

(setq age 20) 
(setq livesin "Mississippi") 

そしてStringこのようなLisp式が含まれている:

'(and (< age 21) (string= livesin "Iowa"))' 

にはどうすればいい結果を得ることができますか?

第2に、これは良いアプローチであり、プチパパーの適切な使用ですか?

私はLisp初心者です。

+0

https://github.com/petitparser/dart-petitparser/tree/master/example/lispとhttps://www.dartdocs.org/documentation/petitparser/1.6.1/index.htmlをご覧ください? – coredump

+0

はい、しました。これを指摘してくれてありがとう。私は私の質問でそれを言及すべきだった。私はまた、例題の実装であるispispwebを見ました。 – Hesh

+0

私はダーツを知らず、ここでそれをテストする適切な環境を持っていません。 'lp = new LispParser()'と 'lp.parse(string)'のようなことはしないでください。それは動作しますか?評価者を作成する必要がありますが、それは別の問題です。 – coredump

答えて

1

これは、単純なパーサーとエバリュエータを提供する付属の例で行うことができます。私はそれを実行させるために、少し自分のデータ定義とプログラムで関数名を変更するために必要なことを、

const data = ''' 
    (define age 20) 
    (define livesin "Mississippi") 
'''; 
const program = '(and (< age 21) (= livesin "Iowa"))'; 

void main() { 
    var environment = new NativeEnvironment().create(); 
    evalString(lispParser, environment, data); 
    var result = evalString(lispParser, environment, program); 
    print("Result is $result"); 
} 

注:以下のダーツコードが何をしたいん。ただし、プリミティブをexample/lisp/src/native.dartに再定義することで、ニーズに合わせやすくなります。

コードを解析する方法、環境を操作する方法、およびコードを評価する方法の例については、test/lisp_test.dartを参照してください。

+0

ありがとう!私はあなたの答えに時間を割くことに感謝します。 – Hesh

関連する問題