Annotation of 43BSD/contrib/dipress/src/bin/texttoip/textlex.l, revision 1.1.1.1

1.1       root        1: %{
                      2: /*
                      3:  *  texttoip - convert a textual representation of interpress to a real
                      4:  *            interpress file.  The text produced by "iptotext" is the input
                      5:  *            that is recognized.
                      6:  *
                      7:  *  This is the lex specification of the input scanner.
                      8:  *
                      9:  *  Written for Xerox Corporation by William LeFebvre
                     10:  *
                     11:  *  6-May-1984
                     12:  *
                     13:  * Copyright (c) 1984, 1985 Xerox Corp.
                     14:  *
                     15:  * HISTORY
                     16:  * 01-Dec-85  lee at Xerox, WRC
                     17:  *     Linted.
                     18:  *
                     19:  * 28-apr-85  ed flint
                     20:  *     add conditional compilation for vax11-c (vms)
                     21:  *
                     22:  *
                     23:  * if using this file on vms, you must edit this file and add the following 
                     24:  * lines around the #include "stdio.h" line which is at the top of the file
                     25:  *
                     26:  *             #ifdef vax11c
                     27:  *             # include stdio
                     28:  *             #else
                     29:  *             # include "stdio.h"
                     30:  *             #endif
                     31:  */
                     32: 
                     33: 
                     34: #ifdef vax11c
                     35: # include ctype
                     36: #else
                     37: # include <ctype.h>
                     38: #endif
                     39: 
                     40: # include "iptokens.h"
                     41: # include "texttoken.h"
                     42: # include "ipnames.h"
                     43: 
                     44: # define    short_or_long(ch)  (ch != '>' ? 1 : 2)
                     45: 
                     46: extern int yylval_long;
                     47: extern char *yylval_charP;
                     48: char *buffptr;
                     49: char string_buffer[1024];
                     50: %}
                     51: 
                     52: %%
                     53: 
                     54: ^"File: "      {
                     55:                    return(T_file);
                     56:                }
                     57: 
                     58: ^"Header: "    {
                     59:                    return(T_header);
                     60:                }
                     61: 
                     62: ^>[> ]"Comment: "      {
                     63:                            yylval_long = short_or_long(yytext[1]);
                     64:                            return(T_seq_comment);
                     65:                        }
                     66: 
                     67: ^>[> ]"Identifier: "   {
                     68:                            yylval_long = short_or_long(yytext[1]);
                     69:                            return(T_seq_identifier);
                     70:                        }
                     71: 
                     72: ^>[> ]"Insert file: "  {
                     73:                            yylval_long = short_or_long(yytext[1]);
                     74:                            return(T_seq_insert_file);
                     75:                        }
                     76: 
                     77: ^>[> ]"Integer: "      {
                     78:                            yylval_long = short_or_long(yytext[1]);
                     79:                            return(T_seq_integer);
                     80:                        }
                     81: 
                     82: ^>[> ]"Rational: "     {
                     83:                            yylval_long = short_or_long(yytext[1]);
                     84:                            return(T_seq_rational);
                     85:                        }
                     86: 
                     87: ^>[> ]"String: "       {
                     88:                            yylval_long = short_or_long(yytext[1]);
                     89:                            return(T_seq_string);
                     90:                        }
                     91: 
                     92: ^>[> ]"Adaptive Pixel Vector: "        {
                     93:                            yylval_long = short_or_long(yytext[1]);
                     94:                            return(T_seq_apv);
                     95:                        }
                     96: 
                     97: ^>[> ]"Compressed Pixel Vector: "      {
                     98:                            yylval_long = short_or_long(yytext[1]);
                     99:                            return(T_seq_cpv);
                    100:                        }
                    101: 
                    102: ^>[> ]"Packed Pixel Vector: "  {
                    103:                            yylval_long = short_or_long(yytext[1]);
                    104:                            return(T_seq_ppv);
                    105:                        }
                    106: 
                    107: [+-]?[0-9A-Fa-f][0-9A-Fa-f]*   {
                    108:                            yylval_long = getnum(yytext);
                    109:                            return(T_number);
                    110:                        }
                    111: 
                    112: ^[a-zA-Z{}][a-zA-Z]*   {
                    113:                            register char *ptr;
                    114: 
                    115:                            for (ptr = yytext; *ptr; ptr++)
                    116:                            {
                    117:                                if (isupper(*ptr))
                    118:                                {
                    119:                                    *ptr = tolower(*ptr);
                    120:                                }
                    121:                            }
                    122:                            for (yylval_long = 0; yylval_long <= OP_LIMIT;
                    123:                                        yylval_long++)
                    124:                            {
                    125:                                if (strcmp(yytext, op_names[yylval_long]) == 0)
                    126:                                {
                    127:                                    return(T_operator);
                    128:                                }
                    129:                            }
                    130:                            return(T_operator);
                    131:                        }
                    132: 
                    133: \"                     {
                    134:                            unsigned char ch;
                    135:                            int val = 0;
                    136:                            int cnt = 0;
                    137: 
                    138:                            yylval_charP = buffptr = string_buffer;
                    139: 
                    140:                            while ((ch = input()) != '"')
                    141:                            {
                    142:                                if (ch == '\\')
                    143:                                {
                    144:                                    ch = input();
                    145:                                    if (ch >= '0' && ch <= '9')
                    146:                                    {
                    147:                                        do
                    148:                                        {
                    149:                                            val <<= 3;
                    150:                                            val += (ch - '0');
                    151:                                            ch = input();
                    152:                                        } while (ch >= '0' && ch <= '9' &&
                    153:                                                 cnt++ < 3);
                    154:                                        unput(ch);
                    155:                                        ch = val;
                    156:                                    }
                    157:                                }
                    158:                                *buffptr++ = ch;
                    159:                            }
                    160:                            *buffptr = '\0';
                    161:                            return(T_string);
                    162:                        }
                    163: 
                    164: [a-zA-Z][a-zA-Z0-9\-]* {
                    165:                            yylval_charP = yytext;
                    166:                            return(T_identifier);
                    167:                        }
                    168: 
                    169: [ \t][ \t]*            {
                    170:                            yyleng = 0;         /* gobble white space */
                    171:                            yymore();
                    172:                        }
                    173: 
                    174: \(.*\)                 {
                    175:                            yyleng = 0;         /* gobble comments */
                    176:                            yymore();
                    177:                        }
                    178: 
                    179: ^\(.*\)\n              {
                    180:                            /* comment that spans the whole line */
                    181:                            yyleng = 0;
                    182:                            yymore();
                    183:                        }
                    184: 
                    185: \n                     {
                    186:                            return(T_newline);
                    187:                        }
                    188: 
                    189: .                      {
                    190:                            yylval_long = yytext[yyleng-1];
                    191:                            return(T_character);
                    192:                        }
                    193: 
                    194: %%
                    195: 
                    196: extern int radix;
                    197: 
                    198: getnum(str)
                    199: 
                    200: char *str;
                    201: 
                    202: {
                    203:     register int val;
                    204:     register int digit;
                    205: 
                    206:     /* take the easy and fast way out for base 10 */
                    207:     if (radix == 10)
                    208:     {
                    209:        return(atoi(str));
                    210:     }
                    211: 
                    212:     /* otherwise this is a standard "convert any radix" algorithm */
                    213:     val = 0;
                    214:     while ((digit = *str++) != '\0')
                    215:     {
                    216:        if ((digit -= '0') > 9)
                    217:        {
                    218:            /* it is a letter */
                    219:            if ((digit -= ('A' - '0' - 10)) > 15)
                    220:            {
                    221:                /* it is a lower case digit */
                    222:                digit -= ('a' - 'A');
                    223:            }
                    224:        }
                    225:        if (digit >= radix)
                    226:        {
                    227:            /* this is really too much!  give up at this point */
                    228:            return(val);
                    229:        }
                    230:        val *= radix;
                    231:        val += digit;
                    232:     }
                    233:     return(val);
                    234: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.