%{ #include <u.h> #include <libc.h> #include <bio.h> #define bsp_max 5000 Biobuf *in; Biobuf bstdin; Biobuf bstdout; char cary[1000]; char* cp = { cary }; char string[1000]; char* str = { string }; int crs = 128; int rcrs = 128; /* reset crs */ int bindx = 0; int lev = 0; int ln; char* ttp; char* ss = ""; int bstack[10] = { 0 }; char* numb[15] = { " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " 10", " 11", " 12", " 13", " 14" }; char* pre; char* post; long peekc = -1; int sargc; int ifile; char** sargv; char *funtab[] = { "<1>","<2>","<3>","<4>","<5>", "<6>","<7>","<8>","<9>","<10>", "<11>","<12>","<13>","<14>","<15>", "<16>","<17>","<18>","<19>","<20>", "<21>","<22>","<23>","<24>","<25>", "<26>" }; char *atab[] = { "<221>","<222>","<223>","<224>","<225>", "<226>","<227>","<228>","<229>","<230>", "<231>","<232>","<233>","<234>","<235>", "<236>","<237>","<238>","<239>","<240>", "<241>","<242>","<243>","<244>","<245>", "<246>" }; char* letr[26] = { "a","b","c","d","e","f","g","h","i","j", "k","l","m","n","o","p","q","r","s","t", "u","v","w","x","y","z" }; char* dot = { "." }; char* bspace[bsp_max]; char** bsp_nxt = bspace; int bdebug = 0; int lflag; int cflag; int sflag; char* bundle(int, ...); void conout(char*, char*); int cpeek(int, int, int); int getch(void); char* geta(char*); char* getf(char*); void getout(void); void output(char*); void pp(char*); void routput(char*); void tp(char*); void yyerror(char*, ...); int yyparse(void); typedef void* pointer; #pragma varargck type "lx" pointer %}%union{ char* cptr; int cc;} %type <cptr> pstat stat stat1 def slist dlets e ase nase%type <cptr> slist re fprefix cargs eora cons constant lora%type <cptr> crs %token <cptr> LETTER EQOP _AUTO DOT%token <cc> DIGIT SQRT LENGTH _IF FFF EQ%token <cc> _PRINT _WHILE _FOR NE LE GE INCR DECR%token <cc> _RETURN _BREAK _DEFINE BASE OBASE SCALE%token <cc> QSTR ERROR %right '=' EQOP%left '+' '-'%left '*' '/' '%'%right '^'%left UMINUS %%start: start stuff| stuff stuff: pstat tail { output($1); }| def dargs ')' '{' dlist slist '}' { ttp = bundle(6, pre, $6, post , "0", numb[lev], "Q"); conout(ttp, (char*)$1); rcrs = crs; output(""); lev = bindx = 0; } dlist: tail| dlist _AUTO dlets tail stat: stat1| nase { if(sflag) bundle(2, $1, "s."); } pstat: stat1 { if(sflag) bundle(2, $1, "0"); }| nase { if(!sflag) bundle(2, $1, "ps."); } stat1: { bundle(1, ""); }| ase { bundle(2, $1, "s."); }| SCALE '=' e { bundle(2, $3, "k"); }| SCALE EQOP e { bundle(4, "K", $3, $2, "k"); }| BASE '=' e { bundle(2, $3, "i"); }| BASE EQOP e { bundle(4, "I", $3, $2, "i"); }| OBASE '=' e { bundle(2, $3, "o"); }| OBASE EQOP e { bundle(4, "O", $3, $2, "o"); }| QSTR { bundle(3, "[", $1, "]P"); }| _BREAK { bundle(2, numb[lev-bstack[bindx-1]], "Q"); }| _PRINT e { bundle(2, $2, "ps."); }| _RETURN e { bundle(4, $2, post, numb[lev], "Q"); }| _RETURN { bundle(4, "0", post, numb[lev], "Q"); }| '{' slist '}' { $$ = $2; }| FFF { bundle(1, "fY"); }| _IF crs BLEV '(' re ')' stat { conout($7, $2); bundle(3, $5, $2, " "); }| _WHILE crs '(' re ')' stat BLEV { bundle(3, $6, $4, $2); conout($$, $2); bundle(3, $4, $2, " "); }| fprefix crs re ';' e ')' stat BLEV { bundle(5, $7, $5, "s.", $3, $2); conout($$, $2); bundle(5, $1, "s.", $3, $2, " "); }| '~' LETTER '=' e { bundle(3, $4, "S", $2); } fprefix: _FOR '(' e ';' { $$ = $3; } BLEV: = { --bindx; } slist: stat| slist tail stat { bundle(2, $1, $3); } tail: '\n' { ln++; }| ';' re: e EQ e { $$ = bundle(3, $1, $3, "="); }| e '<' e { bundle(3, $1, $3, ">"); }| e '>' e { bundle(3, $1, $3, "<"); }| e NE e { bundle(3, $1, $3, "!="); }| e GE e { bundle(3, $1, $3, "!>"); }| e LE e { bundle(3, $1, $3, "!<"); }| e { bundle(2, $1, " 0!="); } nase: '(' e ')' { $$ = $2; }| cons { bundle(3, " ", $1, " "); }| DOT cons { bundle(3, " .", $2, " "); }| cons DOT cons { bundle(5, " ", $1, ".", $3, " "); }| cons DOT { bundle(4, " ", $1, ".", " "); }| DOT { $<cptr>$ = "l."; }| LETTER '[' e ']' { bundle(3, $3, ";", geta($1)); }| LETTER INCR { bundle(4, "l", $1, "d1+s", $1); }| INCR LETTER { bundle(4, "l", $2, "1+ds", $2); }| DECR LETTER { bundle(4, "l", $2, "1-ds", $2); }| LETTER DECR { bundle(4, "l", $1, "d1-s", $1); }| LETTER '[' e ']' INCR { bundle(7, $3, ";", geta($1), "d1+" ,$3, ":" ,geta($1)); }| INCR LETTER '[' e ']' { bundle(7, $4, ";", geta($2), "1+d", $4, ":", geta($2)); }| LETTER '[' e ']' DECR { bundle(7, $3, ";", geta($1), "d1-", $3, ":", geta($1)); }| DECR LETTER '[' e ']' { bundle(7, $4, ";", geta($2), "1-d", $4, ":" ,geta($2)); }| SCALE INCR { bundle(1, "Kd1+k"); }| INCR SCALE { bundle(1, "K1+dk"); }| SCALE DECR { bundle(1, "Kd1-k"); }| DECR SCALE { bundle(1, "K1-dk"); }| BASE INCR { bundle(1, "Id1+i"); }| INCR BASE { bundle(1, "I1+di"); }| BASE DECR { bundle(1, "Id1-i"); }| DECR BASE { bundle(1, "I1-di"); }| OBASE INCR { bundle(1, "Od1+o"); }| INCR OBASE { bundle(1, "O1+do"); }| OBASE DECR { bundle(1, "Od1-o"); }| DECR OBASE { bundle(1, "O1-do"); }| LETTER '(' cargs ')' { bundle(4, $3, "l", getf($1), "x"); }| LETTER '(' ')' { bundle(3, "l", getf($1), "x"); }| LETTER = { bundle(2, "l", $1); }| LENGTH '(' e ')' { bundle(2, $3, "Z"); }| SCALE '(' e ')' { bundle(2, $3, "X"); }| '?' { bundle(1, "?"); }| SQRT '(' e ')' { bundle(2, $3, "v"); }| '~' LETTER { bundle(2, "L", $2); }| SCALE { bundle(1, "K"); }| BASE { bundle(1, "I"); }| OBASE { bundle(1, "O"); }| '-' e { bundle(3, " 0", $2, "-"); }| e '+' e { bundle(3, $1, $3, "+"); }| e '-' e { bundle(3, $1, $3, "-"); }| e '*' e { bundle(3, $1, $3, "*"); }| e '/' e { bundle(3, $1, $3, "/"); }| e '%' e { bundle(3, $1, $3, "%%"); }| e '^' e { bundle(3, $1, $3, "^"); } ase: LETTER '=' e { bundle(3, $3, "ds", $1); }| LETTER '[' e ']' '=' e { bundle(5, $6, "d", $3, ":", geta($1)); }| LETTER EQOP e { bundle(6, "l", $1, $3, $2, "ds", $1); }| LETTER '[' e ']' EQOP e { bundle(9, $3, ";", geta($1), $6, $5, "d", $3, ":", geta($1)); } e: ase| nase cargs: eora| cargs ',' eora { bundle(2, $1, $3); } eora:Lines 1–500 of 989. Load more
%{ #include <u.h> #include <libc.h> #include <bio.h> #define bsp_max 5000 Biobuf *in; Biobuf bstdin; Biobuf bstdout; char cary[1000]; char* cp = { cary }; char string[1000]; char* str = { string }; int crs = 128; int rcrs = 128; /* reset crs */ int bindx = 0; int lev = 0; int ln; char* ttp; char* ss = ""; int bstack[10] = { 0 }; char* numb[15] = { " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " 10", " 11", " 12", " 13", " 14" }; char* pre; char* post; long peekc = -1; int sargc; int ifile; char** sargv; char *funtab[] = { "<1>","<2>","<3>","<4>","<5>", "<6>","<7>","<8>","<9>","<10>", "<11>","<12>","<13>","<14>","<15>", "<16>","<17>","<18>","<19>","<20>", "<21>","<22>","<23>","<24>","<25>", "<26>" }; char *atab[] = { "<221>","<222>","<223>","<224>","<225>", "<226>","<227>","<228>","<229>","<230>", "<231>","<232>","<233>","<234>","<235>", "<236>","<237>","<238>","<239>","<240>", "<241>","<242>","<243>","<244>","<245>", "<246>" }; char* letr[26] = { "a","b","c","d","e","f","g","h","i","j", "k","l","m","n","o","p","q","r","s","t", "u","v","w","x","y","z" }; char* dot = { "." }; char* bspace[bsp_max]; char** bsp_nxt = bspace; int bdebug = 0; int lflag; int cflag; int sflag; char* bundle(int, ...); void conout(char*, char*); int cpeek(int, int, int); int getch(void); char* geta(char*); char* getf(char*); void getout(void); void output(char*); void pp(char*); void routput(char*); void tp(char*); void yyerror(char*, ...); int yyparse(void); typedef void* pointer; #pragma varargck type "lx" pointer %} %union { char* cptr; int cc; } %type <cptr> pstat stat stat1 def slist dlets e ase nase %type <cptr> slist re fprefix cargs eora cons constant lora %type <cptr> crs %token <cptr> LETTER EQOP _AUTO DOT %token <cc> DIGIT SQRT LENGTH _IF FFF EQ %token <cc> _PRINT _WHILE _FOR NE LE GE INCR DECR %token <cc> _RETURN _BREAK _DEFINE BASE OBASE SCALE %token <cc> QSTR ERROR %right '=' EQOP %left '+' '-' %left '*' '/' '%' %right '^' %left UMINUS %% start: start stuff | stuff stuff: pstat tail { output($1); } | def dargs ')' '{' dlist slist '}' { ttp = bundle(6, pre, $6, post , "0", numb[lev], "Q"); conout(ttp, (char*)$1); rcrs = crs; output(""); lev = bindx = 0; } dlist: tail | dlist _AUTO dlets tail stat: stat1 | nase { if(sflag) bundle(2, $1, "s."); } pstat: stat1 { if(sflag) bundle(2, $1, "0"); } | nase { if(!sflag) bundle(2, $1, "ps."); } stat1: { bundle(1, ""); } | ase { bundle(2, $1, "s."); } | SCALE '=' e { bundle(2, $3, "k"); } | SCALE EQOP e { bundle(4, "K", $3, $2, "k"); } | BASE '=' e { bundle(2, $3, "i"); } | BASE EQOP e { bundle(4, "I", $3, $2, "i"); } | OBASE '=' e { bundle(2, $3, "o"); } | OBASE EQOP e { bundle(4, "O", $3, $2, "o"); } | QSTR { bundle(3, "[", $1, "]P"); } | _BREAK { bundle(2, numb[lev-bstack[bindx-1]], "Q"); } | _PRINT e { bundle(2, $2, "ps."); } | _RETURN e { bundle(4, $2, post, numb[lev], "Q"); } | _RETURN { bundle(4, "0", post, numb[lev], "Q"); } | '{' slist '}' { $$ = $2; } | FFF { bundle(1, "fY"); } | _IF crs BLEV '(' re ')' stat { conout($7, $2); bundle(3, $5, $2, " "); } | _WHILE crs '(' re ')' stat BLEV { bundle(3, $6, $4, $2); conout($$, $2); bundle(3, $4, $2, " "); } | fprefix crs re ';' e ')' stat BLEV { bundle(5, $7, $5, "s.", $3, $2); conout($$, $2); bundle(5, $1, "s.", $3, $2, " "); } | '~' LETTER '=' e { bundle(3, $4, "S", $2); } fprefix: _FOR '(' e ';' { $$ = $3; } BLEV: = { --bindx; } slist: stat | slist tail stat { bundle(2, $1, $3); } tail: '\n' { ln++; } | ';' re: e EQ e { $$ = bundle(3, $1, $3, "="); } | e '<' e { bundle(3, $1, $3, ">"); } | e '>' e { bundle(3, $1, $3, "<"); } | e NE e { bundle(3, $1, $3, "!="); } | e GE e { bundle(3, $1, $3, "!>"); } | e LE e { bundle(3, $1, $3, "!<"); } | e { bundle(2, $1, " 0!="); } nase: '(' e ')' { $$ = $2; } | cons { bundle(3, " ", $1, " "); } | DOT cons { bundle(3, " .", $2, " "); } | cons DOT cons { bundle(5, " ", $1, ".", $3, " "); } | cons DOT { bundle(4, " ", $1, ".", " "); } | DOT { $<cptr>$ = "l."; } | LETTER '[' e ']' { bundle(3, $3, ";", geta($1)); } | LETTER INCR { bundle(4, "l", $1, "d1+s", $1); } | INCR LETTER { bundle(4, "l", $2, "1+ds", $2); } | DECR LETTER { bundle(4, "l", $2, "1-ds", $2); } | LETTER DECR { bundle(4, "l", $1, "d1-s", $1); } | LETTER '[' e ']' INCR { bundle(7, $3, ";", geta($1), "d1+" ,$3, ":" ,geta($1)); } | INCR LETTER '[' e ']' { bundle(7, $4, ";", geta($2), "1+d", $4, ":", geta($2)); } | LETTER '[' e ']' DECR { bundle(7, $3, ";", geta($1), "d1-", $3, ":", geta($1)); } | DECR LETTER '[' e ']' { bundle(7, $4, ";", geta($2), "1-d", $4, ":" ,geta($2)); } | SCALE INCR { bundle(1, "Kd1+k"); } | INCR SCALE { bundle(1, "K1+dk"); } | SCALE DECR { bundle(1, "Kd1-k"); } | DECR SCALE { bundle(1, "K1-dk"); } | BASE INCR { bundle(1, "Id1+i"); } | INCR BASE { bundle(1, "I1+di"); } | BASE DECR { bundle(1, "Id1-i"); } | DECR BASE { bundle(1, "I1-di"); } | OBASE INCR { bundle(1, "Od1+o"); } | INCR OBASE { bundle(1, "O1+do"); } | OBASE DECR { bundle(1, "Od1-o"); } | DECR OBASE { bundle(1, "O1-do"); } | LETTER '(' cargs ')' { bundle(4, $3, "l", getf($1), "x"); } | LETTER '(' ')' { bundle(3, "l", getf($1), "x"); } | LETTER = { bundle(2, "l", $1); } | LENGTH '(' e ')' { bundle(2, $3, "Z"); } | SCALE '(' e ')' { bundle(2, $3, "X"); } | '?' { bundle(1, "?"); } | SQRT '(' e ')' { bundle(2, $3, "v"); } | '~' LETTER { bundle(2, "L", $2); } | SCALE { bundle(1, "K"); } | BASE { bundle(1, "I"); } | OBASE { bundle(1, "O"); } | '-' e { bundle(3, " 0", $2, "-"); } | e '+' e { bundle(3, $1, $3, "+"); } | e '-' e { bundle(3, $1, $3, "-"); } | e '*' e { bundle(3, $1, $3, "*"); } | e '/' e { bundle(3, $1, $3, "/"); } | e '%' e { bundle(3, $1, $3, "%%"); } | e '^' e { bundle(3, $1, $3, "^"); } ase: LETTER '=' e { bundle(3, $3, "ds", $1); } | LETTER '[' e ']' '=' e { bundle(5, $6, "d", $3, ":", geta($1)); } | LETTER EQOP e { bundle(6, "l", $1, $3, $2, "ds", $1); } | LETTER '[' e ']' EQOP e { bundle(9, $3, ";", geta($1), $6, $5, "d", $3, ":", geta($1)); } e: ase | nase cargs: eora | cargs ',' eora { bundle(2, $1, $3); } eora: