Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std/os
- import std/streams
- import std/deques
- var strm = newFileStream(paramStr(1), fmRead)
- var stack = initDeque[string]()
- var arr = newSeq[string]()
- proc startEnclosure(token: string) {.discardable.} =
- echo token
- stack.addFirst(token)
- arr.insert(token, 0)
- proc endEnclosure(token: string) {.discardable.} =
- echo token
- discard stack.popFirst
- arr.insert(token, 0)
- if not isNil(strm):
- while true:
- var s = strm.readChar()
- if s == '(':
- startEnclosure("<LIST START>")
- elif s == '#':
- if strm.peekChar() == '(':
- startEnclosure("<LAMBDA START>")
- elif strm.peekChar() == '{':
- startEnclosure("<SET START>")
- elif s == ')':
- if stack.peekFirst == "<LIST START>":
- endEnclosure("<LIST END>")
- elif stack.peekFirst == "<LAMBDA START>":
- endEnclosure("<LAMBDA END>")
- elif s == '[':
- startEnclosure("<VECTOR START>")
- elif s == ']':
- endEnclosure("<VECTOR END>")
- elif s == '{':
- startEnclosure("<MAP START>")
- elif s == '}':
- if stack.peekFirst == "<SET START>":
- endEnclosure("<SET END>")
- elif stack.peekFirst == "<MAP START>":
- endEnclosure("<MAP END>")
- else:
- echo s
- if strm.peekChar() == '\x00':
- break
- strm.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement