|
|
1.1 ! root 1: /* @(#)kas0.l 1.1 */ ! 2: %% ! 3: %{ ! 4: struct symtab *op; ! 5: static struct symtab tmplab; ! 6: %} ! 7: [ \t] ; ! 8: "/*" { ! 9: char c; ! 10: ! 11: while(c=input()) { ! 12: if (c=='\n') ! 13: lineno++; ! 14: else if (c=='*') ! 15: if ((c=input())=='/') ! 16: break; ! 17: else ! 18: unput(c); ! 19: } ! 20: } ! 21: [\._a-zA-Z][0-9\._a-zA-Z]* { ! 22: if ((op = *lookup(1))->type&XTAG) { ! 23: yylval.sym = op; ! 24: return(op->type&~XTAG); ! 25: } else { ! 26: yylval.sym = op; ! 27: if ((op->type&XTYPE)==XUNDEF) ! 28: return(UNAME); ! 29: else return(DNAME); ! 30: } ! 31: } ! 32: [0-9][bf] { ! 33: op = &loclab[yytext[0]-'0']; ! 34: if (yytext[1]=='b') { ! 35: if (op->name[0]==0) ! 36: yyerror("undefined numeric label"); ! 37: tmplab.value = op->type; ! 38: tmplab.type = XTEXT; ! 39: yylval.sym = &tmplab; ! 40: return(DNAME); ! 41: } else { ! 42: yylval.sym = op; ! 43: return(TNAME); ! 44: } ! 45: } ! 46: 0[0-7]* { ! 47: sscanf(yytext, "%o", &yylval.ival); ! 48: return(INT); ! 49: } ! 50: 0[xX][0-9a-fA-F]+ { ! 51: sscanf(&yytext[2], "%x", &yylval.ival); ! 52: return(INT); ! 53: } ! 54: [1-9][0-9]* { ! 55: sscanf(yytext, "%d", &yylval.ival); ! 56: return(INT); ! 57: } ! 58: "\n" return(NL); ! 59: "%" return(POP); ! 60: "(" return(LP); ! 61: ")" return(RP); ! 62: "*" return(MUL); ! 63: "/" return(DIV); ! 64: "++" return(INC); ! 65: "+" return(PLUS); ! 66: "-" return(MINUS); ! 67: "," return(CM); ! 68: ":" return(COLON); ! 69: ";" return(SEMI); ! 70: "|" return(BAR); ! 71: "~" return(NOT); ! 72: "&" return(AND); ! 73: ">>" return(RS); ! 74: "<<" return(LS); ! 75: "^" return(XOR); ! 76: ^!.* { ! 77: system(&yytext[1]); ! 78: printf("!\n"); ! 79: } ! 80: ^#.*\n { ! 81: if (sscanf(&yytext[1], "%d%*[\" ]%[^\"\n]", &lineno, infile = instr)<1) ! 82: yyerror("illegal preprocessor line"); ! 83: } ! 84: '\\.' { ! 85: switch(yytext[2]) { ! 86: case '0': ! 87: yylval.ival = 0; ! 88: break; ! 89: case 'b': ! 90: yylval.ival = 010; ! 91: break; ! 92: case 't': ! 93: yylval.ival = 011; ! 94: break; ! 95: case 'n': ! 96: yylval.ival = 012; ! 97: break; ! 98: case 'f': ! 99: yylval.ival = 014; ! 100: break; ! 101: case 'r': ! 102: yylval.ival = 015; ! 103: break; ! 104: default: ! 105: yylval.ival = yytext[2]; ! 106: } ! 107: return(INT); ! 108: } ! 109: '.' { ! 110: yylval.ival = yytext[1]; ! 111: return(INT); ! 112: } ! 113: \"[^"\n]*\" { ! 114: yytext[yyleng-1] = '\0'; ! 115: strcpy(dbstr, &yytext[1]); ! 116: yylval.str = dbstr; ! 117: return(STR); ! 118: } ! 119: . { ! 120: yyerror("Illegal character"); ! 121: return(NOCHAR); ! 122: } ! 123: %%
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.