Skip to content

Commit

Permalink
Boolean literals.
Browse files Browse the repository at this point in the history
  • Loading branch information
Baris Aktemur committed Nov 6, 2017
1 parent 2883904 commit d45eec2
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Deve/README.md
Expand Up @@ -14,6 +14,7 @@ Grammar:
```
main ::= exp EOF
exp ::= INT
| BOOL
| NAME
| LET NAME EQUALS exp IN exp
```
Expand Down Expand Up @@ -82,5 +83,9 @@ Sample run:
# parse "let x = let y = z in 42 in let f = 8 in 7";;
- : exp =
LetIn ("x", LetIn ("y", Var "z", CstI 42), LetIn ("f", CstI 8, CstI 7))
# parse "true";;
- : exp = CstB true
# parse "false";;
- : exp = CstB false
```

3 changes: 3 additions & 0 deletions Deve/lexer.ml
Expand Up @@ -6,6 +6,7 @@
"a name", etc.
*)
type token = INT of int
| BOOL of bool
| NAME of string
| PLUS | STAR | MINUS | SLASH
| LET | EQUALS | IN
Expand Down Expand Up @@ -33,6 +34,8 @@ let keyword s =
| "if" -> IF
| "then" -> THEN
| "else" -> ELSE
| "true" -> BOOL true
| "false" -> BOOL false
| _ -> NAME s

(* tokenize: char list -> token list *)
Expand Down
1 change: 1 addition & 0 deletions Deve/parser.ml
Expand Up @@ -5,6 +5,7 @@
let rec parseExp tokens =
match tokens with
| INT i :: rest -> (CstI i, rest)
| BOOL b :: rest -> (CstB b, rest)
| NAME x :: rest -> (Var x, rest)
| LET::(NAME x)::EQUALS::rest ->
(match parseExp rest with
Expand Down

0 comments on commit d45eec2

Please sign in to comment.