mirror of
https://github.com/LucasVbr/croissant.git
synced 2026-05-13 17:12:10 +00:00
Feat: Add Character, String and float literals
This commit is contained in:
+14
-6
@@ -40,20 +40,28 @@ rule token = parse
|
||||
|
||||
(* Literals *)
|
||||
| interger as i { INT (int_of_string i) }
|
||||
(* | float as f { FLOAT (float_of_string f) } *)
|
||||
| float as f { FLOAT (float_of_string f) }
|
||||
| '"' { Buffer.clear buffer; STRING(string lexbuf) }
|
||||
| "''" { NULL }
|
||||
| "'\\''" { CHARACTER '\'' }
|
||||
| "'\\n'" { CHARACTER '\n' }
|
||||
| "'\\t'" { CHARACTER '\t' }
|
||||
| "'\\\\'" { CHARACTER '\\' }
|
||||
| "'\\r'" { CHARACTER '\r' }
|
||||
| "'\\b'" { CHARACTER '\b' }
|
||||
| "'" [^'\\'] "'" { CHARACTER (String.get (Lexing.lexeme lexbuf) 1) }
|
||||
|
||||
(* Identifiers *)
|
||||
(* ... *)
|
||||
| identifier as lxm { IDENTIFIER(lxm) }
|
||||
|
||||
| eof { EOF }
|
||||
| _ as c { raise (Error c) }
|
||||
|
||||
and string = parse
|
||||
| '"' { token lexbuf }
|
||||
| '\"' { Buffer.contents buffer}
|
||||
| "\\\"" { Buffer.add_char buffer '"'; string lexbuf }
|
||||
| '\\' { Buffer.add_char buffer '\\'; string lexbuf }
|
||||
| '\n' { Buffer.add_char buffer '\n'; string lexbuf }
|
||||
| eof { raise (Error '"') }
|
||||
| _ { Buffer.add_char buffer (Lexing.lexeme_char lexbuf 0); string lexbuf }
|
||||
| _ as c { Buffer.add_char buffer c; string lexbuf }
|
||||
|
||||
and line_comment = parse
|
||||
| '\n' { Lexing.new_line lexbuf; token lexbuf }
|
||||
|
||||
@@ -3,6 +3,12 @@ open Syntax
|
||||
%}
|
||||
|
||||
%token <int> INT
|
||||
%token <float> FLOAT
|
||||
%token <char> CHARACTER
|
||||
%token <string> STRING
|
||||
%token <string> IDENTIFIER
|
||||
%token NULL
|
||||
|
||||
%token PLUS "+"
|
||||
%token MINUS "-"
|
||||
%token TIMES "*"
|
||||
@@ -36,12 +42,17 @@ statement:
|
||||
|
||||
expression:
|
||||
| literal { Expressions.Literal($1) }
|
||||
| IDENTIFIER { Expressions.Identifier($1) }
|
||||
| unary_expression { $1 }
|
||||
| binary_expression { $1 }
|
||||
| "(" expression ")" { $2 }
|
||||
|
||||
literal:
|
||||
| INT { Literals.Integer($1) }
|
||||
| FLOAT { Literals.Float($1) }
|
||||
| CHARACTER { Literals.Character($1) }
|
||||
| STRING { Literals.String($1) }
|
||||
| NULL { Literals.Null }
|
||||
|
||||
unary_expression:
|
||||
| "-" expression %prec UMINUS { Expressions.UnaryExpression(UnaryOperators.ArithmeticNegation, $2) }
|
||||
|
||||
@@ -1 +1 @@
|
||||
type environment = { variables : (string * _type) list }
|
||||
type environment = { variables : (string * Types.types) list }
|
||||
Reference in New Issue
Block a user