diff --git a/wip-duuqnd/user-side-compiler/example-5.c6l b/wip-duuqnd/user-side-compiler/example-5.c6l new file mode 100644 index 0000000..f2ab6fc --- /dev/null +++ b/wip-duuqnd/user-side-compiler/example-5.c6l @@ -0,0 +1,25 @@ +x = random() + +if x == 1 then + placeholder() +end + +if x != 1 then + placeholder() +end + +if x > 1 then + placeholder() +end + +if x >= 1 then + placeholder() +end + +if x < 1 then + placeholder() +end + +if x <= 1 then + placeholder() +end \ No newline at end of file diff --git a/wip-duuqnd/user-side-compiler/high-level.lisp b/wip-duuqnd/user-side-compiler/high-level.lisp index e438512..a794c2c 100644 --- a/wip-duuqnd/user-side-compiler/high-level.lisp +++ b/wip-duuqnd/user-side-compiler/high-level.lisp @@ -66,10 +66,14 @@ (define-standard-expr-node node-expr-plus) (define-standard-expr-node node-expr-minus) -(define-standard-expr-node node-expr-test-equal) -(define-standard-expr-node node-expr-test-not-equal) (define-standard-expr-node node-expr-multiply) (define-standard-expr-node node-expr-divide) +(define-standard-expr-node node-expr-test-equal) +(define-standard-expr-node node-expr-test-not-equal) +(define-standard-expr-node node-expr-test-less) +(define-standard-expr-node node-expr-test-less-or-equal) +(define-standard-expr-node node-expr-test-greater) +(define-standard-expr-node node-expr-test-greater-or-equal) ;;; diff --git a/wip-duuqnd/user-side-compiler/middle/instructions.lisp b/wip-duuqnd/user-side-compiler/middle/instructions.lisp index 29d1a39..f737ae8 100644 --- a/wip-duuqnd/user-side-compiler/middle/instructions.lisp +++ b/wip-duuqnd/user-side-compiler/middle/instructions.lisp @@ -117,5 +117,7 @@ solely due to its output being unused.")) (ops (ir-comparison) (ir-test-equal node-expr-test-equal "==") (ir-test-not-equal node-expr-test-not-equal "!=") - (ir-test-less nil "<") (ir-test-greater nil ">") - (ir-test-less-or-equal nil "<=") (ir-test-greater-or-equal nil ">="))) + (ir-test-less node-expr-test-less "<") + (ir-test-greater node-expr-test-greater ">") + (ir-test-less-or-equal node-expr-test-less-or-equal "<=") + (ir-test-greater-or-equal node-expr-test-greater-or-equal ">="))) diff --git a/wip-duuqnd/user-side-compiler/parser.lisp b/wip-duuqnd/user-side-compiler/parser.lisp index c38eec3..f9583b0 100644 --- a/wip-duuqnd/user-side-compiler/parser.lisp +++ b/wip-duuqnd/user-side-compiler/parser.lisp @@ -112,8 +112,10 @@ parser's debug output.") (token-not-equal node-expr-test-not-equal)) (define-binary-expr-matcher comparison term - (token-less-than node-expr-test-equal) - (token-greater-than node-expr-test-not-equal)) + (token-less-than node-expr-test-less) + (token-less-or-equal node-expr-test-less-or-equal) + (token-greater-than node-expr-test-greater) + (token-greater-or-equal node-expr-test-greater-or-equal)) (define-binary-expr-matcher term factor (token-plus node-expr-plus) diff --git a/wip-duuqnd/user-side-compiler/tokenizer.lisp b/wip-duuqnd/user-side-compiler/tokenizer.lisp index 6df8177..df65635 100644 --- a/wip-duuqnd/user-side-compiler/tokenizer.lisp +++ b/wip-duuqnd/user-side-compiler/tokenizer.lisp @@ -80,7 +80,9 @@ reading immediately. Should be a subset of *SPECIAL-TOKEN-CHARS*.") (define-atomic-token token-slash) (define-atomic-token token-less-than) +(define-atomic-token token-less-or-equal) (define-atomic-token token-greater-than) +(define-atomic-token token-greater-or-equal) (define-atomic-token token-equal-equal) (define-atomic-token token-not-equal) @@ -102,7 +104,9 @@ reading immediately. Should be a subset of *SPECIAL-TOKEN-CHARS*.") ("(" token-open-paren) (")" token-close-paren) ("<" token-less-than) + ("<=" token-less-or-equal) (">" token-greater-than) + (">=" token-greater-or-equal) ("=" token-equal) ("==" token-equal-equal) ("!=" token-not-equal)))