Annotation of researchv9/cmd/pic/picl.l, revision 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.