|
|
1.1 ! root 1: %{ ! 2: #include "stdio.h" ! 3: #include "pret.h" ! 4: #include "y.tab.h" ! 5: ! 6: extern linenumber, nest; ! 7: extern char filename[256]; ! 8: ! 9: putback(c) ! 10: { unput(c); ! 11: } ! 12: ! 13: %} ! 14: %% ! 15: \n { linenumber++; } ! 16: \/\* { char c1, c2; /* comment string */ ! 17: ! 18: for(nest++, c2 = ' ';;){ ! 19: c1 = c2; ! 20: c2 = input(); ! 21: if (c1 == '/' && c2 == '*') ! 22: nest++; ! 23: else if (c1 == '*' && c2 == '/') ! 24: nest--; ! 25: if (nest <= 0) ! 26: break; ! 27: if (c2 == '\n') ! 28: linenumber++; ! 29: else if (c2 == 0) ! 30: whoops("unexpected eof (in comment)"); ! 31: } ! 32: } ! 33: [ \t] { ; } ! 34: ^#[ ]+[0-9]+[ ]+\"[^\"]+\"\n { ! 35: sscanf(&yytext[1], "%d \"%s\"\n", &linenumber, filename); ! 36: filename[strlen(filename)-1] = 0; /* strip the last " */ ! 37: } ! 38: queue { return(QUEUES); } ! 39: qset { return(QSET); } ! 40: pvar { return(PVAR); } ! 41: proc { return(PROCESS); } ! 42: if { return(IF); } ! 43: fi { return(FI); } ! 44: do { return(DO); } ! 45: od { return(OD); } ! 46: skip { return(skip); } ! 47: goto { return(GOTO); } ! 48: break { return(BREAK); } ! 49: any { return(DEFAULT); } ! 50: default { return(DEFAULT); } ! 51: assert { return(ASSERT); } ! 52: error { return(ERROR); } ! 53: timeout { return(timeout); } ! 54: \{ { return(PBEGIN); } ! 55: \} { return(END); } ! 56: [0-9]+ { yylval.resu = atoi(yytext); return(VALUE); } ! 57: [a-zA-Z][_a-zA-Z0-9]* { ! 58: yylval.resu = newstring(yytext); ! 59: if (isarrayvar(yytext)) return(ARNAME); ! 60: if (isqset(yytext)) return(QSNAME); ! 61: return(NAME); ! 62: } ! 63: _PROCID { yylval.resu = newstring("_PROCID"); return(NAME); } ! 64: "::" { return(FLAG); } ! 65: "->" { return(ARROW); } ! 66: ";" { return(SEMICOLON); } ! 67: ":" { return(COLON); } ! 68: \+\+ { return(INC); } ! 69: \-\- { return(DEC); } ! 70: \+\= { return(ADDEQ); } ! 71: \-\= { return(SUBEQ); } ! 72: \*\= { return(MULEQ); } ! 73: \/\= { return(DIVEQ); } ! 74: \%\= { return(MODEQ); } ! 75: \|\| { return(OR); } ! 76: \&\& { return(AND); } ! 77: \>\= { return(GE); } ! 78: \<\= { return(LE); } ! 79: \!\= { return(NE); } ! 80: \> { return(GT); } ! 81: \< { return(LT); } ! 82: \! { return(NOT); } ! 83: == { return(EQ); } ! 84: . { return(yytext[0]); }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.