mirror of
https://github.com/kanaka/mal.git
synced 2024-10-27 14:52:16 +03:00
8a19f60386
- 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.
35 lines
685 B
Dart
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);
|
|
}
|
|
}
|