diff --git a/lib/ast.ml b/lib/ast/print.ml similarity index 51% rename from lib/ast.ml rename to lib/ast/print.ml index c7a5d47..17d3048 100644 --- a/lib/ast.ml +++ b/lib/ast/print.ml @@ -1,33 +1,35 @@ -(* lib/ast.ml *) +(* lib/ast/print.ml *) -type binary_operator = Add | Substract | Multiply | Divide - -type expression = - | IntegerLiteral of int - | BinaryExpression of binary_operator * expression * expression - -type statement = ExpressionStatement of expression -type source_file = SourceFile of statement list - -(* Print AST *) +open Syntax +(** [string_of_binary_operator op] returns a string representation of the binary operator [op]. *) let string_of_binary_operator = function | Add -> "Add" | Substract -> "Substract" | Multiply -> "Multiply" | Divide -> "Divide" +(** [string_of_unary_operator op] returns a string representation of the unary operator [op]. *) +let string_of_unary_operator = function Negate -> "Negate" + +(** [string_of_expression e] returns a string representation of the expression [e]. *) let rec string_of_expression = function | IntegerLiteral i -> "IntegerLiteral(" ^ string_of_int i ^ ")" + | UnaryExpression (op, e) -> + "UnaryExpression(" + ^ string_of_unary_operator op + ^ ", " ^ string_of_expression e ^ ")" | BinaryExpression (op, e1, e2) -> "BinaryExpression(" ^ string_of_binary_operator op ^ ", " ^ string_of_expression e1 ^ ", " ^ string_of_expression e2 ^ ")" +(** [string_of_statement s] returns a string representation of the statement [s]. *) let string_of_statement = function | ExpressionStatement e -> "ExpressionStatement(" ^ string_of_expression e ^ ")" +(** [string_of_source_file f] returns a string representation of the source file [f]. *) let string_of_source_file = function | SourceFile stmts -> let stmt_strings = List.map string_of_statement stmts in diff --git a/lib/ast/syntax.ml b/lib/ast/syntax.ml new file mode 100644 index 0000000..126bb37 --- /dev/null +++ b/lib/ast/syntax.ml @@ -0,0 +1,12 @@ +(* lib/ast/syntax.ml *) + +type binary_operator = Add | Substract | Multiply | Divide +type unary_operator = Negate + +type expression = + | IntegerLiteral of int + | UnaryExpression of unary_operator * expression + | BinaryExpression of binary_operator * expression * expression + +type statement = ExpressionStatement of expression +type source_file = SourceFile of statement list