-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClReader.lex
105 lines (66 loc) · 2.47 KB
/
ClReader.lex
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// $Id$
package EDU.Washington.grad.gjb.cassowary;
import java_cup.runtime.Symbol;
%%
%cup
%public
DIGIT = [0-9]
ALPHA = [A-Za-z]
ALPHANUM = [A-Za-z0-9_]
ID = {ALPHA}{ALPHANUM}*
ws = [ \t\r\n\f]+
%init{
// code to go into constructor
%init}
%{
// added code to lexer class
private java.util.Hashtable m_variable_name_object_hash;
public boolean m_debug_lex = false;
public void setVariableNameObjectHash(java.util.Hashtable variable_name_object_hash)
{
m_variable_name_object_hash = variable_name_object_hash;
}
%}
%%
{ws} { /* skip white space */ }
">=" { return new Symbol(sym.GEQ); }
"<=" { return new Symbol(sym.LEQ); }
"=" { return new Symbol(sym.EQ); }
"+" { return new Symbol(sym.PLUS); }
"-" { return new Symbol(sym.MINUS); }
"*" { return new Symbol(sym.TIMES); }
"/" { return new Symbol(sym.DIVIDE); }
"(" { return new Symbol(sym.LPAREN); }
")" { return new Symbol(sym.RPAREN); }
{DIGIT}+("."{DIGIT}*)?|("."{DIGIT}+) { return new Symbol(sym.NUMBER, new Double(yytext())); }
{ID} {
String variable_name = new String(yytext());
if (m_debug_lex) {
System.out.println("Lexical analysis found <" + variable_name + ">");
}
if (! m_variable_name_object_hash.containsKey(variable_name)) {
if (m_debug_lex) {
System.out.println(" Putting it in hash for the first time.");
}
ClVariable variable = new ClVariable();
Object return_value = m_variable_name_object_hash.put(variable_name, variable);
if (return_value != null) {
System.err.println("Variable was already in hash!!!!!");
}
if (m_debug_lex) {
if (m_variable_name_object_hash.containsKey(variable_name)) {
System.out.println(" Hash table now contains object.");
} else {
System.out.println(" Hash table does not contain object.");
}
}
if (m_variable_name_object_hash.isEmpty()) {
System.err.println(" How can the hashtable be empty after inserting something?");
}
} else {
if (m_debug_lex)
System.err.println(" Already in Hash.");
}
return new Symbol(sym.VARIABLE, variable_name);
}
. { System.err.println("Illegal character: " + yytext() ); }