diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2025-04-04 20:53:56 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2025-04-04 20:53:56 +0200 |
commit | 9d724f17e813fa344d485329d33b5f5ecf8197a3 (patch) | |
tree | 5061e604ea88a379db975b13c1d20688007cacc8 /cpp.sml | |
parent | 7b29b31648fd737e7bbc007f480b799add91bc6b (diff) |
Functorization
Diffstat (limited to 'cpp.sml')
-rw-r--r-- | cpp.sml | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/cpp.sml b/cpp.sml deleted file mode 100644 index 91f7f82..0000000 --- a/cpp.sml +++ /dev/null @@ -1,95 +0,0 @@ -structure Cpp:> CPP = struct - type tkPos = Stream.pos - - type t = - { streams: Stream.t list, fileInfo: Stream.fileInfo list, - lastPos: tkPos option, firstId: Stream.fileId }; - - datatype tkExp = - Tk of Tokenizer.token | - Id | - NumConst | - StrLiteral | - UnOp | - BinOp | - Op - - type tkExpectedValue = string * tkExp list - - exception StreamTooOld - exception TkExpected of tkExpectedValue - - fun create fname = - let - val stream = Stream.create fname - val info = Stream.convert stream - in - { streams = [stream] , fileInfo = [info], lastPos = NONE, firstId = #1 info } - end - - fun getToken - ({ streams = stream :: tail, fileInfo, lastPos, firstId }: t) = - let - val (tk, stream) = Tokenizer.getToken stream - in - case tk of - NONE => getToken { streams = tail, fileInfo, lastPos, firstId } - | SOME (pos, tk) => - ( tk, { streams = stream :: tail, fileInfo, - lastPos = SOME pos, firstId }) - end - | getToken - { streams = [], fileInfo, lastPos = SOME lastPos, firstId } = - let - val pos = SOME (#1 lastPos, ~1) (* EOF *) - in - (Tokenizer.EOS, {streams = [], fileInfo, lastPos = pos, firstId }) - end - | getToken { streams = [], fileInfo, lastPos = NONE, firstId } = - (Tokenizer.EOS, { streams = [], fileInfo, - lastPos = SOME (firstId, ~1), firstId }) - - fun getLastPos ({ lastPos = NONE, ... }: t) = raise Unreachable - | getLastPos { lastPos = SOME p, ... } = p - - val tkExp2str = fn - (Tk tk) => Tokenizer.token2str tk - | Id: tkExp => "identifier" - | NumConst => "numeric constant" - | StrLiteral => "string literal" - | UnOp => "unary operator" - | BinOp => "binary operator" - | Op => "operator" - - fun prepAndRaise (stream: t) (id, pos) expList = - let - val fileInfo = - case List.find (fn (id', _, _) => id' = id) $ #fileInfo stream of - NONE => raise StreamTooOld - | SOME fileInfo => fileInfo - val pos = Stream.ppos2str $ Stream.pos2pposWithFI (id, pos) fileInfo - in - raise TkExpected (pos, expList) - end - - fun tkExpectedPrint (pos, expList) = - let - fun tkExps2str [e] [] = tkExp2str e - | tkExps2str [e] acc = - (String.concatWith ", " acc ^ " or ") ^ tkExp2str e - | tkExps2str (e :: ec) acc = - tkExps2str ec (tkExp2str e :: acc) - | tkExps2str [] _ = raise Unreachable - in - print pos; - print ":expected "; - printLn $ tkExps2str expList [] - end - - fun debugPrint fname = - let - val stream = create fname - in - () - end -end |