Annotation of researchv9/cmd/pic/picl.l, revision 1.1.1.1

1.1       root        1: %Start A str def sc br thru sh
                      2: %e 1700
                      3: %k 120
                      4: %a 1800
                      5: %o 1500
                      6: %p 5000
                      7: %n 700
                      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 struct  symtab  symtab[];
                     19: extern char    *filename, *copythru();
                     20: 
                     21: #define        CADD    cbuf[clen++]=yytext[0]; if(clen>=CBUFLEN-1) {yyerror("string too long", cbuf); BEGIN A;}
                     22: #define        CBUFLEN 500
                     23: char   cbuf[CBUFLEN];
                     24: int    c, clen, cflag, delim;
                     25: int    ifsw    = 0;    /* 1 if if statement in progress */
                     26: %}
                     27: 
                     28: A      [a-zA-Z_]
                     29: B      [a-zA-Z0-9_]
                     30: D      [0-9]
                     31: WS     [ \t]
                     32: 
                     33: %%
                     34:        switch (yybgin-yysvec-1) {      /* witchcraft */
                     35:        case 0:
                     36:                BEGIN A;
                     37:                break;
                     38:        case sc:
                     39:                BEGIN A;
                     40:                return('}');
                     41:        case br:
                     42:                BEGIN A;
                     43:                return(']');
                     44:        }
                     45: 
                     46: <A>{WS}                ;
                     47: <A>"\\"\n      ;
                     48: <A>\n          { return(ST); }
                     49: <A>";"         { return(ST); }
                     50: <A>"}"         { BEGIN sc; return(ST); }
                     51: <A>"]"         { BEGIN br; return(ST); }
                     52: 
                     53: <A>^".PS".*    { if (curfile == infile) yyerror(".PS found inside .PS/.PE"); }
                     54: <A>^"."P[EF].* { if (curfile == infile) {
                     55:                        yylval.i = yytext[2];
                     56:                        PEseen = 1;
                     57:                        return(EOF);
                     58:                  }
                     59:                }
                     60: <A>^".".*      { yylval.p = tostring(yytext); return(TROFF); }
                     61: 
                     62: <A>print       return(yylval.i = PRINT);
                     63: <A>box         return(yylval.i = BOX);
                     64: <A>circle      return(yylval.i = CIRCLE);
                     65: <A>arc         return(yylval.i = ARC);
                     66: <A>ellipse     return(yylval.i = ELLIPSE);
                     67: <A>arrow       return(yylval.i = ARROW);
                     68: <A>spline      return(yylval.i = SPLINE);
                     69: <A>line                return(yylval.i = LINE);
                     70: <A>move                return(yylval.i = MOVE);
                     71: <A>"[]"                return(yylval.i = BLOCK);
                     72: <A>reset       return(RESET);
                     73: <A>sprintf     return(SPRINTF);
                     74: 
                     75: <A>same                return(SAME);
                     76: <A>between     return(BETWEEN);
                     77: <A>and         return(AND);
                     78: 
                     79: <A>of          ;
                     80: <A>the         ;
                     81: <A>way         ;
                     82: 
                     83: <A>"."(e|east)         { yylval.i = EAST; return(CORNER); }
                     84: <A>"."(r|right)                { yylval.i = EAST; return(CORNER); }
                     85: <A>"."(w|west)         { yylval.i = WEST; return(CORNER); }
                     86: <A>"."(l|left)         { yylval.i = WEST; return(CORNER); }
                     87: <A>"."(n|north)                { yylval.i = NORTH; return(CORNER); }
                     88: <A>"."(t|top)          { yylval.i = NORTH; return(CORNER); }
                     89: <A>"."(s|south)                { yylval.i = SOUTH; return(CORNER); }
                     90: <A>"."(b|bot|bottom)   { yylval.i = SOUTH; return(CORNER); }
                     91: <A>"."(c|center)       { yylval.i = CENTER; return(CORNER); }
                     92: <A>".start"            { yylval.i = START; return(CORNER); }
                     93: <A>".end"              { yylval.i = END; return(CORNER); }
                     94: <A>".ne"               { yylval.i = NE; return(CORNER); }
                     95: <A>".se"               { yylval.i = SE; return(CORNER); }
                     96: <A>".nw"               { yylval.i = NW; return(CORNER); }
                     97: <A>".sw"               { yylval.i = SW; return(CORNER); }
                     98: 
                     99: <A>top" "+of           { yylval.i = NORTH; return(CORNER); }
                    100: <A>north" "+of         { yylval.i = NORTH; return(CORNER); }
                    101: <A>bottom" "+of                { yylval.i = SOUTH; return(CORNER); }
                    102: <A>south" "+of         { yylval.i = SOUTH; return(CORNER); }
                    103: <A>left" "+of          { yylval.i = WEST; return(CORNER); }
                    104: <A>west" "+of          { yylval.i = WEST; return(CORNER); }
                    105: <A>right" "+of         { yylval.i = EAST; return(CORNER); }
                    106: <A>east" "+of          { yylval.i = EAST; return(CORNER); }
                    107: <A>center" "+of                { yylval.i = CENTER; return(CORNER); }
                    108: <A>start" "+of         { yylval.i = START; return(CORNER); }
                    109: <A>end" "+of           { yylval.i = END; return(CORNER); }
                    110: 
                    111: <A>height|ht   { yylval.i = HEIGHT; return(ATTR); }
                    112: <A>width|wid   { yylval.i = WIDTH; return(ATTR); }
                    113: <A>radius|rad  { yylval.i = RADIUS; return(ATTR); }
                    114: <A>diameter|diam { yylval.i = DIAMETER; return(ATTR); }
                    115: <A>size                { yylval.i = SIZE; return(ATTR); }
                    116: <A>left                { yylval.i = LEFT; return(DIR); }
                    117: <A>right       { yylval.i = RIGHT; return(DIR); }
                    118: <A>up          { yylval.i = UP; return(DIR); }
                    119: <A>down                { yylval.i = DOWN; return(DIR); }
                    120: <A>cw          { yylval.i = CW; return(ATTR); }
                    121: <A>clockwise   { yylval.i = CW; return(ATTR); }
                    122: <A>ccw         { yylval.i = CCW; return(ATTR); }
                    123: <A>invis(ible)?        { yylval.i = INVIS; return(ATTR); }
                    124: <A>solid       ;
                    125: <A>dot(ted)?   return(yylval.i = DOT);
                    126: <A>dash(ed)?   return(yylval.i = DASH);
                    127: <A>chop                return(yylval.i = CHOP);
                    128: 
                    129: <A>spread      { yylval.i = SPREAD; return TEXTATTR; }
                    130: <A>fill                { yylval.i = FILL; return TEXTATTR; }
                    131: <A>ljust       { yylval.i = LJUST; return TEXTATTR; }
                    132: <A>rjust       { yylval.i = RJUST; return TEXTATTR; }
                    133: <A>above       { yylval.i = ABOVE; return TEXTATTR; }
                    134: <A>below       { yylval.i = BELOW; return TEXTATTR; }
                    135: <A>center      { yylval.i = CENTER; return TEXTATTR; }
                    136: 
                    137: <A>"<-"                { yylval.i = HEAD1; return(HEAD); }
                    138: <A>"->"                { yylval.i = HEAD2; return(HEAD); }
                    139: <A>"<->"       { yylval.i = HEAD12; return(HEAD); }
                    140: 
                    141: <A>".x"                        return(yylval.i = DOTX);
                    142: <A>".y"                        return(yylval.i = DOTY);
                    143: <A>"."(ht|height)      return(yylval.i = DOTHT);
                    144: <A>"."(wid|width)      return(yylval.i = DOTWID);
                    145: <A>"."(rad|radius)     return(yylval.i = DOTRAD);
                    146: 
                    147: <A>from                return(yylval.i = FROM);
                    148: <A>to          return(yylval.i = TO);
                    149: <A>at          return(yylval.i = AT);
                    150: <A>by          return(yylval.i = BY);
                    151: <A>with                return(yylval.i = WITH);
                    152: <A>last                return(yylval.i = LAST);
                    153: 
                    154: <A>log         return(LOG);
                    155: <A>exp         return(EXP);
                    156: <A>sin         return(SIN);
                    157: <A>cos         return(COS);
                    158: <A>atan2       return(ATAN2);
                    159: <A>sqrt                return(SQRT);
                    160: <A>rand                return(RAND);
                    161: <A>max         return(MAX);
                    162: <A>min         return(MIN);
                    163: <A>int         return(INT);
                    164: 
                    165: <A>"=="                return(EQ);
                    166: <A>">="                return(GE);
                    167: <A>"<="                return(LE);
                    168: <A>"!="                return(NEQ);
                    169: <A>">"         return(GT);
                    170: <A>"<"         return(LT);
                    171: <A>"&&"                return(ANDAND);
                    172: <A>"||"                return(OROR);
                    173: <A>"!"         return(NOT);    
                    174: 
                    175: <A>Here                return(yylval.i = HERE);
                    176: 
                    177: <A>for         return(FOR);
                    178: <A>^Endfor\n   { endfor(); }
                    179: <A>do          { yylval.p = delimstr("loop body"); return(DOSTR); }
                    180: 
                    181: <A>copy|include                return(COPY);
                    182: <A>(thru|through){WS}+ { BEGIN thru; return(THRU); }
                    183: <thru>{A}{B}*|.                { yylval.p = copythru(yytext); BEGIN A; return(DEFNAME); }
                    184: <A>until               return(UNTIL);
                    185: 
                    186: <A>if          { ifsw = 1; return(IF); }
                    187: <A>then                { if (!ifsw) { yylval.i = THEN; return(ATTR); }
                    188:                  yylval.p = delimstr("then part"); ifsw = 0;
                    189:                  return(THENSTR); }
                    190: <A>else                { yylval.p = delimstr("else part"); return(ELSESTR); }
                    191: 
                    192: <A>sh{WS}+     { BEGIN sh;
                    193:                  if ((delim = input()) == '{') delim = '}';    /* no nested {} */
                    194:                  shell_init(); }
                    195: <sh>{A}{B}*    { struct symtab *p;
                    196:                  if (yytext[0] == delim) {
                    197:                        shell_exec();
                    198:                        BEGIN A;
                    199:                  } else {
                    200:                        p = lookup(yytext, 0);
                    201:                        if (p != NULL && p->s_type == DEFNAME) {
                    202:                                c = input();
                    203:                                unput(c);
                    204:                                if (c == '(')
                    205:                                        dodef(p);
                    206:                                else
                    207:                                        pbstr(p->s_val.p);
                    208:                        } else
                    209:                                shell_text(yytext);
                    210:                  }
                    211:                }
                    212: <sh>.|\n       { if (yytext[0] == delim) {
                    213:                        shell_exec();
                    214:                        BEGIN A;
                    215:                  } else
                    216:                        shell_text(yytext);
                    217:                }
                    218: 
                    219: <A>define{WS}+         { BEGIN def; }
                    220: <def>{A}{B}*           { definition(yytext); BEGIN A; }
                    221: <A>undef(ine)?{WS}+{A}{B}*     { undefine(yytext); }
                    222: 
                    223: <A>first               { yylval.i = 1; return(NTH); }
                    224: <A>{D}+(th|nd|rd|st)   { yylval.i = atoi(yytext); return(NTH); }
                    225: <A>({D}+("."?){D}*|"."{D}+)((e|E)("+"|-)?{D}+)?i? {
                    226:                        yylval.f = atof(yytext); return(NUMBER); }
                    227: 
                    228: <A>{A}{B}* {   struct symtab *p;
                    229:                p = lookup(yytext);
                    230:                if (p != NULL && p->s_type == DEFNAME) {
                    231:                        c = input();
                    232:                        unput(c);
                    233:                        if (c == '(')   /* it's name(...) */
                    234:                                dodef(p);
                    235:                        else {  /* no argument list */
                    236:                                pbstr(p->s_val);
                    237:                                dprintf("pushing back `%s'\n", p->s_val);
                    238:                        }
                    239:                } else if (islower(yytext[0])) {
                    240:                        yylval.p = tostring(yytext);
                    241:                        return(VARNAME);
                    242:                } else {
                    243:                        yylval.p = tostring(yytext);
                    244:                        return(PLACENAME);
                    245:                }
                    246:        }
                    247: 
                    248: <A>\"          { BEGIN str; clen=0; }
                    249: <str>\"                { cbuf[clen]=0; yylval.p = tostring(cbuf); BEGIN A; return(TEXT); }
                    250: <str>\n                { yyerror("newline in string"); BEGIN A; return(ST); }
                    251: <str>"\\\""    { cbuf[clen++]='"'; }
                    252: <str>"\\"t     { cbuf[clen++]='\t'; }
                    253: <str>"\\\\"    { cbuf[clen++]='\\'; }
                    254: <str>.         { CADD; }
                    255: 
                    256: <A>#.*         ;
                    257: 
                    258: <A>.           return(yylval.i = yytext[0]);
                    259: 
                    260: %%

unix.superglobalmegacorp.com

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