1
1
mirror of https://github.com/kanaka/mal.git synced 2024-10-27 14:52:16 +03:00
mal/impls/dart/step1_read_print.dart
Joel Martin 8a19f60386 Move implementations into impls/ dir
- Reorder README to have implementation list after "learning tool"
  bullet.

- This also moves tests/ and libs/ into impls. It would be preferrable
  to have these directories at the top level.  However, this causes
  difficulties with the wasm implementations which need pre-open
  directories and have trouble with paths starting with "../../". So
  in lieu of that, symlink those directories to the top-level.

- Move the run_argv_test.sh script into the tests directory for
  general hygiene.
2020-02-10 23:50:16 -06:00

35 lines
685 B
Dart

import 'dart:io';
import 'printer.dart' as printer;
import 'reader.dart' as reader;
import 'types.dart';
MalType READ(String x) => reader.read_str(x);
MalType EVAL(MalType x) => x;
String PRINT(MalType x) => printer.pr_str(x);
String rep(String x) {
return PRINT(EVAL(READ(x)));
}
const prompt = 'user> ';
main() {
while (true) {
stdout.write(prompt);
var input = stdin.readLineSync();
if (input == null) return;
var output;
try {
output = rep(input);
} on reader.ParseException catch (e) {
stdout.writeln("Error: '${e.message}'");
continue;
} on reader.NoInputException {
continue;
}
stdout.writeln(output);
}
}