From mboxrd@z Thu Jan 1 00:00:00 1970 User-Agent: K-9 Mail for Android In-Reply-To: References: <20151125160347.GN20646@sigint.cs.purdue.edu> <02F03B0C-22E7-4D42-888E-468499922AB1@me.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----Y80WC7P5M46MJK9RG6240ZO933UKYL" From: Ryan Gonzalez Date: Wed, 25 Nov 2015 21:48:43 -0600 To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>, Prof Brucee Message-ID: <982A6B64-F62B-4326-8182-160CCFF2C7CE@gmail.com> Content-Transfer-Encoding: 7bit Subject: Re: [9fans] Undefined Behaviour in C Topicbox-Message-UUID: 778c5ede-ead9-11e9-9d60-3106f5b1d025 ------Y80WC7P5M46MJK9RG6240ZO933UKYL Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I remember reading Jack Crenshaw's Let's Build a Compiler. In part 16, he= mentioned that compiling an empty C source file on the VAX took 60 secon= ds and generated a 50K object file. Link (just search for the text "vax"): http://compilers.iecc.com/crenshaw= /tutor16.txt (BTW, what exactly do you mean by "mmap of 0"?) On November 25, 2015 8:57:11 PM CST, Prof Brucee = wrote: >I am still fascinated by the VAX architecture manual which designates >as >"unpredictable" many things with consequences including machine crash. >Pissed that I can't get my vaxen to crash or burst into flames. >On 26/11/2015 1:46 PM, "Brantley Coile" wrote: > >> Bruce's law: undefined !=3D stupid >> >> Sent from my iPad >> >> On Nov 25, 2015, at 9:04 PM, Prof Brucee >wrote: >> >> gcc is indeed a very sad tome. The mmap of 0 is disgusting. I like >kenc. >> It just works. My behaviour this afternoon will be undefined but not >as >> stupid as that of some programmers. >> On 26/11/2015 5:43 AM, "Brantley Coile" wrote: >> >>> Align it to column 7 and it looks like all the code I saw when I >started. >>> >>> iPhone email >>> >>> On Nov 25, 2015, at 12:13 PM, Ryan Gonzalez >wrote: >>> >>> Neither! It's what happens when you run sed 's/^\s*//' on your whole >code >>> base, yielding results like (from cmd/yacc.c): >>> >>> >>> void >>> setup(int argc, char *argv[]) >>> { >>> long c, t; >>> int i, j, fd, lev, ty, ytab, *p; >>> int vflag, dflag, stem; >>> char actnm[8], *stemc, *s, dirbuf[128]; >>> Biobuf *fout; >>> >>> ytab =3D 0; >>> vflag =3D 0; >>> dflag =3D 0; >>> stem =3D 0; >>> stemc =3D "y"; >>> foutput =3D 0; >>> fdefine =3D 0; >>> fdebug =3D 0; >>> ARGBEGIN{ >>> case 'v': >>> case 'V': >>> vflag++; >>> break; >>> case 'D': >>> yydebug =3D ARGF(); >>> break; >>> case 'a': >>> yyarg =3D 1; >>> break; >>> case 'd': >>> dflag++; >>> break; >>> case 'l': >>> yyline =3D 0; >>> break; >>> case 'o': >>> ytab++; >>> ytabc =3D ARGF(); >>> break; >>> case 's': >>> stem++; >>> stemc =3D ARGF(); >>> break; >>> case 'S': >>> parser =3D PARSERS; >>> break; >>> default: >>> error("illegal option: %c", ARGC()); >>> }ARGEND >>> openup(stemc, dflag, vflag, ytab, ytabc); >>> fout =3D dflag?fdefine:ftable; >>> if(yyarg){ >>> Bprint(ftable, "#define\tYYARG\t1\n\n"); >>> } >>> if((fd =3D mkstemp(ttempname)) >=3D 0){ >>> tempname =3D ttempname; >>> ftemp =3D Bfdopen(fd, OWRITE); >>> } >>> if((fd =3D mkstemp(tactname)) >=3D 0){ >>> actname =3D tactname; >>> faction =3D Bfdopen(fd, OWRITE); >>> } >>> if(ftemp =3D=3D 0 || faction =3D=3D 0) >>> error("cannot open temp file"); >>> if(argc < 1) >>> error("no input file"); >>> infile =3D argv[0]; >>> if(infile[0] !=3D '/' && getwd(dirbuf, sizeof dirbuf)!=3Dnil){ >>> i =3D strlen(infile)+1+strlen(dirbuf)+1+10; >>> s =3D malloc(i); >>> if(s !=3D nil){ >>> snprint(s, i, "%s/%s", dirbuf, infile); >>> cleanname(s); >>> infile =3D s; >>> } >>> } >>> finput =3D Bopen(infile, OREAD); >>> if(finput =3D=3D 0) >>> error("cannot open '%s'", argv[0]); >>> cnamp =3D cnames; >>> >>> defin(0, "$end"); >>> extval =3D PRIVATE; /* tokens start in unicode 'private use' */ >>> defin(0, "error"); >>> defin(1, "$accept"); >>> defin(0, "$unk"); >>> mem =3D mem0; >>> i =3D 0; >>> >>> for(t =3D gettok(); t !=3D MARK && t !=3D ENDFILE;) >>> switch(t) { >>> case ';': >>> t =3D gettok(); >>> break; >>> >>> case START: >>> if(gettok() !=3D IDENTIFIER) >>> error("bad %%start construction"); >>> start =3D chfind(1, tokname); >>> t =3D gettok(); >>> continue; >>> >>> case TYPEDEF: >>> if(gettok() !=3D TYPENAME) >>> error("bad syntax in %%type"); >>> ty =3D numbval; >>> for(;;) { >>> t =3D gettok(); >>> switch(t) { >>> case IDENTIFIER: >>> if((t=3Dchfind(1, tokname)) < NTBASE) { >>> j =3D TYPE(toklev[t]); >>> if(j !=3D 0 && j !=3D ty) >>> error("type redeclaration of token %s", >>> tokset[t].name); >>> else >>> SETTYPE(toklev[t], ty); >>> } else { >>> j =3D nontrst[t-NTBASE].value; >>> if(j !=3D 0 && j !=3D ty) >>> error("type redeclaration of nonterminal %s", >>> nontrst[t-NTBASE].name ); >>> else >>> nontrst[t-NTBASE].value =3D ty; >>> } >>> case ',': >>> continue; >>> case ';': >>> t =3D gettok(); >>> default: >>> break; >>> } >>> break; >>> } >>> continue; >>> >>> case UNION: >>> /* copy the union declaration to the output */ >>> cpyunion(); >>> t =3D gettok(); >>> continue; >>> >>> case LEFT: >>> case BINARY: >>> case RIGHT: >>> i++; >>> >>> case TERM: >>> /* nonzero means new prec. and assoc. */ >>> lev =3D t-TERM; >>> ty =3D 0; >>> >>> /* get identifiers so defined */ >>> t =3D gettok(); >>> >>> /* there is a type defined */ >>> if(t =3D=3D TYPENAME) { >>> ty =3D numbval; >>> t =3D gettok(); >>> } >>> for(;;) { >>> switch(t) { >>> case ',': >>> t =3D gettok(); >>> continue; >>> >>> case ';': >>> break; >>> >>> case IDENTIFIER: >>> j =3D chfind(0, tokname); >>> if(j >=3D NTBASE) >>> error("%s defined earlier as nonterminal", tokname); >>> if(lev) { >>> if(ASSOC(toklev[j])) >>> error("redeclaration of precedence of %s", tokname); >>> SETASC(toklev[j], lev); >>> SETPLEV(toklev[j], i); >>> } >>> if(ty) { >>> if(TYPE(toklev[j])) >>> error("redeclaration of type of %s", tokname); >>> SETTYPE(toklev[j],ty); >>> } >>> t =3D gettok(); >>> if(t =3D=3D NUMBER) { >>> tokset[j].value =3D numbval; >>> if(j < ndefout && j > 3) >>> error("please define type number of %s earlier", >>> tokset[j].name); >>> t =3D gettok(); >>> } >>> continue; >>> } >>> break; >>> } >>> continue; >>> >>> case LCURLY: >>> defout(0); >>> cpycode(); >>> t =3D gettok(); >>> continue; >>> >>> default: >>> error("syntax error"); >>> } >>> if(t =3D=3D ENDFILE) >>> error("unexpected EOF before %%"); >>> >>> /* t is MARK */ >>> if(!yyarg) >>> Bprint(ftable, "extern int yyerrflag;\n"); >>> Bprint(ftable, "#ifndef YYMAXDEPTH\n"); >>> Bprint(ftable, "#define YYMAXDEPTH 150\n"); >>> Bprint(ftable, "#endif\n" ); >>> if(!ntypes) { >>> Bprint(ftable, "#ifndef YYSTYPE\n"); >>> Bprint(ftable, "#define YYSTYPE int\n"); >>> Bprint(ftable, "#endif\n"); >>> } >>> if(!yyarg){ >>> Bprint(ftable, "YYSTYPE yylval;\n"); >>> Bprint(ftable, "YYSTYPE yyval;\n"); >>> }else{ >>> if(dflag) >>> Bprint(ftable, "#include \"%s.%s\"\n\n", stemc, FILED); >>> Bprint(fout, "struct Yyarg {\n"); >>> Bprint(fout, "\tint\tyynerrs;\n"); >>> Bprint(fout, "\tint\tyyerrflag;\n"); >>> Bprint(fout, "\tvoid*\targ;\n"); >>> Bprint(fout, "\tYYSTYPE\tyyval;\n"); >>> Bprint(fout, "\tYYSTYPE\tyylval;\n"); >>> Bprint(fout, "};\n\n"); >>> } >>> prdptr[0] =3D mem; >>> >>> /* added production */ >>> *mem++ =3D NTBASE; >>> >>> /* if start is 0, we will overwrite with the lhs of the first rule >*/ >>> *mem++ =3D start; >>> *mem++ =3D 1; >>> *mem++ =3D 0; >>> prdptr[1] =3D mem; >>> while((t=3Dgettok()) =3D=3D LCURLY) >>> cpycode(); >>> if(t !=3D IDENTCOLON) >>> error("bad syntax on first rule"); >>> >>> if(!start) >>> prdptr[0][1] =3D chfind(1, tokname); >>> >>> /* read rules */ >>> while(t !=3D MARK && t !=3D ENDFILE) { >>> /* process a rule */ >>> rlines[nprod] =3D lineno; >>> if(t =3D=3D '|') >>> *mem++ =3D *prdptr[nprod-1]; >>> else >>> if(t =3D=3D IDENTCOLON) { >>> *mem =3D chfind(1, tokname); >>> if(*mem < NTBASE) >>> error("token illegal on LHS of grammar rule"); >>> mem++; >>> } else >>> error("illegal rule: missing semicolon or | ?"); >>> /* read rule body */ >>> t =3D gettok(); >>> >>> more_rule: >>> while(t =3D=3D IDENTIFIER) { >>> *mem =3D chfind(1, tokname); >>> if(*mem < NTBASE) >>> levprd[nprod] =3D toklev[*mem]; >>> mem++; >>> t =3D gettok(); >>> } >>> if(t =3D=3D PREC) { >>> if(gettok() !=3D IDENTIFIER) >>> error("illegal %%prec syntax"); >>> j =3D chfind(2, tokname); >>> if(j >=3D NTBASE) >>> error("nonterminal %s illegal after %%prec", >>> nontrst[j-NTBASE].name); >>> levprd[nprod] =3D toklev[j]; >>> t =3D gettok(); >>> } >>> if(t =3D=3D '=3D') { >>> levprd[nprod] |=3D ACTFLAG; >>> Bprint(faction, "\ncase %d:", nprod); >>> cpyact(mem-prdptr[nprod]-1); >>> Bprint(faction, " break;"); >>> if((t=3Dgettok()) =3D=3D IDENTIFIER) { >>> >>> /* action within rule... */ >>> sprint(actnm, "$$%d", nprod); >>> >>> /* make it a nonterminal */ >>> j =3D chfind(1, actnm); >>> >>> /* >>> * the current rule will become rule number nprod+1 >>> * move the contents down, and make room for the null >>> */ >>> for(p =3D mem; p >=3D prdptr[nprod]; --p) >>> p[2] =3D *p; >>> mem +=3D 2; >>> >>> /* enter null production for action */ >>> p =3D prdptr[nprod]; >>> *p++ =3D j; >>> *p++ =3D -nprod; >>> >>> /* update the production information */ >>> levprd[nprod+1] =3D levprd[nprod] & ~ACTFLAG; >>> levprd[nprod] =3D ACTFLAG; >>> if(++nprod >=3D NPROD) >>> error("more than %d rules", NPROD); >>> prdptr[nprod] =3D p; >>> >>> /* make the action appear in the original rule */ >>> *mem++ =3D j; >>> >>> /* get some more of the rule */ >>> goto more_rule; >>> } >>> } >>> >>> while(t =3D=3D ';') >>> t =3D gettok(); >>> *mem++ =3D -nprod; >>> >>> /* check that default action is reasonable */ >>> if(ntypes && !(levprd[nprod]&ACTFLAG) && >>> nontrst[*prdptr[nprod]-NTBASE].value) { >>> >>> /* no explicit action, LHS has value */ >>> int tempty; >>> >>> tempty =3D prdptr[nprod][1]; >>> if(tempty < 0) >>> error("must return a value, since LHS has a type"); >>> else >>> if(tempty >=3D NTBASE) >>> tempty =3D nontrst[tempty-NTBASE].value; >>> else >>> tempty =3D TYPE(toklev[tempty]); >>> if(tempty !=3D nontrst[*prdptr[nprod]-NTBASE].value) >>> error("default action causes potential type clash"); >>> } >>> nprod++; >>> if(nprod >=3D NPROD) >>> error("more than %d rules", NPROD); >>> prdptr[nprod] =3D mem; >>> levprd[nprod] =3D 0; >>> } >>> >>> /* end of all rules */ >>> defout(1); >>> >>> finact(); >>> if(t =3D=3D MARK) { >>> Bprint(ftable, "\n"); >>> if(yyline) >>> Bprint(ftable, "#line\t%d\t\"%s\"\n", lineno, infile); >>> while((c=3DBgetrune(finput)) !=3D Beof) >>> Bputrune(ftable, c); >>> } >>> Bterm(finput); >>> } >>> >>> >>> On Wed, Nov 25, 2015 at 10:03 AM, >wrote: >>> >>>> On Wed, Nov 25, 2015 at 09:25:55AM -0500, Brantley Coile wrote: >>>> > unindented consequences >>>> >>>> Is that a class of Python bugs or an awesome name for a Nerdcore >band? >>>> >>>> >>> >>> >>> -- >>> Ryan >>> [ERROR]: Your autotools build scripts are 200 lines longer than your >>> program. Something=E2=80=99s wrong. >>> http://kirbyfan64.github.io/ >>> >>> >>> --=20 Sent from my Nexus 5 with K-9 Mail. Please excuse my brevity. ------Y80WC7P5M46MJK9RG6240ZO933UKYL Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable I remember reading Jack Crenshaw's Let's= Build a Compiler. In part 16, he mentioned that compiling an empty C sou= rce file on the VAX took 60 seconds and generated a 50K object file.

Link (just search for the text "vax"): http://compilers.iecc.com/crenshaw/tut= or16.txt

(BTW, what exactly do you mean by "mmap of 0"?)

On November 25, 2015 8:57:11 PM CST, Prof Brucee <p= rof.brucee@gmail.com> wrote:

I am still fascinated by the VAX architecture manual which= designates as "unpredictable" many things with consequences=C2= =A0 including machine crash. Pissed that I can't get my vaxen to cras= h or burst into flames.

On 26/11/2015 1:46 PM, "Brantley Coile&qu= ot; <brantleycoile@me.com&= gt; wrote:
Bruce's law: undefined !=3D stupid

Sen= t from my iPad

On Nov 25, 2015, at 9:04 PM, Prof Brucee &= lt;prof.brucee= @gmail.com> wrote:

gcc is indeed a very sad tome. The mmap of 0 is disgustin= g. I like kenc. It just works. My behaviour this afternoon will be undefi= ned but not as stupid as that of some programmers.

On 26/11/2015 5:43 AM, "Brantley Coile&qu= ot; <brantle= ycoile@me.com> wrote:
Align it to column 7 and it looks like all the code I saw= when I started.=C2=A0

iPhone email

On = Nov 25, 2015, at 12:13 PM, Ryan Gonzalez <rymg19@gmail.com> wrote:

Neither! It's what = happens when you run sed 's/^\s*//' on your whole code base, yiel= ding results like (from cmd/yacc.c):


void
setup(int argc, char *argv[])
{
long c, t;
int i, j, fd, lev, ty, ytab, *p;
int vflag, dflag, stem;
char actnm[8], *stemc, *s, dirbuf[128];
Biobuf *fout;

ytab =3D 0;
vfl= ag =3D 0;
dflag =3D 0;
stem =3D 0;
stemc =3D= "y";
foutput =3D 0;
fdefine =3D 0;
fdebug =3D 0;
ARGBEGIN{
case 'v':
case 'V':
vflag++;
break;
case &#= 39;D':
yydebug =3D ARGF();
break;
case = 'a':
yyarg =3D 1;
break;
case '= d':
dflag++;
break;
case 'l':
yyline =3D 0;
break;
case 'o':
=
ytab++;
ytabc =3D ARGF();
break;
case = 's':
stem++;
stemc =3D ARGF();
brea= k;
case 'S':
parser =3D PARSERS;
br= eak;
default:
error("illegal option: %c", ARGC());
}ARGEND
openup(stemc, dflag, vflag, ytab, yt= abc);
fout =3D dflag?fdefine:ftable;
if(yyarg){
=
Bprint(ftable, "#define\tYYARG\t1\n\n");
}
=
if((fd =3D mkstemp(ttempname)) >=3D 0){
tempname =3D tt= empname;
ftemp =3D Bfdopen(fd, OWRITE);
}
i= f((fd =3D mkstemp(tactname)) >=3D 0){
actname =3D tactname;<= /div>
faction =3D Bfdopen(fd, OWRITE);
}
if(ftemp= =3D=3D 0 || faction =3D=3D 0)
error("cannot open temp fil= e");
if(argc < 1)
error("no input file&q= uot;);
infile =3D argv[0];
if(infile[0] !=3D '/&#= 39; && getwd(dirbuf, sizeof dirbuf)!=3Dnil){
i =3D strl= en(infile)+1+strlen(dirbuf)+1+10;
s =3D malloc(i);
if= (s !=3D nil){
snprint(s, i, "%s/%s", dirbuf, infile);=
cleanname(s);
infile =3D s;
}
}
finput =3D Bopen(infile, OREAD);
if(finput =3D=3D 0)
error("cannot open '%s'= ", argv[0]);
cnamp =3D cnames;

= defin(0, "$end");
extval =3D PRIVATE; /* tokens start in unicode 'private use&= #39; */
defin(0, "error");
defin(1, "$= accept");
defin(0, "$unk");
mem =3D me= m0;
i =3D 0;

for(t =3D gettok(); t != =3D MARK && t !=3D ENDFILE;)
switch(t) {
case= ';':
t =3D gettok();
break;

=
case START:
if(gettok() !=3D IDENTIFIER)
e= rror("bad %%start construction");
start =3D chfind(1,= tokname);
t =3D gettok();
continue;

=
case TYPEDEF:
if(gettok() !=3D TYPENAME)
error("bad syntax in %%type");
ty= =3D numbval;
for(;;) {
t =3D gettok();
swi= tch(t) {
case IDENTIFIER:
if((t=3Dchfind(1, tokname))= < NTBASE) {
j =3D TYPE(toklev[t]);
if(j !=3D 0 &a= mp;& j !=3D ty)
error("type redeclaration of token %s&= quot;,
tokset[t].name);
else
SETTYPE(toklev= [t], ty);
} else {
j =3D nontrst[t-NTBASE].value;
if(j !=3D 0 && j !=3D ty)
error("type redec= laration of nonterminal %s",
nontrst[t-NTBASE].name );
else
nontrst[t-NTBASE].value =3D ty;
}
case ',':
continue;
case ';':
t =3D gettok();
default:
break;
}
break;
}
continue;

= case UNION:
/* copy the union declaration to the output */
cpyunion();
t =3D gettok();
continue;

case LEFT:
case BINARY:
case= RIGHT:
i++;

case TERM:
/*= nonzero means new prec. and assoc. */
lev =3D t-TERM;
ty =3D 0;

/* get identifiers so defined */
t =3D gettok();

/* there is a type de= fined */
if(t =3D=3D TYPENAME) {
ty =3D numbval;
t =3D gettok();
}
for(;;) {
switch(t)= {
case ',':
t =3D gettok();
contin= ue;

case ';':
break;

case IDENTIFIER:
j =3D chfind(0, tokname);<= /div>
if(j >=3D NTBASE)
error("%s defined earlier a= s nonterminal", tokname);
if(lev) {
if(ASSOC(tok= lev[j]))
error("redeclaration of precedence of %s", tokname);
SETASC(toklev[j], lev);
SETPLEV(t= oklev[j], i);
}
if(ty) {
if(TYPE(toklev[j])= )
error("redeclaration of type of %s", tokname);
SETTYPE(toklev[j],ty);
}
t =3D gettok();
<= div>if(t =3D=3D NUMBER) {
tokset[j].value =3D numbval;
if(j < ndefout && j > 3)
error("please def= ine type number of %s earlier",
tokset[j].name);
t =3D gettok();
}
continue;
}
br= eak;
}
continue;

case LCUR= LY:
defout(0);
cpycode();
t =3D gettok();
continue;

default:
error(&q= uot;syntax error");
}
if(t =3D=3D ENDFILE)
=
error("unexpected EOF before %%");

<= div>/* t is MARK */
if(!yyarg)
Bprint(ftable, "extern int <= /span>yyerrflag;\n");
Bprint(ftable, "#ifndef YYMAXDEPTH\n");
Bprin= t(ftable, "#define YYMAX= DEPTH 150\n");
Bprint(ftable, "#endif\n" );
if(!ntypes) {
Bprint(ftable, "#ifndef YYSTYPE\n");
Bprint(ftable, "#define YYSTYPE= int\n");
Bprint(ftable, "#endif\n");
}
if(!yyarg){
Bprint(ftable, "YYSTYPE yylval;\n");
Bpri= nt(ftable, "YYSTYPE yyval;\n");
}else{
if(dflag)
Bp= rint(ftable, "#include \"%s.%s\"\n\n", stemc, FILED);=
Bprint(fout, "struct Yyarg {\n");
Bprint(f= out, "\tint\tyynerrs;\n");
Bprint(fout, "\tint\t= yyerrflag;\n");
Bprint(fout, "\tvoid*\targ;\n");=
Bprint(fout, "\tYYSTYPE\tyyval;\n");
Bprin= t(fout, "\tYYSTYPE\tyylval;\n");
Bprint(fout, "}= ;\n\n");
}
prdptr[0] =3D mem;

/* added production */
*mem++ =3D NTBASE;
/* if start is 0, we will overwrite with the lhs of the fi= rst rule */
*mem++ =3D start;
*mem++ =3D 1;
*mem++ =3D 0;
prdptr[1] =3D mem;
while((t=3Dgettok()= ) =3D=3D LCURLY)
cpycode();
if(t !=3D IDENTCOLON)
error("bad syntax on first rule");

if(!start)
prdptr[0][1] =3D chfind(1, tokname);

/* read rules */
while(t !=3D MARK &am= p;& t !=3D ENDFILE) {
/* process a rule */
rlines= [nprod] =3D lineno;
if(t =3D=3D '|')
*mem++ =3D= *prdptr[nprod-1];
else
if(t =3D=3D IDENTCOLON) {
*mem =3D chfind(1, tokname);
if(*mem < NTBASE)
<= div>error("token illegal on LHS of grammar rule");
me= m++;
} else
error("illegal rule: missing semicol= on or | ?");
/* read rule body */
t =3D gettok()= ;

more_rule:
while(t =3D=3D IDENTIFI= ER) {
*mem =3D chfind(1, tokname);
if(*mem < NTBAS= E)
levprd[nprod] =3D toklev[*mem];
mem++;
t= =3D gettok();
}
if(t =3D=3D PREC) {
if(get= tok() !=3D IDENTIFIER)
error("illegal %%prec syntax");
j =3D chfind(2, tokname);
if(j >=3D= NTBASE)
error("nonterminal %s illegal after %%prec",=
nontrst[j-NTBASE].name);
levprd[nprod] =3D toklev[j]= ;
t =3D gettok();
}
if(t =3D=3D '=3D= 9;) {
levprd[nprod] |=3D ACTFLAG;
Bprint(faction, &qu= ot;\ncase %d:", nprod);
cpyact(mem-prdptr[nprod]-1);
=
Bprint(faction, " break;");
if((t=3Dgettok()) =3D= =3D IDENTIFIER) {

/* action within rule... */<= /div>
sprint(actnm, "$$%d", nprod);

<= div>/* make it a nonterminal */
j =3D chfind(1, actnm);

/*
* the current rule will become rule numb= er nprod+1
* move the contents down, and make room for the null=
*/
for(p =3D mem; p >=3D prdptr[nprod]; --p)
p[2] =3D *p;
mem +=3D 2;

/* en= ter null production for action */
p =3D prdptr[nprod];
*p= ++ =3D j;
*p++ =3D -nprod;

/* update= the production information */
levprd[nprod+1] =3D levprd[nprod= ] & ~ACTFLAG;
levprd[nprod] =3D ACTFLAG;
if(++npr= od >=3D NPROD)
error("more than %d rules", NPROD);=
prdptr[nprod] =3D p;

/* make the ac= tion appear in the original rule */
*mem++ =3D j;
/* get some more of the rule */
goto more_rule;
}
}

while(t =3D=3D ';&#= 39;)
t =3D gettok();
*mem++ =3D -nprod;
/* check that default action is reasonable */
if(= ntypes && !(levprd[nprod]&ACTFLAG) && nontrst[*prdptr= [nprod]-NTBASE].value) {

/* no explicit action= , LHS has value */
int tempty;

tempty =3D prdptr[nprod][1];
if(tempty < 0)
error("must return a value, since LHS has a type");
else
if(tempty >=3D NTBASE)
tempty =3D nontr= st[tempty-NTBASE].value;
else
tempty =3D TYPE(toklev[= tempty]);
if(tempty !=3D nontrst[*prdptr[nprod]-NTBASE].value)<= /div>
error("default action causes potential type clash");<= /div>
}
nprod++;
if(nprod >=3D NPROD)
error("more than %d rules", NPROD);
prdptr[nprod] =3D= mem;
levprd[nprod] =3D 0;
}

/* end of all rules */
defout(1);

finact();
if(t =3D=3D MARK) {
Bprint(ftable, "\= n");
if(yyline)
Bprint(ftable, "#line\t%d\t= \"%s\"\n", lineno, infile);
while((c=3DBgetrune(= finput)) !=3D Beof)
Bputrune(ftable, c);
}
Bterm(finput);
}


On Wed, Nov 25, 2015 at 10:03 AM, <plannine@sigint.cs.pu= rdue.edu> wrote:
On W= ed, Nov 25, 2015 at 09:25:55AM -0500, Brantley Coile wrote:
> unindented consequences

Is that a class of Python bugs or an awesome name for a Nerdcore band?



--
Ryan
[ERROR]: Your autotools build scripts are 2= 00 lines longer than your program. Something=E2=80=99s wrong.
=
<= /div>

--
Sent from my Nexus 5 with K-9 Mail. Please excuse my brevity. ------Y80WC7P5M46MJK9RG6240ZO933UKYL--