about summary refs log tree commit diff
path: root/lr.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2015-10-22 22:09:54 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2015-10-22 22:09:54 +0200
commitc61f7ad5fba9d1c8a62008b8bd3fd87f1310bf4e (patch)
tree4eaf106a68d8aa01d4b83b7f5e0cf21fcaec6c5c /lr.c
parent7f14eac96430bd323f8099b43f6ca9f98b763e37 (diff)
downloadlr-c61f7ad5fba9d1c8a62008b8bd3fd87f1310bf4e.tar.gz
lr-c61f7ad5fba9d1c8a62008b8bd3fd87f1310bf4e.tar.xz
lr-c61f7ad5fba9d1c8a62008b8bd3fd87f1310bf4e.zip
add negation
Diffstat (limited to 'lr.c')
-rw-r--r--lr.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lr.c b/lr.c
index b7c8d1b..8db5916 100644
--- a/lr.c
+++ b/lr.c
@@ -164,6 +164,8 @@ parse_op()
 	return 0;
 }
 
+struct expr *parse_cmp();
+
 struct expr *
 parse_inner()
 {
@@ -171,6 +173,12 @@ parse_inner()
 		struct expr *e = malloc (sizeof (struct expr));
 		e->op = EXPR_PRUNE;
 		return e;
+	} else if (token("!")) {
+		struct expr *e = parse_cmp();
+		struct expr *not = malloc (sizeof (struct expr));
+		not->op = EXPR_NOT;
+		not->a.expr = e;
+		return not;
 	} else
 		return 0;
 	// TODO negation