diff options
| Commit | 26fa0559b0689a4647c38a2275c5880148248718 (patch) | |
|---|---|---|
| Author | 2025-11-01 18:13:33 +0200 | |
| Committer | 2025-11-01 18:13:33 +0200 | |
| Files | c6e3ad8bcb2a873607bc9d619f5cee22185f1765 /src/StringConsumer/BaseConsumers | |
| cool-self-hosted-main.tar cool-self-hosted-main.tar.gz cool-self-hosted-main.zip | ||
| Parent | beccf376ecbcc3819cc0d102b3635b6e5f39fa9e (diff) | |
feat(src/StringConsumer): Add higher order consumers, integer, binary operation and if keywords consumers HEAD main
Higher order consumers are called that way because they use other (base)
consumers in their logic. In a sense, the other consumers are parameters
to the higher order consumers.
4 files changed, 67 insertions, 0 deletions
diff --git a/src/StringConsumer/BaseConsumers/BinaryOperatorConsumer.cl b/src/StringConsumer/BaseConsumers/BinaryOperatorConsumer.cl new file mode 100644 index 0000000..8e7288c --- /dev/null +++ b/src/StringConsumer/BaseConsumers/BinaryOperatorConsumer.cl @@ -0,0 +1,18 @@ +class BinaryOperatorConsumer inherits IWordsConsumer { + init() : IStringConsumer {{ + matched_words <- matched_words + .push("+") + .push("-") + .push("*") + .push("/") + .push("<") + .push("<=") + .push("=") + ; + self; + }}; + + token() : IToken { + new BinaryOperatorToken + }; +}; diff --git a/src/StringConsumer/BaseConsumers/IntegerConsumer.cl b/src/StringConsumer/BaseConsumers/IntegerConsumer.cl new file mode 100644 index 0000000..5b4cd82 --- /dev/null +++ b/src/StringConsumer/BaseConsumers/IntegerConsumer.cl @@ -0,0 +1,21 @@ +class IntegerConsumer inherits IWordsConsumer { + init() : IStringConsumer {{ + matched_words <- matched_words + .push("0") + .push("1") + .push("2") + .push("3") + .push("4") + .push("5") + .push("6") + .push("7") + .push("8") + .push("9") + ; + self; + }}; + + token() : IToken { + new IntegerToken + }; +}; diff --git a/src/StringConsumer/BaseConsumers/KeywordsIfConsumer.cl b/src/StringConsumer/BaseConsumers/KeywordsIfConsumer.cl new file mode 100644 index 0000000..9bd76e9 --- /dev/null +++ b/src/StringConsumer/BaseConsumers/KeywordsIfConsumer.cl @@ -0,0 +1,15 @@ +class KeywordsIfConsumer inherits IWordsConsumer { + init() : IStringConsumer {{ + matched_words <- matched_words + .push("if") + .push("then") + .push("else") + .push("fi") + ; + self; + }}; + + token() : IToken { + new KeywordToken + }; +}; diff --git a/src/StringConsumer/BaseConsumers/WhitespaceConsumer.cl b/src/StringConsumer/BaseConsumers/WhitespaceConsumer.cl new file mode 100644 index 0000000..3a8c4dc --- /dev/null +++ b/src/StringConsumer/BaseConsumers/WhitespaceConsumer.cl @@ -0,0 +1,13 @@ +class WhitespaceConsumer inherits IWordsConsumer { + init() : IStringConsumer {{ + matched_words <- matched_words + .push(" ") + .push("\t") + ; + self; + }}; + + token() : IToken { + new WhitespaceToken + }; +}; |
