Summary Files Commits Branches @commit @diff @stats
path: root / src / StringConsumer / HigherOrderConsumers
diff options
context:
space:
mode:
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;
+ }};
+};