Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(399)

Side by Side Diff: packages/petitparser/example/lispshell/lispshell.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « packages/petitparser/README.md ('k') | packages/petitparser/example/lispweb/lispweb.css » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 library petitparser.example.lispshell;
2
3 import 'dart:io';
4 import 'dart:async';
5 import 'dart:convert';
6
7 import 'package:petitparser/petitparser.dart';
8 import 'package:petitparser/lisp.dart';
9
10 /// Read, evaluate, print loop.
11 void evalInteractive(Parser parser, Environment env, Stream<String> input,
12 IOSink output, IOSink error) {
13 output.write('>> ');
14 input.listen((String line) {
15 try {
16 output.writeln('=> ${evalString(parser, env, line)}');
17 } on ParserError catch (exception) {
18 error.writeln('Parser error: ' + exception.toString());
19 } on Error catch (exception) {
20 error.writeln(exception.toString());
21 }
22 output.write('>> ');
23 });
24 }
25
26 /// Entry point for the command line interpreter.
27 void main(List<String> arguments) {
28
29 // default options
30 var standardLibrary = true;
31 var interactiveMode = false;
32 var files = new List();
33
34 // parse arguments
35 for (var option in arguments) {
36 if (option.startsWith('-') && files.isEmpty) {
37 if (option == '-n') {
38 standardLibrary = false;
39 } else if (option == '-i') {
40 interactiveMode = true;
41 } else if (option == '-?') {
42 print('${Platform.executable} lisp.dart -n -i [files]');
43 print(' -i enforces the interactive mode');
44 print(' -n does not load the standard library');
45 exit(0);
46 } else {
47 print('Unknown option: $option');
48 exit(1);
49 }
50 } else {
51 var file = new File(option);
52 if (file.existsSync()) {
53 files.add(file);
54 } else {
55 print('File not found: $option');
56 exit(2);
57 }
58 }
59 }
60
61 // evaluation context
62 var environment = Natives.import(new Environment());
63
64 // add additional primitives
65 environment.define(new Name('exit'), (env, args) => exit(args == null ? 0 : ar gs.head));
66 environment.define(new Name('sleep'), (env, args) => sleep(new Duration(millis econds: args.head)));
67
68 // process standard library
69 if (standardLibrary) {
70 environment = Standard.import(environment.create());
71 }
72
73 // create empty context
74 environment = environment.create();
75
76 // process files given as argument
77 files.forEach((file) {
78 evalString(lispParser, environment, file.readAsStringSync());
79 });
80
81 // process console input
82 if (interactiveMode || files.isEmpty) {
83 var input = stdin
84 .transform(SYSTEM_ENCODING.decoder)
85 .transform(new LineSplitter());
86 evalInteractive(lispParser, environment, input, stdout, stderr);
87 }
88 }
OLDNEW
« no previous file with comments | « packages/petitparser/README.md ('k') | packages/petitparser/example/lispweb/lispweb.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698