Annotation of OpenXM_contrib/gmp/demos/calclex.l, Revision 1.1.1.1
1.1 maekawa 1: /* Lexical analyzer for calc.y. */
2:
3: /*
4: Copyright (C) 2000 Free Software Foundation, Inc.
5:
6: This file is part of the GNU MP Library.
7:
8: This program is free software; you can redistribute it and/or modify it under
9: the terms of the GNU General Public License as published by the Free Software
10: Foundation; either version 2 of the License, or (at your option) any later
11: version.
12:
13: This program is distributed in the hope that it will be useful, but WITHOUT ANY
14: WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15: PARTICULAR PURPOSE. See the GNU General Public License for more details.
16:
17: You should have received a copy of the GNU General Public License along with
18: this program; if not, write to the Free Software Foundation, Inc., 59 Temple
19: Place - Suite 330, Boston, MA 02111-1307, USA.
20: */
21:
22:
23: %{
24: #include "calc.h"
25:
26: #define numberof(x) (sizeof (x) / sizeof ((x)[0]))
27: %}
28:
29: %%
30:
31: [ \t\f] { /* white space is skipped */ }
32:
33: [;\n] { /* semicolon or newline separates statements */
34: return EOS; }
35: \\\n { /* escaped newlines are skipped */ }
36:
37:
38: #(([^\\\n]*)\\)+\n {
39: /* comment through to escaped newline is skipped */ }
40: #[^\n]*\n { /* comment through to newline is a separator */
41: return EOS; }
42: #[^\n]* { /* comment through to EOF skipped */ }
43:
44:
45: [-+*/%()<>^!=,] { return yytext[0]; }
46: "<=" { return LE; }
47: ">=" { return GE; }
48: "==" { return EQ; }
49: "!=" { return NE; }
50: "<<" { return LSHIFT; }
51: ">>" { return RSHIFT; }
52: "&&" { return LAND; }
53: "||" { return LOR; }
54:
55: (0[xX])?[0-9A-F]+ {
56: yylval.str = yytext;
57: return NUMBER; }
58:
59: [a-zA-Z][a-zA-Z0-9]* {
60: static struct {
61: char *name;
62: int value;
63: } table[] = {
64: { "abs", ABS },
65: { "bin", BIN },
66: { "decimal", DECIMAL },
67: { "fib", FIB },
68: { "hex", HEX },
69: { "gcd", GCD },
70: { "lcm", LCM },
71: { "nextprime", NEXTPRIME },
72: { "powm", POWM },
73: { "quit", QUIT },
74: { "root", ROOT },
75: { "sqrt", SQRT },
76: };
77: int i;
78:
79: for (i = 0; i < numberof (table); i++)
80: if (strcmp (yytext, table[i].name) == 0)
81: return table[i].value;
82:
83: if (yytext[0] >= 'a' && yytext[0] <= 'z' && yytext[1] == '\0')
84: {
85: yylval.var = yytext[0] - 'a';
86: return VARIABLE;
87: }
88:
89: return BAD;
90: }
91:
92: . { return BAD; }
93:
94: %%
95:
96: int
97: yywrap ()
98: {
99: return 1;
100: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>