-
Notifications
You must be signed in to change notification settings - Fork 0
/
lexer.mll
38 lines (30 loc) · 1.19 KB
/
lexer.mll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(** Implementacion en OCaml de un analizador lexico, un analizador sintactico
y un interpretador sencillo para simular una calculadora de mesa.
Realizado como proyecto del ensayo sobre los conceptos estudiados en la
materia CI3641, Lenguajes de Programación I.
@author Cabeza David
@author Martinez Fabiola
@since Marzo, 2018
*)
(* Analizador lexico *)
(* Cabecera del analizador *)
{
open Parser (* Directiva open para tener accesibles los contenidos de Parser *)
exception Eof (* Para lanzar un EOF *)
}
let digit = ['0'-'9']
let float = digit+(['.']digit*)?
(* Definicion de expresiones regulares para reconocer tokens *)
rule token = parse
[' ' '\t'] { token lexbuf } (* Ignorar espacios en blanco, tabs. *)
| ['\n'] { EOL }
| float as i { FLOAT(float_of_string i) } (* Casting del input *)
| '+' { PLUS }
| '-' { MINUS }
| '*' { TIMES }
| '/' { DIV }
| '%' { PERCENT }
| "sqrt" { SQRT }
| '(' { LPAREN }
| ')' { RPAREN }
| eof { raise Eof } (* Fin de la entrada del lexer *)