2017-10-25 3 views
0

Ich denke über die Verwendung von Petitparser für Dart (https://pub.dartlang.org/packages/petitparser) in meinem Projekt. Ich möchte es verwenden, um als Strings gespeicherten Lisp-Code zu verarbeiten.Dart Petitparser zum Bearbeiten Lisp Code

Zum Beispiel angegebenen Daten wie folgt aus:

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

Und ein String, die einen Lisp Ausdruck wie folgt enthält:

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

Wie kann ich ein Ergebnis bekommen?

Zweitens, ist dies ein guter Ansatz, und eine ordnungsgemäße Verwendung von Petitparser?

Beachten Sie, dass ich ein Lisp-Neuling bin.

+0

Haben Sie sich https://github.com/petitparser/dart-petitparser/tree/master/example/lisp und https://www.dartdocs.org/documentation/petitparser/1.6.1/index.html angesehen ? – coredump

+0

Ja, tat ich. Danke, dass du darauf hingewiesen hast. Ich hätte es in meiner Frage erwähnen sollen. Ich habe mir auch Lispweb angeschaut, Implementierung in den Beispielen. – Hesh

+0

Ich kenne Dart nicht und habe keine geeignete Umgebung, um es hier zu testen. Solltest du nicht einfach etwas wie 'lp = new LispParser()' und 'lp.parse (string)' machen? Funktioniert es? Dann müssen Sie einen Evaluator erstellen, aber das ist ein anderes Problem. – coredump

Antwort

1

Sie können dies mit dem mitgelieferten Beispiel tun, das einen einfachen Parser und Evaluator bietet. Die folgende Dart Code tut, was Sie wollen:

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"); 
} 

Beachten Sie, dass ich brauchte etwas die Funktionsnamen in der Datendefinition und Programm zu ändern, es ausführen zu lassen. Durch die Neudefinition der Primitive in example/lisp/src/native.dart sollte es jedoch einfach sein, sich an Ihre Bedürfnisse anzupassen.

Werfen Sie einen Blick auf test/lisp_test.dart für weitere Beispiele zum Parsen von Code, zum Bearbeiten von Umgebungen und zum Auswerten von Code.

+0

Danke! Ich schätze es, dass Sie sich Zeit nehmen, um zu antworten. – Hesh