From c4d1636b2f0faf6bf9a600a32d0e0902e2c4ed90 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 24 Mar 2021 17:24:35 +0100 Subject: [PATCH] SML: Step 0 --- Makefile.impls | 3 ++- impls/sml/Makefile | 13 +++++++++++++ impls/sml/main.sml | 1 + impls/sml/run | 2 ++ impls/sml/step0_repl.sml | 23 +++++++++++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 impls/sml/Makefile create mode 100644 impls/sml/main.sml create mode 100755 impls/sml/run create mode 100644 impls/sml/step0_repl.sml diff --git a/Makefile.impls b/Makefile.impls index e75a4c1c..0bf77e92 100644 --- a/Makefile.impls +++ b/Makefile.impls @@ -36,7 +36,7 @@ IMPLS = ada ada.2 awk bash basic bbc-basic c chuck clojure coffee common-lisp cp elisp elixir elm erlang es6 factor fantom fennel forth fsharp go groovy gnu-smalltalk \ guile haskell haxe hy io janet java js jq julia kotlin livescript logo lua make mal \ matlab miniMAL nasm nim objc objpascal ocaml perl perl6 php picolisp pike plpgsql \ - plsql powershell prolog ps python python.2 r racket rexx rpython ruby rust scala scheme skew \ + plsql powershell prolog ps python python.2 r racket rexx rpython ruby rust scala scheme skew sml \ swift swift3 swift4 swift5 tcl ts vala vb vhdl vimscript wasm wren yorick xslt zig step5_EXCLUDES += bash # never completes at 10,000 @@ -173,6 +173,7 @@ rust_STEP_TO_PROG = impls/rust/$($(1)) scala_STEP_TO_PROG = impls/scala/target/scala-2.11/classes/$($(1)).class scheme_STEP_TO_PROG = $(scheme_STEP_TO_PROG_$(scheme_MODE)) skew_STEP_TO_PROG = impls/skew/$($(1)).js +sml_STEP_TO_PROG = impls/sml/$($(1)) swift_STEP_TO_PROG = impls/swift/$($(1)) swift3_STEP_TO_PROG = impls/swift3/$($(1)) swift4_STEP_TO_PROG = impls/swift4/$($(1)) diff --git a/impls/sml/Makefile b/impls/sml/Makefile new file mode 100644 index 00000000..dec68eef --- /dev/null +++ b/impls/sml/Makefile @@ -0,0 +1,13 @@ +STEPS = step0_repl.sml + +STEP_BINS = $(STEPS:%.sml=%) + +all: $(STEP_BINS) + +$(STEP_BINS): %: %.sml + mosmlc $< main.sml -o $@ + +clean: + rm -f $(STEP_BINS) *.ui *.uo + +.PHONY: all clean diff --git a/impls/sml/main.sml b/impls/sml/main.sml new file mode 100644 index 00000000..3fef5bda --- /dev/null +++ b/impls/sml/main.sml @@ -0,0 +1 @@ +val _ = repl () diff --git a/impls/sml/run b/impls/sml/run new file mode 100755 index 00000000..8ba68a54 --- /dev/null +++ b/impls/sml/run @@ -0,0 +1,2 @@ +#!/bin/bash +exec $(dirname $0)/${STEP:-stepA_mal} "${@}" diff --git a/impls/sml/step0_repl.sml b/impls/sml/step0_repl.sml new file mode 100644 index 00000000..15ae0c3c --- /dev/null +++ b/impls/sml/step0_repl.sml @@ -0,0 +1,23 @@ +fun READ s: string = + s + +fun EVAL s: string = + s + +fun PRINT s: string = + s + +fun rep s: string = + (PRINT o EVAL o READ) s + +fun repl () = + let open TextIO + in ( + print("user> "); + case inputLine(stdIn) of + SOME(line) => ( + print(rep(line) ^ "\n"); + repl () + ) + | NONE => () + ) end