Index: packages/petitparser/example/lispweb/lispweb.dart |
diff --git a/packages/petitparser/example/lispweb/lispweb.dart b/packages/petitparser/example/lispweb/lispweb.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..32e25ab325459f4ae4d3ca226726aef7b20b5914 |
--- /dev/null |
+++ b/packages/petitparser/example/lispweb/lispweb.dart |
@@ -0,0 +1,35 @@ |
+library petitparser.example.lispweb; |
+ |
+import 'dart:html'; |
+import 'package:petitparser/lisp.dart'; |
+ |
+void inspector(Element element, Environment environment) { |
+ var result = ''; |
+ while (environment != null) { |
+ result = '$result<ul>'; |
+ for (var symbol in environment.keys) { |
+ result = '$result<li><b>$symbol</b>: ${environment[symbol]}</li>'; |
+ } |
+ result = '$result</ul>'; |
+ result = '$result<hr/>'; |
+ environment = environment.owner; |
+ } |
+ element.innerHtml = result; |
+} |
+ |
+void main() { |
+ var root = new Environment(); |
+ var native = Natives.import(root); |
+ var standard = Standard.import(native.create()); |
+ var environment = standard.create(); |
+ |
+ var input = querySelector('#input') as TextAreaElement; |
+ var output = querySelector('#output') as TextAreaElement; |
+ |
+ querySelector('#evaluate').onClick.listen((event) { |
+ var result = evalString(lispParser, environment, input.value); |
+ output.value = result.toString(); |
+ inspector(querySelector('#inspector'), environment); |
+ }); |
+ inspector(querySelector('#inspector'), environment); |
+} |