|
|
1.1 root 1: %{
2: #ifndef lint
3: static char RCSid[] = "$Header: scanner.l,v 2.1 86/07/29 06:48:21 jqj Exp $";
4: #endif
5: /*
6: * scanner.l -- scanner for the XNS courier compiler
7: */
8:
9: /* $Log: scanner.l,v $
10: * Revision 2.1 86/07/29 06:48:21 jqj
11: * added support for 37D style comments.
12: *
13: * Revision 2.0 85/11/21 07:21:45 jqj
14: * 4.3BSD standard release
15: *
16: * Revision 1.1 85/11/20 12:56:17 jqj
17: * Initial revision
18: *
19: * Revision 1.3 85/03/11 16:40:08 jqj
20: * Public alpha-test version, released 11 March 1985
21: *
22: * Revision 1.2 85/02/21 11:05:51 jqj
23: * alpha test version
24: *
25: * Revision 1.1 85/02/15 13:55:58 jqj
26: * Initial revision
27: *
28: */
29:
30: #include "compiler.h"
31: #include "y.tab.h"
32: %}
33: %%
34: "--"$ |
35: "----" |
36: \-(\-[^\n-]+)+(\n|"--") |
37: [ \t\n] /* whitespace */;
38: ARRAY { return (ARRAY); }
39: BEGIN { return (_BEGIN); }
40: BOOLEAN { return (BOOLEAN); }
41: CARDINAL { return (CARDINAL); }
42: CHOICE { return (CHOICE); }
43: DEPENDS { return (DEPENDS); }
44: END { return (END); }
45: ERROR { return (ERROR); }
46: INTEGER { return (INTEGER); }
47: LONG { return (LONG); }
48: OF { return (OF); }
49: PROCEDURE { return (PROCEDURE); }
50: PROGRAM { return (PROGRAM); }
51: RECORD { return (RECORD); }
52: REPORTS { return (REPORTS); }
53: RETURNS { return (RETURNS); }
54: SEQUENCE { return (SEQUENCE); }
55: STRING { return (STRING); }
56: TYPE { return (TYPE); }
57: UNSPECIFIED { return (UNSPECIFIED); }
58: UPON { return (UPON); }
59: VERSION { return (VERSION); }
60: TRUE { return (TRUE); }
61: FALSE { return (FALSE); }
62: "=>" { return (_CHOOSES); }
63: "-"?[0-9]+ {
64: /*
65: * decimal constant.
66: */
67: yylval.stringvalue = copy(yytext);
68: return (number);
69: }
70: "-"?[0-9]+[Dd] {
71: /*
72: * decimal constant.
73: */
74: yytext[yyleng-1] = '\0';
75: yylval.stringvalue = copy(yytext);
76: return (number);
77: }
78: "-"?[0-7]+[Bb] {
79: char buf[BUFSIZ];
80: /*
81: * octal constant.
82: * change to C representation
83: */
84: yytext[yyleng-1] = '\0';
85: if (*yytext != '-')
86: sprintf(buf,"0%s", yytext);
87: else
88: sprintf(buf,"-0%s", yytext+1);
89: yylval.stringvalue = copy(buf);
90: return (number);
91: }
92: "-"?[0-9][0-9A-Fa-f]*[Xx] {
93: char buf[BUFSIZ];
94: /*
95: * hex constant.
96: * change to C representation
97: */
98: yytext[yyleng-1] = '\0';
99: if (*yytext != '-')
100: sprintf(buf,"0x%s", yytext);
101: else
102: sprintf(buf,"-0x%s", yytext+1);
103: yylval.stringvalue = copy(buf);
104: return (number);
105: }
106: \"[^"\n"]*\" {
107: /*
108: * string constant
109: */
110:
111: yylval.stringvalue = copy(yytext);
112: return (string);
113: }
114: \"([^\n"]|\"\")*\" {
115: register char *p;
116: /*
117: * string constant with embedded ""
118: */
119:
120: for (p=yytext+1; p<yytext+yyleng-1; p++)
121: if (*p == '"') *p++='\\';
122: yylval.stringvalue = copy(yytext);
123: return (string);
124: }
125: [a-zA-Z_][a-zA-Z0-9_]* {
126: yylval.stringvalue = copy(yytext);
127: return (identifier);
128: }
129: . {
130: return ((int) yytext[0]);
131: }
132:
133: %%
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.