Annotation of researchv9/jtools/src/Jpic/picl.l, revision 1.1.1.1

1.1       root        1: %Start A str comment def sc br
                      2: %e 1300
                      3: %k 100
                      4: %a 1400
                      5: %o 1200
                      6: %p 3500
                      7: %n 600
                      8: 
                      9: %{
                     10: #undef input
                     11: #undef unput
                     12: #include <stdio.h>
                     13: #include <ctype.h>
                     14: #include "pic.h"
                     15: #include "y.tab.h"
                     16: 
                     17: extern double  atof();
                     18: extern int     dbg;
                     19: #define        dprintf if(dbg)printf
                     20: extern int     yylval;
                     21: extern struct  symtab  symtab[];
                     22: extern char    *filename;
                     23: extern int     synerr;
                     24: extern float   lastfloat;
                     25: 
                     26: #define        CADD    cbuf[clen++]=yytext[0]; if(clen>=CBUFLEN-1) {yyerror("string too long", cbuf); BEGIN A;}
                     27: #define        CBUFLEN 150
                     28: char   cbuf[CBUFLEN];
                     29: int    clen, cflag;
                     30: %}
                     31: 
                     32: A      [a-zA-Z_]
                     33: B      [a-zA-Z0-9_]
                     34: D      [0-9]
                     35: WS     [ \t]
                     36: 
                     37: %%
                     38:        switch (yybgin-yysvec-1) {      /* witchcraft */
                     39:        case 0:
                     40:                BEGIN A;
                     41:                break;
                     42:        case sc:
                     43:                BEGIN A;
                     44:                return('}');
                     45:        case br:
                     46:                BEGIN A;
                     47:                return(']');
                     48:        }
                     49: 
                     50: <A>{WS}                ;
                     51: <A>"\\"\n      ;
                     52: <A>\n          { return(ST); }
                     53: <A>";"         { return(ST); }
                     54: <A>"}"         { BEGIN sc; return(ST); }
                     55: <A>"]"         { BEGIN br; return(ST); }
                     56: 
                     57: <A>^".".*      { if (yytext[1] == 'P' && (yytext[2] == 'E' || yytext[2] == 'F')) {
                     58:                        yylval = yytext[2];
                     59:                        return(EOF);
                     60:                  } else {
                     61:                        yylval = tostring(yytext);
                     62:                        return(TROFF);
                     63:                  }
                     64:                }
                     65: 
                     66: <A>print       return(yylval = PRINT);
                     67: <A>box         return(yylval = BOX);
                     68: <A>circle      return(yylval = CIRCLE);
                     69: <A>arc         return(yylval = ARC);
                     70: <A>ellipse     return(yylval = ELLIPSE);
                     71: <A>arrow       return(yylval = ARROW);
                     72: <A>spline      return(yylval = SPLINE);
                     73: <A>line                return(yylval = LINE);
                     74: <A>move                return(yylval = MOVE);
                     75: <A>"[]"                return(yylval = BLOCK);
                     76: 
                     77: <A>same                return(SAME);
                     78: <A>between     return(BETWEEN);
                     79: <A>and         return(AND);
                     80: 
                     81: <A>of          ;
                     82: <A>the         ;
                     83: <A>way         ;
                     84: 
                     85: <A>".e"                { yylval = EAST; return(CORNER); }
                     86: <A>".east"     { yylval = EAST; return(CORNER); }
                     87: <A>".r"                { yylval = EAST; return(CORNER); }
                     88: <A>".right"    { yylval = EAST; return(CORNER); }
                     89: <A>".w"                { yylval = WEST; return(CORNER); }
                     90: <A>".west"     { yylval = WEST; return(CORNER); }
                     91: <A>".l"                { yylval = WEST; return(CORNER); }
                     92: <A>".left"     { yylval = WEST; return(CORNER); }
                     93: <A>".n"                { yylval = NORTH; return(CORNER); }
                     94: <A>".north"    { yylval = NORTH; return(CORNER); }
                     95: <A>".t"                { yylval = NORTH; return(CORNER); }
                     96: <A>".top"      { yylval = NORTH; return(CORNER); }
                     97: <A>".s"                { yylval = SOUTH; return(CORNER); }
                     98: <A>".south"    { yylval = SOUTH; return(CORNER); }
                     99: <A>".b"                { yylval = SOUTH; return(CORNER); }
                    100: <A>".bot"      { yylval = SOUTH; return(CORNER); }
                    101: <A>".bottom"   { yylval = SOUTH; return(CORNER); }
                    102: <A>".c"                { yylval = CENTER; return(CORNER); }
                    103: <A>".center"   { yylval = CENTER; return(CORNER); }
                    104: <A>".start"    { yylval = START; return(CORNER); }
                    105: <A>".end"      { yylval = END; return(CORNER); }
                    106: <A>".ne"               { yylval = NE; return(CORNER); }
                    107: <A>"."upper" "*right   { yylval = NE; return(CORNER); }
                    108: <A>".se"               { yylval = SE; return(CORNER); }
                    109: <A>"."lower" "*right   { yylval = SE; return(CORNER); }
                    110: <A>".nw"               { yylval = NW; return(CORNER); }
                    111: <A>"."upper" "*left    { yylval = NW; return(CORNER); }
                    112: <A>".sw"               { yylval = SW; return(CORNER); }
                    113: <A>"."lower" "*left    { yylval = SW; return(CORNER); }
                    114: 
                    115: <A>top" "+of           { yylval = NORTH; return(CORNER); }
                    116: <A>north" "+of         { yylval = NORTH; return(CORNER); }
                    117: <A>bottom" "+of                { yylval = SOUTH; return(CORNER); }
                    118: <A>south" "+of         { yylval = SOUTH; return(CORNER); }
                    119: <A>left" "+of          { yylval = WEST; return(CORNER); }
                    120: <A>west" "+of          { yylval = WEST; return(CORNER); }
                    121: <A>right" "+of         { yylval = EAST; return(CORNER); }
                    122: <A>east" "+of          { yylval = EAST; return(CORNER); }
                    123: <A>center" "+of                { yylval = CENTER; return(CORNER); }
                    124: <A>start" "+of         { yylval = START; return(CORNER); }
                    125: <A>end" "+of           { yylval = END; return(CORNER); }
                    126: <A>upper" "+right" "+of        { yylval = NE; return(CORNER); }
                    127: <A>upper" "+left" "+of { yylval = NW; return(CORNER); }
                    128: <A>lower" "+right" "+of        { yylval = SE; return(CORNER); }
                    129: <A>lower" "+left" "+of { yylval = SW; return(CORNER); }
                    130: 
                    131: <A>height      { yylval = HEIGHT; return(ATTR); }
                    132: <A>ht          { yylval = HEIGHT; return(ATTR); }
                    133: <A>wid         { yylval = WIDTH; return(ATTR); }
                    134: <A>width       { yylval = WIDTH; return(ATTR); }
                    135: <A>rad         { yylval = RADIUS; return(ATTR); }
                    136: <A>radius      { yylval = RADIUS; return(ATTR); }
                    137: <A>diam                { yylval = DIAMETER; return(ATTR); }
                    138: <A>diameter    { yylval = DIAMETER; return(ATTR); }
                    139: <A>size                { yylval = SIZE; return(ATTR); }
                    140: <A>left                { yylval = LEFT; return(DIR); }
                    141: <A>right       { yylval = RIGHT; return(DIR); }
                    142: <A>up          { yylval = UP; return(DIR); }
                    143: <A>down                { yylval = DOWN; return(DIR); }
                    144: <A>cw          { yylval = CW; return(ATTR); }
                    145: <A>ccw         { yylval = CCW; return(ATTR); }
                    146: <A>then                { yylval = THEN; return(ATTR); }
                    147: <A>invis       { yylval = INVIS; return(ATTR); }
                    148: <A>invisible   { yylval = INVIS; return(ATTR); }
                    149: <A>dot         return(yylval = DOT);
                    150: <A>dotted      return(yylval = DOT);
                    151: <A>dash                return(yylval = DASH);
                    152: <A>dashed      return(yylval = DASH);
                    153: <A>chop                return(yylval = CHOP);
                    154: 
                    155: <A>spread      return(yylval = SPREAD);
                    156: <A>fill                return(yylval = FILL);
                    157: <A>ljust       return(yylval = LJUST);
                    158: <A>rjust       return(yylval = RJUST);
                    159: <A>above       return(yylval = ABOVE);
                    160: <A>below       return(yylval = BELOW);
                    161: 
                    162: <A>"<-"                { yylval = HEAD1; return(HEAD); }
                    163: <A>"->"                { yylval = HEAD2; return(HEAD); }
                    164: <A>"<->"       { yylval = HEAD12; return(HEAD); }
                    165: 
                    166: <A>".x"                return(yylval = DOTX);
                    167: <A>".y"                return(yylval = DOTY);
                    168: <A>".ht"       return(yylval = DOTHT);
                    169: <A>".height"   return(yylval = DOTHT);
                    170: <A>".wid"      return(yylval = DOTWID);
                    171: <A>".width"    return(yylval = DOTWID);
                    172: <A>".rad"      return(yylval = DOTRAD);
                    173: <A>".radius"   return(yylval = DOTRAD);
                    174: 
                    175: <A>from                return(yylval = FROM);
                    176: <A>to          return(yylval = TO);
                    177: <A>at          return(yylval = AT);
                    178: <A>by          return(yylval = BY);
                    179: <A>with                return(yylval = WITH);
                    180: <A>last                return(yylval = LAST);
                    181: 
                    182: <A>Here                return(yylval = HERE);
                    183: <A>define{WS}+ { BEGIN def; }
                    184: <def>{A}{B}*   { yylval = definition(yytext); BEGIN A; return(TROFF); }
                    185: 
                    186: <A>first               { yylval = 1; return(NTH); }
                    187: <A>{D}+(th|nd|rd|st)   { yylval = atoi(yytext); return(NTH); }
                    188: <A>({D}+("."?){D}*|"."{D}+)i?  {
                    189:                int i, inch;
                    190:                inch = 0;
                    191:                for (i = 0; i < yyleng; i++)
                    192:                        if (yytext[i] == '.' || yytext[i] == 'i') {
                    193:                                inch++;
                    194:                                break;
                    195:                        }
                    196:                if (inch)
                    197:                        yylval = atof(yytext) * getvar("scale") + 0.5;
                    198:                else
                    199:                        yylval = atoi(yytext);
                    200:                lastfloat = atof(yytext);
                    201:                return(NUMBER); }
                    202: 
                    203: <A>{A}{B}* {
                    204:                int c;
                    205:                char buf[100];
                    206:                struct symtab *p;
                    207:                p = lookup(yytext);
                    208:                if (p != NULL && p->s_type == DEFNAME) {
                    209:                        yylval = defuse(yytext, p);
                    210:                        return(TROFF);
                    211:                } else if (islower(yytext[0])) {
                    212:                        yylval = (int) tostring(yytext);
                    213:                        return(VARNAME);
                    214:                } else {
                    215:                        yylval = (int) tostring(yytext);
                    216:                        return(PLACENAME);
                    217:                }
                    218:        }
                    219: 
                    220: <A>\"          { BEGIN str; clen=0; }
                    221: 
                    222: <A>#           { BEGIN comment; }
                    223: <comment>\n    { BEGIN A; return(ST); }
                    224: <comment>.     ;
                    225: 
                    226: <A>.           { yylval = yytext[0]; return(yytext[0]); }
                    227: 
                    228: <str>\"                { BEGIN A; cbuf[clen]=0; yylval = tostring(cbuf); return(TEXT); }
                    229: <str>\n                { yyerror("newline in string"); BEGIN A; return(ST); }
                    230: <str>"\\\""    { cbuf[clen++]='"'; }
                    231: <str>"\\"t     { cbuf[clen++]='\t'; }
                    232: <str>"\\\\"    { cbuf[clen++]='\\'; }
                    233: <str>.         { CADD; }
                    234: 
                    235: %%

unix.superglobalmegacorp.com

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