Index: packages/petitparser/example/lispshell/lispshell.dart |
diff --git a/packages/petitparser/example/lispshell/lispshell.dart b/packages/petitparser/example/lispshell/lispshell.dart |
deleted file mode 100644 |
index 9ef6e51c5386e661da1934e06451193a72aa03ed..0000000000000000000000000000000000000000 |
--- a/packages/petitparser/example/lispshell/lispshell.dart |
+++ /dev/null |
@@ -1,88 +0,0 @@ |
-library petitparser.example.lispshell; |
- |
-import 'dart:io'; |
-import 'dart:async'; |
-import 'dart:convert'; |
- |
-import 'package:petitparser/petitparser.dart'; |
-import 'package:petitparser/lisp.dart'; |
- |
-/// Read, evaluate, print loop. |
-void evalInteractive(Parser parser, Environment env, Stream<String> input, |
- IOSink output, IOSink error) { |
- output.write('>> '); |
- input.listen((String line) { |
- try { |
- output.writeln('=> ${evalString(parser, env, line)}'); |
- } on ParserError catch (exception) { |
- error.writeln('Parser error: ' + exception.toString()); |
- } on Error catch (exception) { |
- error.writeln(exception.toString()); |
- } |
- output.write('>> '); |
- }); |
-} |
- |
-/// Entry point for the command line interpreter. |
-void main(List<String> arguments) { |
- |
- // default options |
- var standardLibrary = true; |
- var interactiveMode = false; |
- var files = new List(); |
- |
- // parse arguments |
- for (var option in arguments) { |
- if (option.startsWith('-') && files.isEmpty) { |
- if (option == '-n') { |
- standardLibrary = false; |
- } else if (option == '-i') { |
- interactiveMode = true; |
- } else if (option == '-?') { |
- print('${Platform.executable} lisp.dart -n -i [files]'); |
- print(' -i enforces the interactive mode'); |
- print(' -n does not load the standard library'); |
- exit(0); |
- } else { |
- print('Unknown option: $option'); |
- exit(1); |
- } |
- } else { |
- var file = new File(option); |
- if (file.existsSync()) { |
- files.add(file); |
- } else { |
- print('File not found: $option'); |
- exit(2); |
- } |
- } |
- } |
- |
- // evaluation context |
- var environment = Natives.import(new Environment()); |
- |
- // add additional primitives |
- environment.define(new Name('exit'), (env, args) => exit(args == null ? 0 : args.head)); |
- environment.define(new Name('sleep'), (env, args) => sleep(new Duration(milliseconds: args.head))); |
- |
- // process standard library |
- if (standardLibrary) { |
- environment = Standard.import(environment.create()); |
- } |
- |
- // create empty context |
- environment = environment.create(); |
- |
- // process files given as argument |
- files.forEach((file) { |
- evalString(lispParser, environment, file.readAsStringSync()); |
- }); |
- |
- // process console input |
- if (interactiveMode || files.isEmpty) { |
- var input = stdin |
- .transform(SYSTEM_ENCODING.decoder) |
- .transform(new LineSplitter()); |
- evalInteractive(lispParser, environment, input, stdout, stderr); |
- } |
-} |