diff options
feat!: Add basic lexer components
1 files changed, 36 insertions, 0 deletions
| -rw-r--r-- | src/StringConsumer/StringConsumerEngine.cl | 36 |
diff --git a/src/StringConsumer/StringConsumerEngine.cl b/src/StringConsumer/StringConsumerEngine.cl new file mode 100644 index 0000000..dc7e202 --- /dev/null +++ b/src/StringConsumer/StringConsumerEngine.cl @@ -0,0 +1,36 @@ +class StringConsumerEngine inherits System { + consumers: ConsumerList <- (new ConsumerList) + .push(new WhitespaceConsumer) + ; + + str: String; + + init(code: String) : Object {{ + assert(not (code = ""), "init", "input code cannot be empty!"); + assert(str = "", "init", "already initialised!"); + + str <- code; + }}; + + try_consume() : Bool { + let + consumer: Object <- consumers.find(str) + in + if isvoid consumer + then + false + else + case consumers.find(str) of + c: IStringConsumer => { + str <- str.substr(c.consumed_length(), str.length() - c.consumed_length()); + true; + }; + o: Object => false; + esac + fi + }; + + out() : Object { + out_string(str) + }; +}; |
