blob: b337995427cd0d5ced0f7ec074f1e696afb76f28 [file] [log] [blame]
PulkoMandy17fc7592022-07-28 18:27:54 +02001
2FILE *infile;
3static int cur_char=' ';
4
5char tkname[MAXLEN];
6
7int yylex()
8{
9 char *p=tkname;
10 int tmp;
11
12 while(isspace(cur_char))
13 cur_char=getc(infile);
14
15 if(isdigit(cur_char)){
16 do{
17 *p++=cur_char;
18 cur_char=getc(infile);
19 }while(isdigit(cur_char));
20 if(cur_char=='.'){
21 *p++=cur_char;
22 cur_char=getc(infile);
23 while(isdigit(cur_char)){
24 *p++=cur_char;
25 cur_char=getc(infile);
26 }
27 }
28 *p++=0;
29 return TKNUMBER;
30 }
31 if(isalpha(cur_char)){
32 do{
33 *p++=cur_char;
34 cur_char=getc(infile);
35 }while(isalnum(cur_char));
36 *p++=0;
37 if(!strcmp(tkname,"int"))
38 return TKINT;
39 if(!strcmp(tkname,"real"))
40 return TKREAL;
41 if(!strcmp(tkname,"if"))
42 return TKIF;
43 if(!strcmp(tkname,"else"))
44 return TKELSE;
45 if(!strcmp(tkname,"while"))
46 return TKWHILE;
47 if(!strcmp(tkname,"return"))
48 return TKRETURN;
49 return TKIDENTIFIER;
50 }
51 tmp=cur_char;
52 cur_char=getc(infile);
53 if(tmp=='!'&&cur_char=='='){
54 cur_char=getc(infile);
55 return TKNEQ;
56 }
57 if(tmp=='<'&&cur_char=='='){
58 cur_char=getc(infile);
59 return TKLEQ;
60 }
61 if(tmp=='>'&&cur_char=='='){
62 cur_char=getc(infile);
63 return TKGEQ;
64 }
65 if(tmp=='&'&&cur_char=='&'){
66 cur_char=getc(infile);
67 return TKAND;
68 }
69 if(tmp=='|'&&cur_char=='|'){
70 cur_char=getc(infile);
71 return TKOR;
72 }
73 if(tmp==':'&&cur_char=='='){
74 cur_char=getc(infile);
75 return TKASSIGN;
76 }
77 return tmp;
78}
79