diff options
feat: Output token list
1 files changed, 56 insertions, 0 deletions
| -rw-r--r-- | src/Token/TokenList.cl | 56 |
diff --git a/src/Token/TokenList.cl b/src/Token/TokenList.cl new file mode 100644 index 0000000..514a8e6 --- /dev/null +++ b/src/Token/TokenList.cl @@ -0,0 +1,56 @@ +class TokenList inherits System { + token: IToken; + next: TokenList; + + init(value: IToken, tail: Object) : TokenList {{ + assert(not (isvoid value), "init", "value argument cannot be void!"); + assert(isvoid token, "init", "List has already been initialised!"); + + token <- value; + if isvoid tail then + void + else + case tail of + tl: TokenList => next <- tl; + o: Object => assert(false, "init", "tail argument can be either a TokenList or void!"); + esac + fi; + + self; + }}; + + push(value: IToken) : TokenList {{ + assert(not (isvoid value), "push", "value argument cannot be void!"); + + if isvoid token + then + token <- value + else if isvoid next + then + next <- (new TokenList).init(value, void) + else + next.push(value) + fi + fi; + self; + }}; + + out() : Object {{ + if isvoid token + then + void + else + out_string("<") + .out_string(token.name()) + .out_string(">") + fi; + if isvoid next + then + void + else { + out_string(" "); + next.out(); + } + fi; + }}; +}; |
