<- Back to shtanton's homepage
summaryrefslogtreecommitdiff
path: root/main/subexast.go
diff options
context:
space:
mode:
Diffstat (limited to 'main/subexast.go')
-rw-r--r--main/subexast.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/main/subexast.go b/main/subexast.go
index 7e2f33c..54cc5fe 100644
--- a/main/subexast.go
+++ b/main/subexast.go
@@ -115,3 +115,39 @@ func (ast SubexASTOutput) compileWith(next SubexState) SubexState {
next: next,
}
}
+
+type SubexASTTry struct {
+ content SubexAST
+}
+func (ast SubexASTTry) compileWith(next SubexState) SubexState {
+ return SubexGroupState {
+ ast.content.compileWith(next),
+ next,
+ }
+}
+
+type SubexASTMaybe struct {
+ content SubexAST
+}
+func (ast SubexASTMaybe) compileWith(next SubexState) SubexState {
+ return SubexGroupState {
+ next,
+ ast.content.compileWith(next),
+ }
+}
+
+type SubexASTJoin struct {
+ content, delimiter SubexAST
+}
+func (ast SubexASTJoin) compileWith(next SubexState) SubexState {
+ afterContentState := &SubexGroupState {
+ nil,
+ next,
+ }
+ manyContentsState := ast.content.compileWith(afterContentState)
+ afterContentState.first = ast.delimiter.compileWith(manyContentsState)
+ return SubexGroupState {
+ manyContentsState,
+ next,
+ }
+}