feat: Support Unary Operation #1

This commit is contained in:
Lucàs
2024-07-02 18:17:20 +02:00
parent 14f6ec447a
commit b983c8a662
4 changed files with 18 additions and 8 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
(* bin/main.ml *)
open Printf
open Ast
open Ast.Print
let () =
let lexbuf = Lexing.from_channel stdin in
+4 -4
View File
@@ -3,16 +3,16 @@
(name croissant)
(generate_opam_files true)
(source (github LucasVbr/croissant))
(authors "LucasVbr")
(maintainers "LucasVbr")
(license LICENSE)
(authors "LucasVbr <contact@lucasvbr.dev>")
(maintainers "LucasVbr <contact@lucasvbr.dev>")
(license MIT)
;(documentation https://url/to/documentation)
(package
(name croissant)
(synopsis "A short synopsis")
(description "A longer description")
(depends ocaml dune alcotest menhir ocamlformat)
(depends ocaml dune menhir ocamlformat (alcotest :with-test))
(tags
("Custom programming language" "French")
)
+6 -2
View File
@@ -1,6 +1,6 @@
/* lib/parser.mly */
%{
open Ast
open Ast.Syntax
%}
%token <int> INT
@@ -19,7 +19,7 @@
%left "+" "-"
%left "*" "/"
//%nonassoc UMINUS
%nonassoc UMINUS
%start main
%type <source_file> main
@@ -38,12 +38,16 @@ statement:
expression:
| literal { $1 }
| unary_expression { $1 }
| binary_expression { $1 }
| "(" expression ")" { $2 }
literal:
| INT { IntegerLiteral($1) }
unary_expression:
| MINUS expression %prec UMINUS { UnaryExpression(Negate, $2) }
binary_expression:
| e1=expression PLUS e2=expression { BinaryExpression(Add, e1, e2) }
| e1=expression MINUS e2=expression { BinaryExpression(Substract, e1, e2) }
+6
View File
@@ -0,0 +1,6 @@
;test/ast/dune
(test
(name print)
(libraries alcotest ast)
)