diff options
2 files changed, 33 insertions, 0 deletions
| -rw-r--r-- | src/StringConsumer/HigherOrderConsumers/ExpressionConsumer.cl | 19 | ||||
| -rw-r--r-- | src/StringConsumer/HigherOrderConsumers/IfConsumer.cl | 14 |
diff --git a/src/StringConsumer/HigherOrderConsumers/ExpressionConsumer.cl b/src/StringConsumer/HigherOrderConsumers/ExpressionConsumer.cl new file mode 100644 index 0000000..592611e --- /dev/null +++ b/src/StringConsumer/HigherOrderConsumers/ExpressionConsumer.cl @@ -0,0 +1,19 @@ +class ExpressionConsumer inherits IHigherOrderConsumer { + integerc: IStringConsumer <- (new IntegerConsumer).init(); + binaryopc: IStringConsumer <- (new BinaryOperatorConsumer).init(); + + consume(s: String) : Int {{ + consumed_length <- 0; + if did(integerc.consume(s)) + then + token <- integerc.token() + else if did(binaryopc.consume(s)) + then + token <- binaryopc.token() + else + void + fi + fi; + consumed_length; + }}; +}; diff --git a/src/StringConsumer/HigherOrderConsumers/IfConsumer.cl b/src/StringConsumer/HigherOrderConsumers/IfConsumer.cl new file mode 100644 index 0000000..431f79b --- /dev/null +++ b/src/StringConsumer/HigherOrderConsumers/IfConsumer.cl @@ -0,0 +1,14 @@ +class IfConsumer inherits IHigherOrderConsumer { + ifc: IStringConsumer <- (new KeywordsIfConsumer).init(); + + consume(s: String) : Int {{ + consumed_length <- 0; + if did(ifc.consume(s)) + then + token <- ifc.token() + else + void + fi; + consumed_length; + }}; +}; |
