BSD 4_4 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 5 Jan 1987 01:22:08 +0000 (17:22 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Mon, 5 Jan 1987 01:22:08 +0000 (17:22 -0800)
Work on file usr/src/contrib/xns/compiler/scanner.l

Synthesized-from: CSRG/cd3/4.4

usr/src/contrib/xns/compiler/scanner.l [new file with mode: 0644]

diff --git a/usr/src/contrib/xns/compiler/scanner.l b/usr/src/contrib/xns/compiler/scanner.l
new file mode 100644 (file)
index 0000000..2dca819
--- /dev/null
@@ -0,0 +1,133 @@
+%{
+#ifndef lint
+static char RCSid[] = "$Header: scanner.l,v 2.1 86/07/29 06:48:21 jqj Exp $";
+#endif
+/*
+ * scanner.l -- scanner for the XNS courier compiler
+ */
+
+/* $Log:       scanner.l,v $
+ * Revision 2.1  86/07/29  06:48:21  jqj
+ * added support for 37D style comments.
+ * 
+ * Revision 2.0  85/11/21  07:21:45  jqj
+ * 4.3BSD standard release
+ * 
+ * Revision 1.1  85/11/20  12:56:17  jqj
+ * Initial revision
+ * 
+ * Revision 1.3  85/03/11  16:40:08  jqj
+ * Public alpha-test version, released 11 March 1985
+ * 
+ * Revision 1.2  85/02/21  11:05:51  jqj
+ * alpha test version
+ * 
+ * Revision 1.1  85/02/15  13:55:58  jqj
+ * Initial revision
+ * 
+ */
+
+#include "compiler.h"
+#include "y.tab.h"
+%}
+%%
+"--"$                  |
+"----"                 |
+\-(\-[^\n-]+)+(\n|"--")        |
+[ \t\n]                        /* whitespace */;
+ARRAY                  { return (ARRAY); }
+BEGIN                  { return (_BEGIN); }
+BOOLEAN                        { return (BOOLEAN); }
+CARDINAL               { return (CARDINAL); }
+CHOICE                 { return (CHOICE); }
+DEPENDS                        { return (DEPENDS); }
+END                    { return (END); }
+ERROR                  { return (ERROR); }
+INTEGER                        { return (INTEGER); }
+LONG                   { return (LONG); }
+OF                     { return (OF); }
+PROCEDURE              { return (PROCEDURE); }
+PROGRAM                        { return (PROGRAM); }
+RECORD                 { return (RECORD); }
+REPORTS                        { return (REPORTS); }
+RETURNS                        { return (RETURNS); }
+SEQUENCE               { return (SEQUENCE); }
+STRING                 { return (STRING); }
+TYPE                   { return (TYPE); }
+UNSPECIFIED            { return (UNSPECIFIED); }
+UPON                   { return (UPON); }
+VERSION                        { return (VERSION); }
+TRUE                   { return (TRUE); }
+FALSE                  { return (FALSE); }
+"=>"                   { return (_CHOOSES); }
+"-"?[0-9]+             {
+                               /*
+                                * decimal constant.
+                                */
+                               yylval.stringvalue = copy(yytext);
+                               return (number);
+                       }
+"-"?[0-9]+[Dd]         {
+                               /*
+                                * decimal constant.
+                                */
+                               yytext[yyleng-1] = '\0';
+                               yylval.stringvalue = copy(yytext);
+                               return (number);
+                       }
+"-"?[0-7]+[Bb]         {
+                               char buf[BUFSIZ];
+                               /*
+                                * octal constant.
+                                * change to C representation
+                                */
+                               yytext[yyleng-1] = '\0';
+                               if (*yytext != '-')
+                                       sprintf(buf,"0%s", yytext);
+                               else
+                                       sprintf(buf,"-0%s", yytext+1);
+                               yylval.stringvalue = copy(buf);
+                               return (number);
+                       }
+"-"?[0-9][0-9A-Fa-f]*[Xx]      {
+                               char buf[BUFSIZ];
+                               /*
+                                * hex constant.
+                                * change to C representation
+                                */
+                               yytext[yyleng-1] = '\0';
+                               if (*yytext != '-')
+                                       sprintf(buf,"0x%s", yytext);
+                               else
+                                       sprintf(buf,"-0x%s", yytext+1);
+                               yylval.stringvalue = copy(buf);
+                               return (number);
+                       }
+\"[^"\n"]*\"           {
+                               /*
+                                * string constant
+                                */
+                               
+                               yylval.stringvalue = copy(yytext);
+                               return (string);
+                       }
+\"([^\n"]|\"\")*\"     {
+                               register char *p;
+                               /*
+                                * string constant with embedded ""
+                                */
+
+                               for (p=yytext+1; p<yytext+yyleng-1; p++)
+                                       if (*p == '"') *p++='\\';
+                               yylval.stringvalue = copy(yytext);
+                               return (string);
+                       }
+[a-zA-Z_][a-zA-Z0-9_]* {
+                               yylval.stringvalue = copy(yytext);
+                               return (identifier);
+                       }
+.                      {
+                               return ((int) yytext[0]);
+                       }
+
+%%