📄 rlex.c
字号:
#ifndef lintstatic char sccsid[] = "@(#)rlex.c 1.2 (Berkeley) 8/11/83";#endif# include "r.h"char *keyword [] = { "do", "if", "else", "for", "repeat", "until", "while", "break", "next", "define", "include", "return", "switch", "case", "default", 0};int keytran[] = { DO, IF, ELSE, FOR, REPEAT, UNTIL, WHILE, BREAK, NEXT, DEFINE, INCLUDE, RETURN, SWITCH, CASE, DEFAULT, 0};char *fcnloc; /* spot for "function" */int svargc;char **svargv;char *curfile[10] = { "" };int infptr = 0;FILE *outfil = { stdout };FILE *infile[10] = { stdin };int linect[10];int contfld = CONTFLD; /* place to put continuation char */int printcom = 0; /* print comments if on */int hollerith = 0; /* convert "..." to 27H... if on */#ifdef gcoschar *ratfor "tssrat";int bcdrat[2];char *bwkmeter ". bwkmeter ";int bcdbwk[5];#endifmain(argc,argv) int argc; char **argv; { int i; while(argc>1 && argv[1][0]=='-') { if(argv[1][1]=='6') { contfld=6; if (argv[1][2]!='\0') contchar = argv[1][2]; } else if (argv[1][1] == 'C') printcom++; else if (argv[1][1] == 'h') hollerith++; argc--; argv++; }#ifdef gcos if (!intss()) { _fixup(); ratfor = "batrat"; } ascbcd(ratfor,bcdrat,6); ascbcd(bwkmeter,bcdbwk,24); acdata(bcdrat[0],1); acupdt(bcdbwk[0]); if (!intss()) { if ((infile[infptr]=fopen("s*", "r")) == NULL) cant("s*"); if ((outfil=fopen("*s", "w")) == NULL) cant("*s"); }#endif svargc = argc; svargv = argv; if (svargc > 1) putbak('\0'); for (i=0; keyword[i]; i++) install(keyword[i], "", keytran[i]); fcnloc = install("function", "", 0); yyparse();#ifdef gcos if (!intss()) bexit(errorflag);#endif exit(errorflag);}#ifdef gcosbexit(status) { /* this is the batch version of exit for gcos tss */ FILE *inf, *outf; char c; fclose(stderr); /* make sure diagnostics get flushed */ if (status) /* abort */ _nogud(); /* good: copy output back to s*, call forty */ fclose(outfil,"r"); fclose(infile[0],"r"); inf = fopen("*s", "r"); outf = fopen("s*", "w"); while ((c=getc(inf)) != EOF) putc(c, outf); fclose(inf,"r"); fclose(outf,"r"); __imok();}#endifcant(s) char *s; { linect[infptr] = 0; curfile[infptr] = s; error("can't open"); exit(1);}inclstat() { int c; char *ps; char fname[100]; while ((c = getchr()) == ' ' || c == '\t'); if (c == '(') { for (ps=fname; (*ps=getchr()) != ')'; ps++); *ps = '\0'; } else if (c == '"' || c == '\'') { for (ps=fname; (*ps=getchr()) != c; ps++); *ps = '\0'; } else { putbak(c); for (ps=fname; (*ps=getchr()) != ' ' &&*ps!='\t' && *ps!='\n' && *ps!=';'; ps++); *ps = '\0'; } if ((infile[++infptr] = fopen(fname,"r")) == NULL) { cant(fname); exit(1); } linect[infptr] = 0; curfile[infptr] = fname;}char str[500];int nstr;yylex() { int c, t; for (;;) { while ((c=gtok(str))==' ' || c=='\n' || c=='\t') ; yylval = c; if (c==';' || c=='{' || c=='}') return(c); if (c==EOF) return(0); yylval = (int) str; if (c == DIG) return(DIGITS); t = lookup(str)->ydef; if (t==DEFINE) defstat(); else if (t==INCLUDE) inclstat(); else if (t > 0) return(t); else return(GOK); }}int dbg = 0;yyerror(p) char *p; {;}defstat() { int c,i,val,t,nlp; extern int nstr; extern char str[]; while ((c=getchr())==' ' || c=='\t'); if (c == '(') { t = '('; while ((c=getchr())==' ' || c=='\t'); putbak(c); } else { t = ' '; putbak(c); } for (nstr=0; c=getchr(); nstr++) { if (type[c] != LET && type[c] != DIG) break; str[nstr] = c; } putbak(c); str[nstr] = '\0'; if (c != ' ' && c != '\t' && c != '\n' && c != ',') { error("illegal define statement"); return; } val = nstr+1; if (t == ' ') { while ((c=getchr())==' ' || c=='\t'); putbak(c); for (i=val; (c=getchr())!='\n' && c!='#' && c!='\0'; i++) str[i] = c; putbak(c); } else { while ((c=getchr())==' ' || c=='\t' || c==',' || c=='\n'); putbak(c); nlp = 0; for (i=val; nlp>=0 && (c=str[i]=getchr()); i++) if (c == '(') nlp++; else if (c == ')') nlp--; i--; } for ( ; i>0; i--) if (str[i-1] != ' ' && str[i-1] != '\t') break; str[i] = '\0'; install(str, &str[val], 0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -