DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦6558e26ff⟧ TextFile

    Length: 85186 (0x14cc2)
    Types: TextFile
    Names: »spider.awk«

Derivation

└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z« 
        └─⟦036c765ac⟧ 
            └─⟦this⟧ »TeX3.0/Spiderweb/master/spider.awk« 

TextFile

##3:

#line 53 "/u/nr/web/src/master/spider.web"

BEGIN{
##9:

#line 179 "/u/nr/web/src/master/spider.web"

#line 180 "/u/nr/web/src/master/spider.web"
logfile="spider.slog"

##:9
##10:

#line 183 "/u/nr/web/src/master/spider.web"

#line 184 "/u/nr/web/src/master/spider.web"
translationfile="trans_keys.unsorted"

##:10
##11:

#line 188 "/u/nr/web/src/master/spider.web"

#line 189 "/u/nr/web/src/master/spider.web"
scrapfile="scraps.web"
print"@*Scrap code generated by {\tt SPIDER}.">scrapfile
ttokfile="outtoks.web"
print"@*Token code generated by {\tt SPIDER}.">scrapfile
##:11
##12:

#line 195 "/u/nr/web/src/master/spider.web"

#line 196 "/u/nr/web/src/master/spider.web"
reserved="scraps.web"

##:12
##13:

#line 200 "/u/nr/web/src/master/spider.web"

#line 201 "/u/nr/web/src/master/spider.web"
tokennamefile="names.unsorted"
##:13
##14:

#line 204 "/u/nr/web/src/master/spider.web"

#line 205 "/u/nr/web/src/master/spider.web"
ilkfile="names.unsorted"
##:14
##15:

#line 208 "/u/nr/web/src/master/spider.web"

#line 209 "/u/nr/web/src/master/spider.web"
categoryfile="names.unsorted"
##:15
##16:

#line 211 "/u/nr/web/src/master/spider.web"

#line 212 "/u/nr/web/src/master/spider.web"
grammarfile="grammar.web"
print"@*Grammar code generated by {\tt SPIDER}.">grammarfile
##:16
##17:

#line 217 "/u/nr/web/src/master/spider.web"

#line 218 "/u/nr/web/src/master/spider.web"
tlang="outtoks.web"
wlang="scraps.web"

##:17
##18:

#line 223 "/u/nr/web/src/master/spider.web"

#line 224 "/u/nr/web/src/master/spider.web"
productions="productions.list"

##:18
##19:

#line 227 "/u/nr/web/src/master/spider.web"

#line 228 "/u/nr/web/src/master/spider.web"
cycles="cycle.test"



##:19
##37:

#line 523 "/u/nr/web/src/master/spider.web"

#line 524 "/u/nr/web/src/master/spider.web"
default_translation="<*>"
default_mathness="maybe"


##:37
##46:

#line 723 "/u/nr/web/src/master/spider.web"

#line 724 "/u/nr/web/src/master/spider.web"
highesttoken=200
tokennumber=highesttoken

##:46
##61:

#line 939 "/u/nr/web/src/master/spider.web"

#line 940 "/u/nr/web/src/master/spider.web"
tokennumbers["identifier"]=tokennumber;tokennumber--
tokenname["identifier"]="identifier"

##:61
##63:

#line 965 "/u/nr/web/src/master/spider.web"

#line 966 "/u/nr/web/src/master/spider.web"
tokennumbers["constant"]=tokennumber;tokennumber--
tokenname["constant"]="constant"
tokennumbers["string"]=tokennumber;tokennumber--
tokenname["string"]="string"


##:63
##138:

#line 2242 "/u/nr/web/src/master/spider.web"

#line 2243 "/u/nr/web/src/master/spider.web"
at_sign="@@"


##:138
##146:

#line 2393 "/u/nr/web/src/master/spider.web"

#line 2394 "/u/nr/web/src/master/spider.web"
texof["\\"]="\\BS"
texof["{"]="\\{"
texof["}"]="\\{"
texof["$"]="\\$"
texof["&"]="\\amp"
texof["#"]="\\#"
texof["^"]="\\H"
texof["_"]="\\_"
texof["~"]="\\TI"
texof["%"]="\\%"

##:146
##150:

#line 2471 "/u/nr/web/src/master/spider.web"

#line 2472 "/u/nr/web/src/master/spider.web"
sharp_line_open="\"#line\""
sharp_line_close="\"\""

##:150
##152:

#line 2491 "/u/nr/web/src/master/spider.web"

#line 2492 "/u/nr/web/src/master/spider.web"
month["Jan"]="January"
month["Feb"]="February"
month["Mar"]="March"
month["Apr"]="April"
month["May"]="May"
month["Jun"]="June"
month["Jul"]="July"
month["Aug"]="August"
month["Sep"]="September"
month["Oct"]="October"
month["Nov"]="November"
month["Dec"]="December"

##:152

#line 55 "/u/nr/web/src/master/spider.web"

exitcode=0
}

##6:

#line 98 "/u/nr/web/src/master/spider.web"

#line 99 "/u/nr/web/src/master/spider.web"
/^#|^ *$/{

print $0>logfile
next
}

##:6

#line 59 "/u/nr/web/src/master/spider.web"

##35:

#line 496 "/u/nr/web/src/master/spider.web"

#line 497 "/u/nr/web/src/master/spider.web"
/^default /{
print"Setting defaults...">logfile
start_place=2
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 501 "/u/nr/web/src/master/spider.web"

##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 504 "/u/nr/web/src/master/spider.web"

##30:

#line 464 "/u/nr/web/src/master/spider.web"

#line 465 "/u/nr/web/src/master/spider.web"
if(this_name!=""){
print"Error: name doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 467 "/u/nr/web/src/master/spider.web"

}
##:30

#line 505 "/u/nr/web/src/master/spider.web"

##32:

#line 474 "/u/nr/web/src/master/spider.web"

#line 475 "/u/nr/web/src/master/spider.web"
if(this_category!=""){
print"Error: category doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 477 "/u/nr/web/src/master/spider.web"

}
##:32

#line 506 "/u/nr/web/src/master/spider.web"

default_translation=this_translation
default_mathness=this_mathness
print"\tdefault translation is",default_translation>logfile
print"\tdefault mathness is",default_mathness>logfile
next
}

##:35
##39:

#line 568 "/u/nr/web/src/master/spider.web"

#line 569 "/u/nr/web/src/master/spider.web"
/^token /{
print"Token",$2>logfile
if($2=="identifier"){
##40:

#line 593 "/u/nr/web/src/master/spider.web"

#line 594 "/u/nr/web/src/master/spider.web"
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 595 "/u/nr/web/src/master/spider.web"

this_translation=""
start_place=3
##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 600 "/u/nr/web/src/master/spider.web"

##30:

#line 464 "/u/nr/web/src/master/spider.web"

#line 465 "/u/nr/web/src/master/spider.web"
if(this_name!=""){
print"Error: name doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 467 "/u/nr/web/src/master/spider.web"

}
##:30

#line 601 "/u/nr/web/src/master/spider.web"

##31:

#line 469 "/u/nr/web/src/master/spider.web"

#line 470 "/u/nr/web/src/master/spider.web"
if(this_tangleto!=""){
print"Error: tangleto doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 472 "/u/nr/web/src/master/spider.web"

}
##:31

#line 602 "/u/nr/web/src/master/spider.web"

##34:

#line 484 "/u/nr/web/src/master/spider.web"

#line 485 "/u/nr/web/src/master/spider.web"
if(this_category==""){
print"Error: you must give a category on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 487 "/u/nr/web/src/master/spider.web"

}

##:34

#line 603 "/u/nr/web/src/master/spider.web"

##33:

#line 479 "/u/nr/web/src/master/spider.web"

#line 480 "/u/nr/web/src/master/spider.web"
if(this_translation!=""){
print"Error: translation doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 482 "/u/nr/web/src/master/spider.web"

}
##:33

#line 604 "/u/nr/web/src/master/spider.web"

id_category=this_category
id_mathness=this_mathness

##:40

#line 572 "/u/nr/web/src/master/spider.web"

}else if($2=="number"){
##41:

#line 609 "/u/nr/web/src/master/spider.web"

#line 610 "/u/nr/web/src/master/spider.web"
print"Warning: numeric constants and strings are",\
"identified in this WEAVE."
print"Warning: numeric constants and strings are",\
"identified in this WEAVE.">logfile
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 615 "/u/nr/web/src/master/spider.web"

this_translation=""
start_place=3
##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 620 "/u/nr/web/src/master/spider.web"

##30:

#line 464 "/u/nr/web/src/master/spider.web"

#line 465 "/u/nr/web/src/master/spider.web"
if(this_name!=""){
print"Error: name doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 467 "/u/nr/web/src/master/spider.web"

}
##:30

#line 621 "/u/nr/web/src/master/spider.web"

##31:

#line 469 "/u/nr/web/src/master/spider.web"

#line 470 "/u/nr/web/src/master/spider.web"
if(this_tangleto!=""){
print"Error: tangleto doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 472 "/u/nr/web/src/master/spider.web"

}
##:31

#line 622 "/u/nr/web/src/master/spider.web"

##34:

#line 484 "/u/nr/web/src/master/spider.web"

#line 485 "/u/nr/web/src/master/spider.web"
if(this_category==""){
print"Error: you must give a category on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 487 "/u/nr/web/src/master/spider.web"

}

##:34

#line 623 "/u/nr/web/src/master/spider.web"

##33:

#line 479 "/u/nr/web/src/master/spider.web"

#line 480 "/u/nr/web/src/master/spider.web"
if(this_translation!=""){
print"Error: translation doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 482 "/u/nr/web/src/master/spider.web"

}
##:33

#line 624 "/u/nr/web/src/master/spider.web"

number_category=this_category
number_mathness=this_mathness

##:41

#line 574 "/u/nr/web/src/master/spider.web"

}else if($2=="newline"){
##42:

#line 629 "/u/nr/web/src/master/spider.web"

#line 630 "/u/nr/web/src/master/spider.web"
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 631 "/u/nr/web/src/master/spider.web"

start_place=3
##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 635 "/u/nr/web/src/master/spider.web"

##30:

#line 464 "/u/nr/web/src/master/spider.web"

#line 465 "/u/nr/web/src/master/spider.web"
if(this_name!=""){
print"Error: name doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 467 "/u/nr/web/src/master/spider.web"

}
##:30

#line 636 "/u/nr/web/src/master/spider.web"

##31:

#line 469 "/u/nr/web/src/master/spider.web"

#line 470 "/u/nr/web/src/master/spider.web"
if(this_tangleto!=""){
print"Error: tangleto doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 472 "/u/nr/web/src/master/spider.web"

}
##:31

#line 637 "/u/nr/web/src/master/spider.web"

##34:

#line 484 "/u/nr/web/src/master/spider.web"

#line 485 "/u/nr/web/src/master/spider.web"
if(this_category==""){
print"Error: you must give a category on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 487 "/u/nr/web/src/master/spider.web"

}

##:34

#line 638 "/u/nr/web/src/master/spider.web"

newline_category=this_category
newline_mathness=this_mathness
newline_translation=this_translation

##:42

#line 576 "/u/nr/web/src/master/spider.web"

}else if($2=="pseudo_semi"){
##43:

#line 644 "/u/nr/web/src/master/spider.web"

#line 645 "/u/nr/web/src/master/spider.web"
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 646 "/u/nr/web/src/master/spider.web"

start_place=3
##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 650 "/u/nr/web/src/master/spider.web"

##30:

#line 464 "/u/nr/web/src/master/spider.web"

#line 465 "/u/nr/web/src/master/spider.web"
if(this_name!=""){
print"Error: name doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 467 "/u/nr/web/src/master/spider.web"

}
##:30

#line 651 "/u/nr/web/src/master/spider.web"

##31:

#line 469 "/u/nr/web/src/master/spider.web"

#line 470 "/u/nr/web/src/master/spider.web"
if(this_tangleto!=""){
print"Error: tangleto doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 472 "/u/nr/web/src/master/spider.web"

}
##:31

#line 652 "/u/nr/web/src/master/spider.web"

##34:

#line 484 "/u/nr/web/src/master/spider.web"

#line 485 "/u/nr/web/src/master/spider.web"
if(this_category==""){
print"Error: you must give a category on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 487 "/u/nr/web/src/master/spider.web"

}

##:34

#line 653 "/u/nr/web/src/master/spider.web"

pseudo_semi_category=this_category
pseudo_semi_mathness=this_mathness
pseudo_semi_translation=this_translation

##:43

#line 578 "/u/nr/web/src/master/spider.web"

}else if($2~/[a-zA-ZA-Z0-9]+/){

print"Error: unknown token species:",$2
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 582 "/u/nr/web/src/master/spider.web"

}else{
##44:

#line 675 "/u/nr/web/src/master/spider.web"

#line 676 "/u/nr/web/src/master/spider.web"
this_string=$2
##45:

#line 696 "/u/nr/web/src/master/spider.web"

#line 697 "/u/nr/web/src/master/spider.web"
old_string=this_string
this_string=""


idx=index(old_string,"{space}")
while(idx!=0){
temp=substr(old_string,1,idx-1)
this_string=this_string temp" "
old_string=substr(old_string,idx+7)
idx=index(old_string,"{space}")
}
this_string=this_string old_string

##:45

#line 677 "/u/nr/web/src/master/spider.web"

$2=this_string
##49:

#line 763 "/u/nr/web/src/master/spider.web"

#line 764 "/u/nr/web/src/master/spider.web"
if($2=="@"){
$2="@@"
tokenname[$2]="'@@'"
tokenlength[$2]=1
}else if($2=="'"||$2=="\\"){
$2="\\"$2
tokenname[$2]="'"$2"'"
tokenlength[$2]=1
}else if(length($2)>1){
##50:

#line 789 "/u/nr/web/src/master/spider.web"

#line 790 "/u/nr/web/src/master/spider.web"
tokenname[$2]="SP_gen_token_"tokennumber
tokennumbers[$2]=tokennumber
tokennumber--

temp=sprintf("strncmp(\"%s\",loc-1,%d)==0",$2,length($2))
tokentest[$2]=temp
tokenlength[$2]=length($2)


##:50

#line 773 "/u/nr/web/src/master/spider.web"

}else{
temp=sprintf("'%s'",$2)
tokenname[$2]=temp
tokenlength[$2]=1
}

##:49

#line 680 "/u/nr/web/src/master/spider.web"

if(tokens[$2]!=""){
print"Warning: token",$2,"defined twice"
}
tokens[$2]=1
##51:

#line 800 "/u/nr/web/src/master/spider.web"

#line 801 "/u/nr/web/src/master/spider.web"
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 802 "/u/nr/web/src/master/spider.web"

this_name=tokenname[$2]
start_place=3
##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 807 "/u/nr/web/src/master/spider.web"

##34:

#line 484 "/u/nr/web/src/master/spider.web"

#line 485 "/u/nr/web/src/master/spider.web"
if(this_category==""){
print"Error: you must give a category on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 487 "/u/nr/web/src/master/spider.web"

}

##:34

#line 808 "/u/nr/web/src/master/spider.web"

tokencategory[$2]=this_category
tokenmathness[$2]=this_mathness
tokentranslation[$2]=this_translation
tokenname[$2]=this_name
tokentangleto[$2]=this_tangleto

##:51

#line 685 "/u/nr/web/src/master/spider.web"

##53:

#line 824 "/u/nr/web/src/master/spider.web"

#line 825 "/u/nr/web/src/master/spider.web"
if(tokenlength[$2]>1&&tokennumbers[$2]==""){
print"This can't happen: token",$2,"is long",\
"but has no number"
exitcode=-1
}


##:53

#line 686 "/u/nr/web/src/master/spider.web"

##52:

#line 817 "/u/nr/web/src/master/spider.web"

#line 818 "/u/nr/web/src/master/spider.web"
temp=tokenlength[$2]
if(temp>maxtokenlength){
maxtokenlength=temp
}

##:52

#line 687 "/u/nr/web/src/master/spider.web"



##:44

#line 584 "/u/nr/web/src/master/spider.web"

}
categories[this_category]=1

next
}

##:39
##75:

#line 1179 "/u/nr/web/src/master/spider.web"

#line 1180 "/u/nr/web/src/master/spider.web"
/^ilk /{
print"Ilk",$2>logfile
##36:

#line 516 "/u/nr/web/src/master/spider.web"

#line 517 "/u/nr/web/src/master/spider.web"
this_translation=default_translation
this_mathness=default_mathness
this_name=""
this_category=""
this_tangleto=""
##:36

#line 1183 "/u/nr/web/src/master/spider.web"

##76:

#line 1202 "/u/nr/web/src/master/spider.web"

#line 1203 "/u/nr/web/src/master/spider.web"
if($2~/^[a-zA-Z_]+_like$/&&$0!~/ category /){

this_category=substr($2,1,length($2)-5)
categories[this_category]=1
}

##:76

#line 1184 "/u/nr/web/src/master/spider.web"

this_name=""
start_place=3
##29:

#line 432 "/u/nr/web/src/master/spider.web"

#line 433 "/u/nr/web/src/master/spider.web"
for(i=start_place;i<NF;){
if($i=="tangleto"){
i++
this_tangleto=$i
i++
}else if($i=="translation"){
i++
this_translation=$i
i++
}else if($i=="mathness"){
i++
this_mathness=$i
i++
}else if($i=="category"){
i++
this_category=$i
categories[$i]=1
i++
}else if($i=="name"){
i++
this_name="SP_"$i
i++
}else{
print"Error: unrecognized token description",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 460 "/u/nr/web/src/master/spider.web"


##:29

#line 1189 "/u/nr/web/src/master/spider.web"

##34:

#line 484 "/u/nr/web/src/master/spider.web"

#line 485 "/u/nr/web/src/master/spider.web"
if(this_category==""){
print"Error: you must give a category on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 487 "/u/nr/web/src/master/spider.web"

}

##:34

#line 1190 "/u/nr/web/src/master/spider.web"

##30:

#line 464 "/u/nr/web/src/master/spider.web"

#line 465 "/u/nr/web/src/master/spider.web"
if(this_name!=""){
print"Error: name doesn't apply on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 467 "/u/nr/web/src/master/spider.web"

}
##:30

#line 1191 "/u/nr/web/src/master/spider.web"

ilk_category[$2]=this_category
ilk_mathness[$2]=this_mathness
ilk_translation[$2]=this_translation
next
}


##:75
##77:

#line 1216 "/u/nr/web/src/master/spider.web"

#line 1217 "/u/nr/web/src/master/spider.web"
/^reserved /{
print"Reserved word",$2>logfile
if($0!~/ ilk /){
##78:

#line 1242 "/u/nr/web/src/master/spider.web"

#line 1243 "/u/nr/web/src/master/spider.web"
temp=$2"_like"
reservedilk[$2]=temp
if(ilk_translation[temp]==""){
ilk_translation[temp]=default_translation
}
has_reserved[temp]=1
if(ilk_mathness[temp]==""){
ilk_mathness[temp]=default_mathness
}

if(ilk_category[temp]==""){
ilk_category[temp]=$2
categories[$2]=1
}
ilk_is_made_up[temp]=1



##:78

#line 1220 "/u/nr/web/src/master/spider.web"

}
for(i=3;i<=NF;){
if($i=="ilk"){
i++
reservedilk[$2]=$i
has_reserved[$i]=1
i++
}else{
print"Error: bad reserved word attribute:",$i,\
"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1231 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 1234 "/u/nr/web/src/master/spider.web"

next
}

##:77
##129:

#line 2067 "/u/nr/web/src/master/spider.web"

#line 2068 "/u/nr/web/src/master/spider.web"
/^language /{
language=$2
extension=language
for(i=3;i<NF;i++){
if($i=="extension"){
i++
extension=$i
i++
}else if($i=="version"){
i++
version=$i
i++
}else{
print"Error: unknown language property",$i,\
"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2083 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 2086 "/u/nr/web/src/master/spider.web"

##131:

#line 2121 "/u/nr/web/src/master/spider.web"

#line 2122 "/u/nr/web/src/master/spider.web"
macrofile=extension"web.tex"
print"\\input webkernel.tex">macrofile


##:131

#line 2087 "/u/nr/web/src/master/spider.web"

next
}

##:129
##132:

#line 2128 "/u/nr/web/src/master/spider.web"

#line 2129 "/u/nr/web/src/master/spider.web"
/^macros begin$/,/^macros end$/{
if(begunmacs==0){
begunmacs=1
next
}
if($0~/^macros end$/){
begunmacs=0
next
}
if(macrofile==""){
if(complained==0){
print"Error: you must give \"language\"",\
"before \"macros\""
complained=1
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2143 "/u/nr/web/src/master/spider.web"

}
}else{
print $0>macrofile
}
next
}



##:132
##133:

#line 2159 "/u/nr/web/src/master/spider.web"

#line 2160 "/u/nr/web/src/master/spider.web"
/^module /{
for(i=2;i<NF;){
if($i=="definition"){
i++
mod_def_cat=$i
categories[$i]=1
print"Module definition category set to",$i>logfile
i++
}else if($i=="use"){
i++
mod_use_cat=$i
categories[$i]=1
print"Module use category set to",$i>logfile
i++
}else{
print"Error: unknown module property",$i,\
"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2177 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 2180 "/u/nr/web/src/master/spider.web"

next
}

##:133
##135:

#line 2209 "/u/nr/web/src/master/spider.web"

#line 2210 "/u/nr/web/src/master/spider.web"
/^at_sign /{
if(NF==2&&length($2)==1){
if($2=="@"){
at_sign="@@"
}else{
at_sign=$2
}
}else{
print"Error: I can't understand",$0
print"       Give me an at sign of length 1"
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2220 "/u/nr/web/src/master/spider.web"

}
next
}

##:135
##139:

#line 2250 "/u/nr/web/src/master/spider.web"

#line 2251 "/u/nr/web/src/master/spider.web"
/^comment /{
print $0>logfile
for(i=2;i<NF;){
if($i=="begin"){
i++
if($i~/^<.*>$/){
transstring=$i
wherestring="in \"comment begin\" on line "NR
##27:

#line 387 "/u/nr/web/src/master/spider.web"

#line 388 "/u/nr/web/src/master/spider.web"
temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 393 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
print"Digit not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^[a-zA-Z_]+$/){
print"Key word not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=substr(alternate,2,length(alternate)-2)
outstring=outstring temp
}else if(alternate~/^\*$/){
print"<*> not allowed in restricted translation",wherestring
exitcode=-1
}else{
print"Bogus restricted translation",wherestring
exitcode=-1
}
}
outstring="\""outstring"\""



##:27

#line 2260 "/u/nr/web/src/master/spider.web"

begin_comment_string=outstring
i++
}else{
print"Error: \"comment begin\" must have a restricted translation"
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2265 "/u/nr/web/src/master/spider.web"

}
}else if($i=="end"){
i++
if($i=="newline"){
comments_end_with_newline=1
end_comment_string="\"\\n\""
}else if($i~/^<.*>$/){
comments_end_with_newline=0
transstring=$i
wherestring="in \"comment end\" on line "NR
##27:

#line 387 "/u/nr/web/src/master/spider.web"

#line 388 "/u/nr/web/src/master/spider.web"
temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 393 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
print"Digit not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^[a-zA-Z_]+$/){
print"Key word not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=substr(alternate,2,length(alternate)-2)
outstring=outstring temp
}else if(alternate~/^\*$/){
print"<*> not allowed in restricted translation",wherestring
exitcode=-1
}else{
print"Bogus restricted translation",wherestring
exitcode=-1
}
}
outstring="\""outstring"\""



##:27

#line 2278 "/u/nr/web/src/master/spider.web"

end_comment_string=outstring
}else{
print"Error: \"comment end\" must have a restricted translation"
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2282 "/u/nr/web/src/master/spider.web"

}
i++
}else{
print"Error: bad comment attribute:",$i
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2287 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 2290 "/u/nr/web/src/master/spider.web"

##145:

#line 2372 "/u/nr/web/src/master/spider.web"

#line 2373 "/u/nr/web/src/master/spider.web"
if(macrofile!=""){
this_string=substr(begin_comment_string,2,length(begin_comment_string)-2)
##147:

#line 2406 "/u/nr/web/src/master/spider.web"

#line 2407 "/u/nr/web/src/master/spider.web"
tex_string=""
while(length(this_string)>0){
c=substr(this_string,1,1)
this_string=substr(this_string,2)
cprime=texof[c]
if(cprime==""){
tex_string=tex_string c
}else{
tex_string=tex_string cprime
}
}

##:147

#line 2375 "/u/nr/web/src/master/spider.web"

printf"\\def\\commentbegin{%s}\n",tex_string>macrofile
if(comments_end_with_newline==0){
this_string=substr(end_comment_string,2,length(end_comment_string)-2)
##147:

#line 2406 "/u/nr/web/src/master/spider.web"

#line 2407 "/u/nr/web/src/master/spider.web"
tex_string=""
while(length(this_string)>0){
c=substr(this_string,1,1)
this_string=substr(this_string,2)
cprime=texof[c]
if(cprime==""){
tex_string=tex_string c
}else{
tex_string=tex_string cprime
}
}

##:147

#line 2379 "/u/nr/web/src/master/spider.web"

printf"\\def\\commentend{%s}\n",tex_string>macrofile
}else{
print"\\def\\commentend{\\relax}">macrofile
}
}else{
print"Error: I can't write comment info to the macro file---"
print"       you haven't given me any \"language\" information"
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2387 "/u/nr/web/src/master/spider.web"

}



##:145

#line 2291 "/u/nr/web/src/master/spider.web"

next
}

##:139
##148:

#line 2424 "/u/nr/web/src/master/spider.web"

#line 2425 "/u/nr/web/src/master/spider.web"
/^line /{
print $0>logfile
for(i=2;i<NF;){
if($i=="begin"){
i++
if($i~/^<.*>$/){
transstring=$i
wherestring="in \"line begin\" on line "NR
##27:

#line 387 "/u/nr/web/src/master/spider.web"

#line 388 "/u/nr/web/src/master/spider.web"
temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 393 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
print"Digit not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^[a-zA-Z_]+$/){
print"Key word not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=substr(alternate,2,length(alternate)-2)
outstring=outstring temp
}else if(alternate~/^\*$/){
print"<*> not allowed in restricted translation",wherestring
exitcode=-1
}else{
print"Bogus restricted translation",wherestring
exitcode=-1
}
}
outstring="\""outstring"\""



##:27

#line 2434 "/u/nr/web/src/master/spider.web"

sharp_line_open=outstring
i++
}else{
print"Error: \"line begin\" must have a restricted translation"
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2439 "/u/nr/web/src/master/spider.web"

}
}else if($i=="end"){
i++
if($i~/^<.*>$/){
transstring=$i
wherestring="in \"line end\" on line "NR
##27:

#line 387 "/u/nr/web/src/master/spider.web"

#line 388 "/u/nr/web/src/master/spider.web"
temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 393 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
print"Digit not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^[a-zA-Z_]+$/){
print"Key word not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=substr(alternate,2,length(alternate)-2)
outstring=outstring temp
}else if(alternate~/^\*$/){
print"<*> not allowed in restricted translation",wherestring
exitcode=-1
}else{
print"Bogus restricted translation",wherestring
exitcode=-1
}
}
outstring="\""outstring"\""



##:27

#line 2448 "/u/nr/web/src/master/spider.web"

sharp_line_close=outstring
}else{
print"Error: \"line end\" must have a restricted translation"
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2452 "/u/nr/web/src/master/spider.web"

}
i++
}else{
print"Error: bad line attribute:",$i,"on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 2457 "/u/nr/web/src/master/spider.web"

}
}
##5:

#line 89 "/u/nr/web/src/master/spider.web"

#line 90 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: leftover fields",$i,"... on line",NR
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 92 "/u/nr/web/src/master/spider.web"

}


##:5

#line 2460 "/u/nr/web/src/master/spider.web"

next
}

##:148
##151:

#line 2477 "/u/nr/web/src/master/spider.web"

#line 2478 "/u/nr/web/src/master/spider.web"
/^date /{

mo=month[$3]
day=$4
year=$7
time=$5
##153:

#line 2506 "/u/nr/web/src/master/spider.web"

#line 2507 "/u/nr/web/src/master/spider.web"
hour=substr(time,1,2)
if(hour>=12)
ampm="PM"
else
ampm="AM"

if(hour==0){
hour=12
}else if(hour>12){
hour=hour-12
}
minute=substr(time,4,2)


##:153

#line 2484 "/u/nr/web/src/master/spider.web"

date=sprintf("(generated at %d:%s %s on %s %d, %d)",\
hour,minute,ampm,mo,day,year)
next
}

##:151

#line 60 "/u/nr/web/src/master/spider.web"

##88:

#line 1438 "/u/nr/web/src/master/spider.web"

#line 1439 "/u/nr/web/src/master/spider.web"
/-->/{
##89:

#line 1467 "/u/nr/web/src/master/spider.web"

#line 1468 "/u/nr/web/src/master/spider.web"
lowpos=0;highpos=0;pos=1
prodnum=prodnum+1
inputline[prodnum]=$0
print"Parsing production",prodnum,$0>logfile


##:89

#line 1440 "/u/nr/web/src/master/spider.web"

##90:

#line 1488 "/u/nr/web/src/master/spider.web"

#line 1489 "/u/nr/web/src/master/spider.web"
trans[pos]=""
for(i=1;i<=NF;i++){
if($i~/<.*>/){
##92:

#line 1521 "/u/nr/web/src/master/spider.web"

#line 1522 "/u/nr/web/src/master/spider.web"
transstring=$i
selfstring=""
wherestring=sprintf("in production on line %d",NR)
append_keyword="app"
##24:

#line 334 "/u/nr/web/src/master/spider.web"

temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 340 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
temp=sprintf("\tapp_str(\"%s\");\n",alternate)
outstring=outstring temp
}else if(alternate~/^[a-zA-Z_]+$/){
translation_keywords[alternate]=1
temp=sprintf("\t%s(%s);\n",append_keyword,alternate)

outstring=outstring temp
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=sprintf("\tapp_str(%s);\n",alternate)
outstring=outstring temp
}else if(alternate~/^\*$/){
##26:

#line 375 "/u/nr/web/src/master/spider.web"

#line 376 "/u/nr/web/src/master/spider.web"
if(selfstring==""){
print"Translation \"<*>\" makes no sense",wherestring
exitcode=-1
}

##:26

#line 353 "/u/nr/web/src/master/spider.web"

outstring=outstring selfstring
}else{
print"Bogus translation",wherestring
exitcode=-1
}
}

##:24

#line 1527 "/u/nr/web/src/master/spider.web"

trans[pos]=trans[pos]outstring

##:92

#line 1492 "/u/nr/web/src/master/spider.web"

}else if($i~/^!?[a-zA-Z_]+(\*\*?)?$/){
##93:

#line 1539 "/u/nr/web/src/master/spider.web"

#line 1540 "/u/nr/web/src/master/spider.web"
field[pos]=$i
##96:

#line 1602 "/u/nr/web/src/master/spider.web"

#line 1603 "/u/nr/web/src/master/spider.web"
temp=substr($i,1,1)
if(temp=="!"){
negation=1
$i=substr($i,2)
}else{
negation=0
}

##:96

#line 1541 "/u/nr/web/src/master/spider.web"

##98:

#line 1634 "/u/nr/web/src/master/spider.web"

#line 1635 "/u/nr/web/src/master/spider.web"
if($i~/^([a-zA-Z_]+|\(([a-zA-Z_]+\|)*[a-zA-Z_]+\))\*\*$/){
temp=sprintf("\tmake_underlined(pp+%d);\n",pos-1)
trans[pos]=trans[pos]temp
$i=substr($i,1,length($i)-2)
}else if($i~/^([a-zA-Z_]+|\(([a-zA-Z_]+\|)*[a-zA-Z_]+\))\*$/){
temp=sprintf("\tmake_underlined(pp+%d);\n",pos-1)
trans[pos]=trans[pos]temp
$i=substr($i,1,length($i)-1)
}else if($i~/\*$/){
print"Error: can't remove stars in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1645 "/u/nr/web/src/master/spider.web"

}

##:98

#line 1543 "/u/nr/web/src/master/spider.web"

cat=$i
categories[cat]=1
if(negation==0){
test[pos]=sprintf("(pp+%d)->cat==SP_%s",pos-1,cat)
}else{
test[pos]=sprintf("((pp+%d)->cat!=SP_%s && (pp+%d)->cat != 0)",\
pos-1,cat,pos-1)
}
##95:

#line 1593 "/u/nr/web/src/master/spider.web"

#line 1594 "/u/nr/web/src/master/spider.web"
if(pos>highestpos[cat]){
highestpos[cat]=pos
}

##:95

#line 1552 "/u/nr/web/src/master/spider.web"

##97:

#line 1615 "/u/nr/web/src/master/spider.web"

#line 1616 "/u/nr/web/src/master/spider.web"
pos=pos+1
trans[pos]=""

##:97

#line 1553 "/u/nr/web/src/master/spider.web"


##:93

#line 1494 "/u/nr/web/src/master/spider.web"

}else if($i~/^!?\(([a-zA-Z_]+\|)*[a-zA-Z_]+\)(\*\*?)?$/){
##94:

#line 1563 "/u/nr/web/src/master/spider.web"

#line 1564 "/u/nr/web/src/master/spider.web"
field[pos]=$i
##96:

#line 1602 "/u/nr/web/src/master/spider.web"

#line 1603 "/u/nr/web/src/master/spider.web"
temp=substr($i,1,1)
if(temp=="!"){
negation=1
$i=substr($i,2)
}else{
negation=0
}

##:96

#line 1565 "/u/nr/web/src/master/spider.web"

if(negation==0){
test[pos]="("
}else{
temp=sprintf("(pp+%d)->cat==0",pos-1)
test[pos]="!("temp"||"
}
##98:

#line 1634 "/u/nr/web/src/master/spider.web"

#line 1635 "/u/nr/web/src/master/spider.web"
if($i~/^([a-zA-Z_]+|\(([a-zA-Z_]+\|)*[a-zA-Z_]+\))\*\*$/){
temp=sprintf("\tmake_underlined(pp+%d);\n",pos-1)
trans[pos]=trans[pos]temp
$i=substr($i,1,length($i)-2)
}else if($i~/^([a-zA-Z_]+|\(([a-zA-Z_]+\|)*[a-zA-Z_]+\))\*$/){
temp=sprintf("\tmake_underlined(pp+%d);\n",pos-1)
trans[pos]=trans[pos]temp
$i=substr($i,1,length($i)-1)
}else if($i~/\*$/){
print"Error: can't remove stars in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1645 "/u/nr/web/src/master/spider.web"

}

##:98

#line 1573 "/u/nr/web/src/master/spider.web"

temp=substr($i,2,length($i)-2)
m=split(temp,tok,"|")
for(j=1;j<=m;j++){
cat=tok[j]
categories[cat]=1
##95:

#line 1593 "/u/nr/web/src/master/spider.web"

#line 1594 "/u/nr/web/src/master/spider.web"
if(pos>highestpos[cat]){
highestpos[cat]=pos
}

##:95

#line 1580 "/u/nr/web/src/master/spider.web"

temp=sprintf("(pp+%d)->cat==SP_%s",pos-1,cat)
test[pos]=test[pos]temp
if(j!=m)
test[pos]=test[pos]"||\n"
}
test[pos]=test[pos]")"
##97:

#line 1615 "/u/nr/web/src/master/spider.web"

#line 1616 "/u/nr/web/src/master/spider.web"
pos=pos+1
trans[pos]=""

##:97

#line 1587 "/u/nr/web/src/master/spider.web"



##:94

#line 1496 "/u/nr/web/src/master/spider.web"

}else if($i=="?"){
##99:

#line 1650 "/u/nr/web/src/master/spider.web"

#line 1651 "/u/nr/web/src/master/spider.web"
field[pos]=$i
test[pos]=sprintf("(pp+%d)->cat!=0",pos-1)
highwildcard=pos
##97:

#line 1615 "/u/nr/web/src/master/spider.web"

#line 1616 "/u/nr/web/src/master/spider.web"
pos=pos+1
trans[pos]=""

##:97

#line 1654 "/u/nr/web/src/master/spider.web"




##:99

#line 1498 "/u/nr/web/src/master/spider.web"

}else if($i=="["){
lowpos=pos
}else if($i=="]"){
highpos=pos
}else if($i=="-->"){
break
}else{
print"Error: bad field is",$i,"in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1507 "/u/nr/web/src/master/spider.web"

}
}
i++


##:90

#line 1441 "/u/nr/web/src/master/spider.web"

##100:

#line 1675 "/u/nr/web/src/master/spider.web"

#line 1676 "/u/nr/web/src/master/spider.web"
arrowpos=pos
if(lowpos==0&&highpos==0){
lowpos=1
highpos=arrowpos

}else if(lowpos==0||highpos==0){
print"Error: square brackets don't balance in",\
"production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1684 "/u/nr/web/src/master/spider.web"

}

##:100

#line 1442 "/u/nr/web/src/master/spider.web"

##101:

#line 1689 "/u/nr/web/src/master/spider.web"

#line 1690 "/u/nr/web/src/master/spider.web"
if(arrowpos-1>highestposoverall){
highestposoverall=arrowpos-1
}

##:101

#line 1443 "/u/nr/web/src/master/spider.web"

##102:

#line 1704 "/u/nr/web/src/master/spider.web"

#line 1705 "/u/nr/web/src/master/spider.web"
for(hup=arrowpos-1;field[hup]=="?";){
hup--
}
for(;hup>highestunknownpos;hup--){
temp=field[hup]
temp=substr(temp,1,1)
if(temp=="?"||temp=="!"){
highestunknownpos=hup
break
}
}

##:102

#line 1444 "/u/nr/web/src/master/spider.web"

##103:

#line 1718 "/u/nr/web/src/master/spider.web"

#line 1719 "/u/nr/web/src/master/spider.web"
for(pos=1;pos<lowpos;pos++){
##105:

#line 1729 "/u/nr/web/src/master/spider.web"

#line 1730 "/u/nr/web/src/master/spider.web"
if(i>NF||$i!=field[pos]){
print"Error: token mismatch is: found",$i,\
"sought",field[pos],"on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1733 "/u/nr/web/src/master/spider.web"

}

##:105

#line 1720 "/u/nr/web/src/master/spider.web"

i++
}

##:103

#line 1445 "/u/nr/web/src/master/spider.web"

##106:

#line 1742 "/u/nr/web/src/master/spider.web"

#line 1743 "/u/nr/web/src/master/spider.web"

if(i>NF){
print"Error: no target category in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1746 "/u/nr/web/src/master/spider.web"

}
if($i~/#[0-9]+/){
$i=substr($i,2)
##117:

#line 1863 "/u/nr/web/src/master/spider.web"

#line 1864 "/u/nr/web/src/master/spider.web"
if((0+$i)<1||(0+$i)>=0+arrowpos){
print"Error: can't take token number",$i,"of",arrowpos-1,\
"tokens","in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1867 "/u/nr/web/src/master/spider.web"

}

##:117

#line 1750 "/u/nr/web/src/master/spider.web"

targetcategory[prodnum]="Unnamed category"
temp=sprintf("(pp+%d)->cat",$i-1)
unnamed_cat[prodnum]=temp
}else if($i~/[a-zA-Z][a-zA-Z_]*/){
targetcategory[prodnum]=$i
categories[$i]=1
}else{
print"Error: unrecognizable target token",$i,\
"in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1760 "/u/nr/web/src/master/spider.web"

}
i++

##:106

#line 1446 "/u/nr/web/src/master/spider.web"

##104:

#line 1724 "/u/nr/web/src/master/spider.web"

#line 1725 "/u/nr/web/src/master/spider.web"
for(pos=highpos;pos<arrowpos;pos++){
##105:

#line 1729 "/u/nr/web/src/master/spider.web"

#line 1730 "/u/nr/web/src/master/spider.web"
if(i>NF||$i!=field[pos]){
print"Error: token mismatch is: found",$i,\
"sought",field[pos],"on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1733 "/u/nr/web/src/master/spider.web"

}

##:105

#line 1726 "/u/nr/web/src/master/spider.web"

i++
}
##:104

#line 1447 "/u/nr/web/src/master/spider.web"

##107:

#line 1765 "/u/nr/web/src/master/spider.web"

#line 1766 "/u/nr/web/src/master/spider.web"
if(i<=NF){
print"Error: used only "i-1" of "NF" tokens",\
"in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1769 "/u/nr/web/src/master/spider.web"

}

##:107

#line 1448 "/u/nr/web/src/master/spider.web"

##108:

#line 1775 "/u/nr/web/src/master/spider.web"

#line 1776 "/u/nr/web/src/master/spider.web"
prodtest[prodnum]=""
for(pos=1;pos<arrowpos;pos++){
if(pos>1){
prodtest[prodnum]=prodtest[prodnum]" &&\n\t\t"
}
prodtest[prodnum]=prodtest[prodnum]test[pos]
}

##:108

#line 1450 "/u/nr/web/src/master/spider.web"

##109:

#line 1785 "/u/nr/web/src/master/spider.web"

#line 1786 "/u/nr/web/src/master/spider.web"
prodtrans[prodnum]=""
for(pos=lowpos;pos<highpos;pos++){
prodtrans[prodnum]=prodtrans[prodnum]trans[pos]

temp=sprintf("\tapp1(pp+%d);\n",pos-1)
prodtrans[prodnum]=prodtrans[prodnum]temp
##114:

#line 1826 "/u/nr/web/src/master/spider.web"

#line 1827 "/u/nr/web/src/master/spider.web"
temp=field[pos]
tempa=substr(temp,1,1)
if(tempa!="!"){
if(temp~/^\(([a-zA-Z_]+\|)*[a-zA-Z_]+\)(\*\*?)?$/){

##115:

#line 1849 "/u/nr/web/src/master/spider.web"

#line 1850 "/u/nr/web/src/master/spider.web"
while(temp~/\*$/){
temp=substr(temp,1,length(temp)-1)
}

##:115

#line 1832 "/u/nr/web/src/master/spider.web"

temp=substr(temp,2,length(temp)-2)
m=split(temp,tok,"|")
for(j=1;j<=m;j++){
alternate=tok[j]
reduced[alternate]=1
}
}else if(temp~/^[a-zA-Z_]+(\*\*?)?$/){
##115:

#line 1849 "/u/nr/web/src/master/spider.web"

#line 1850 "/u/nr/web/src/master/spider.web"
while(temp~/\*$/){
temp=substr(temp,1,length(temp)-1)
}

##:115

#line 1840 "/u/nr/web/src/master/spider.web"

reduced[temp]=1
}else if(temp!="?"){
print"Confusion: unintelligible field[pos]:",temp,\
"in production on line",NR
##91:

#line 1515 "/u/nr/web/src/master/spider.web"

#line 1516 "/u/nr/web/src/master/spider.web"
prodnum--
##4:

#line 79 "/u/nr/web/src/master/spider.web"

#line 80 "/u/nr/web/src/master/spider.web"
exitcode=-1
next


##:4

#line 1517 "/u/nr/web/src/master/spider.web"


##:91

#line 1845 "/u/nr/web/src/master/spider.web"

}
}

##:114

#line 1794 "/u/nr/web/src/master/spider.web"

}
prodtrans[prodnum]=prodtrans[prodnum]trans[highpos]

##:109

#line 1452 "/u/nr/web/src/master/spider.web"

##110:

#line 1799 "/u/nr/web/src/master/spider.web"

#line 1800 "/u/nr/web/src/master/spider.web"
ppstart[prodnum]=lowpos-1
tokensreduced[prodnum]=highpos-lowpos

##:110

#line 1454 "/u/nr/web/src/master/spider.web"

##111:

#line 1804 "/u/nr/web/src/master/spider.web"

#line 1805 "/u/nr/web/src/master/spider.web"
if(highpos-lowpos==1){
printf"%d: %s --> %s\n",prodnum,field[lowpos],\
targetcategory[prodnum]>cycles
wrotecycles=1
}

##:111

#line 1456 "/u/nr/web/src/master/spider.web"

next
}

##:88

#line 61 "/u/nr/web/src/master/spider.web"

##7:

#line 106 "/u/nr/web/src/master/spider.web"

#line 107 "/u/nr/web/src/master/spider.web"
{
print"Warning: I don't know what to do with this line:"
print"        ",$0
print"Warning: I don't know what to do with this line:">logfile
print"        ",$0>logfile
}


##:7

#line 62 "/u/nr/web/src/master/spider.web"


END{
##54:

#line 843 "/u/nr/web/src/master/spider.web"

#line 844 "/u/nr/web/src/master/spider.web"
tempfile=scrapfile
##55:

#line 850 "/u/nr/web/src/master/spider.web"

#line 851 "/u/nr/web/src/master/spider.web"
print"@ Here we input tokens of more than one character">tempfile
print"@<Compress two-symbol operator@>=">tempfile
##56:

#line 859 "/u/nr/web/src/master/spider.web"

#line 860 "/u/nr/web/src/master/spider.web"
for(len=maxtokenlength;len>=2;len--){
printf"if (loc+%d<=limit) {\n",len-1>tempfile
##57:

#line 867 "/u/nr/web/src/master/spider.web"

#line 868 "/u/nr/web/src/master/spider.web"
notfirst=0
for(t in tokentest){
if(tokenlength[t]==len){
printf"\t">tempfile
if(notfirst==1){
printf"else ">tempfile
}
notfirst=1
printf"if (%s) {\n",tokentest[t]>tempfile
printf"\t\tloc += %d;\n",len-1>tempfile
printf"\t\treturn %s;\n\t\t}\n",tokenname[t]>tempfile
}
}


##:57

#line 862 "/u/nr/web/src/master/spider.web"

printf"\t}\n">tempfile
}
##58:

#line 883 "/u/nr/web/src/master/spider.web"

#line 884 "/u/nr/web/src/master/spider.web"
for(t in tokentest){
if(tokenlength[t]==1){
print"This can't happen: token",t,"is of length 1 but",\
"it has a test"
exitcode=-1
}
}



##:58

#line 865 "/u/nr/web/src/master/spider.web"


##:56

#line 854 "/u/nr/web/src/master/spider.web"


##:55

#line 845 "/u/nr/web/src/master/spider.web"

tempfile=ttokfile
##55:

#line 850 "/u/nr/web/src/master/spider.web"

#line 851 "/u/nr/web/src/master/spider.web"
print"@ Here we input tokens of more than one character">tempfile
print"@<Compress two-symbol operator@>=">tempfile
##56:

#line 859 "/u/nr/web/src/master/spider.web"

#line 860 "/u/nr/web/src/master/spider.web"
for(len=maxtokenlength;len>=2;len--){
printf"if (loc+%d<=limit) {\n",len-1>tempfile
##57:

#line 867 "/u/nr/web/src/master/spider.web"

#line 868 "/u/nr/web/src/master/spider.web"
notfirst=0
for(t in tokentest){
if(tokenlength[t]==len){
printf"\t">tempfile
if(notfirst==1){
printf"else ">tempfile
}
notfirst=1
printf"if (%s) {\n",tokentest[t]>tempfile
printf"\t\tloc += %d;\n",len-1>tempfile
printf"\t\treturn %s;\n\t\t}\n",tokenname[t]>tempfile
}
}


##:57

#line 862 "/u/nr/web/src/master/spider.web"

printf"\t}\n">tempfile
}
##58:

#line 883 "/u/nr/web/src/master/spider.web"

#line 884 "/u/nr/web/src/master/spider.web"
for(t in tokentest){
if(tokenlength[t]==1){
print"This can't happen: token",t,"is of length 1 but",\
"it has a test"
exitcode=-1
}
}



##:58

#line 865 "/u/nr/web/src/master/spider.web"


##:56

#line 854 "/u/nr/web/src/master/spider.web"


##:55

#line 847 "/u/nr/web/src/master/spider.web"


##:54
##59:

#line 900 "/u/nr/web/src/master/spider.web"

#line 901 "/u/nr/web/src/master/spider.web"
print"Writing out predefined scraps">logfile
##60:

#line 913 "/u/nr/web/src/master/spider.web"

#line 914 "/u/nr/web/src/master/spider.web"
if(id_category!=""){
print"@ @<Append an identifier scrap@>=">scrapfile
print"p=id_lookup(id_first, id_loc,normal);">scrapfile
print"if (p->ilk==normal) {">scrapfile
print"  small_app(id_flag+p-name_dir);">scrapfile
printf"  app_scrap(SP_%s,%s_math);",\
id_category,id_mathness>scrapfile
appended[id_category]=1
print" /* not a reserved word */">scrapfile
print"}">scrapfile
print"else if reserved(p) {">scrapfile
print"@<Decide on reserved word scraps@>;">scrapfile
print"}">scrapfile
print"else {">scrapfile
print" err_print(\"! Identifier with unmentioned ilk\");">scrapfile
print"@.Identifier with unmentioned ilk@>">scrapfile
print"}">scrapfile
}else{
print"Error: I don't know what to do with an identifier"
print"       Please give me a \"token identifier ...\""
exitcode=-1
}

##:60

#line 902 "/u/nr/web/src/master/spider.web"

##62:

#line 944 "/u/nr/web/src/master/spider.web"

#line 945 "/u/nr/web/src/master/spider.web"
print"Warning: TeX strings have the same category as ",\
"numeric constants in this WEAVE."
print"Warning: TeX strings have the same category as ",\
"numeric constants in this WEAVE.">logfile
if(number_category!=""){
print"@ For some reason strings, constants,",\
" and \TeX\ strings are identified.">scrapfile
print"That has to be fixed.">scrapfile
print"@<Do the |app_scrap| for a string or constant@>=">scrapfile
printf"app_scrap(SP_%s,%s_math);\n",number_category,\
number_mathness>scrapfile
appended[number_category]=1
}else{
print"Error: I don't know what to do with a numeric constant"
print"       Please give me a \"token number ...\""
exitcode=-1
}


##:62

#line 903 "/u/nr/web/src/master/spider.web"

##64:

#line 973 "/u/nr/web/src/master/spider.web"

#line 974 "/u/nr/web/src/master/spider.web"
if(newline_category!=""){
print"@ @<Append a newline scrap@>=">scrapfile
transstring=newline_translation
selfstring="small_app(next_control);"
wherestring="in translation of token newline"
append_keyword="small_app"
##24:

#line 334 "/u/nr/web/src/master/spider.web"

temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 340 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
temp=sprintf("\tapp_str(\"%s\");\n",alternate)
outstring=outstring temp
}else if(alternate~/^[a-zA-Z_]+$/){
translation_keywords[alternate]=1
temp=sprintf("\t%s(%s);\n",append_keyword,alternate)

outstring=outstring temp
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=sprintf("\tapp_str(%s);\n",alternate)
outstring=outstring temp
}else if(alternate~/^\*$/){
##26:

#line 375 "/u/nr/web/src/master/spider.web"

#line 376 "/u/nr/web/src/master/spider.web"
if(selfstring==""){
print"Translation \"<*>\" makes no sense",wherestring
exitcode=-1
}

##:26

#line 353 "/u/nr/web/src/master/spider.web"

outstring=outstring selfstring
}else{
print"Bogus translation",wherestring
exitcode=-1
}
}

##:24

#line 981 "/u/nr/web/src/master/spider.web"

print outstring>scrapfile
printf"  app_scrap(SP_%s,%s_math);\n",newline_category,\
newline_mathness>scrapfile
appended[newline_category]=1
}else{
print"Error: I don't know what to do with a newline"
print"       Please give me a \"token newline ...\""
exitcode=-1
}

##:64

#line 904 "/u/nr/web/src/master/spider.web"

##65:

#line 993 "/u/nr/web/src/master/spider.web"

#line 994 "/u/nr/web/src/master/spider.web"
if(pseudo_semi_category!=""){
print"@ @<Append a |pseudo_semi| scrap@>=">scrapfile
transstring=pseudo_semi_translation
selfstring="small_app(next_control);"
wherestring="in translation of token pseudo_semi"
append_keyword="small_app"
##24:

#line 334 "/u/nr/web/src/master/spider.web"

temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 340 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
temp=sprintf("\tapp_str(\"%s\");\n",alternate)
outstring=outstring temp
}else if(alternate~/^[a-zA-Z_]+$/){
translation_keywords[alternate]=1
temp=sprintf("\t%s(%s);\n",append_keyword,alternate)

outstring=outstring temp
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=sprintf("\tapp_str(%s);\n",alternate)
outstring=outstring temp
}else if(alternate~/^\*$/){
##26:

#line 375 "/u/nr/web/src/master/spider.web"

#line 376 "/u/nr/web/src/master/spider.web"
if(selfstring==""){
print"Translation \"<*>\" makes no sense",wherestring
exitcode=-1
}

##:26

#line 353 "/u/nr/web/src/master/spider.web"

outstring=outstring selfstring
}else{
print"Bogus translation",wherestring
exitcode=-1
}
}

##:24

#line 1001 "/u/nr/web/src/master/spider.web"

print outstring>scrapfile
printf"  app_scrap(SP_%s,%s_math);\n",pseudo_semi_category,\
pseudo_semi_mathness>scrapfile
appended[pseudo_semi_category]=1
}else{
printf"Error: I don't know what to do with a pseudo_semi (%s;)",\
substr(at_sign,1,1)
print"       Please give me a \"token pseudo_semi ...\""
exitcode=-1
}

##:65

#line 905 "/u/nr/web/src/master/spider.web"

print"Writing out token scraps">logfile
##66:

#line 1014 "/u/nr/web/src/master/spider.web"

#line 1015 "/u/nr/web/src/master/spider.web"
print"@ @<Cases for ordinary tokens@>=">scrapfile
for(t in tokens){
temp=tokenname[t]
printf"case %s:\n",temp>scrapfile
transstring=tokentranslation[t]
selfstring="small_app(next_control);"
wherestring=sprintf("in translation of token %s",t)
append_keyword="small_app"
##24:

#line 334 "/u/nr/web/src/master/spider.web"

temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 340 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
temp=sprintf("\tapp_str(\"%s\");\n",alternate)
outstring=outstring temp
}else if(alternate~/^[a-zA-Z_]+$/){
translation_keywords[alternate]=1
temp=sprintf("\t%s(%s);\n",append_keyword,alternate)

outstring=outstring temp
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=sprintf("\tapp_str(%s);\n",alternate)
outstring=outstring temp
}else if(alternate~/^\*$/){
##26:

#line 375 "/u/nr/web/src/master/spider.web"

#line 376 "/u/nr/web/src/master/spider.web"
if(selfstring==""){
print"Translation \"<*>\" makes no sense",wherestring
exitcode=-1
}

##:26

#line 353 "/u/nr/web/src/master/spider.web"

outstring=outstring selfstring
}else{
print"Bogus translation",wherestring
exitcode=-1
}
}

##:24

#line 1024 "/u/nr/web/src/master/spider.web"

print outstring>scrapfile
printf"\tapp_scrap(SP_%s,%s_math);\n",tokencategory[t],\
tokenmathness[t]>scrapfile
temp=tokencategory[t]
appended[temp]=1

print"\tbreak;">scrapfile
}

##:66

#line 907 "/u/nr/web/src/master/spider.web"





##:59
##67:

#line 1043 "/u/nr/web/src/master/spider.web"

#line 1044 "/u/nr/web/src/master/spider.web"
print"@ @<Cases for tokens to be output@>=">ttokfile
for(t in tokennumbers){
##69:

#line 1095 "/u/nr/web/src/master/spider.web"

#line 1096 "/u/nr/web/src/master/spider.web"
if(t=="string"||t=="constant"||t=="identifier")
continue



##:69

#line 1046 "/u/nr/web/src/master/spider.web"

printf"case %s:\n",tokenname[t]>ttokfile
this_tangleto=tokentangleto[t]
if(this_tangleto==""){
printf"\tC_printf(\"%%s\",\"%s\");\n",t>ttokfile
}else{
printf"\tif (out_state==verbatim) {\n">ttokfile
printf"\t\tC_printf(\"%%s\",\"%s\");\n",t>ttokfile
printf"\t} else {\n">ttokfile
##70:

#line 1102 "/u/nr/web/src/master/spider.web"

#line 1103 "/u/nr/web/src/master/spider.web"
oldwherestring=wherestring
wherestring="for tangleto "wherestring

transstring=this_tangleto
##27:

#line 387 "/u/nr/web/src/master/spider.web"

#line 388 "/u/nr/web/src/master/spider.web"
temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 393 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
print"Digit not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^[a-zA-Z_]+$/){
print"Key word not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=substr(alternate,2,length(alternate)-2)
outstring=outstring temp
}else if(alternate~/^\*$/){
print"<*> not allowed in restricted translation",wherestring
exitcode=-1
}else{
print"Bogus restricted translation",wherestring
exitcode=-1
}
}
outstring="\""outstring"\""



##:27

#line 1108 "/u/nr/web/src/master/spider.web"

printf"\tC_printf(\"%%s\",%s);\n",outstring>ttokfile

wherestring=oldwherestring



##:70

#line 1055 "/u/nr/web/src/master/spider.web"

printf"\t}\n">ttokfile
}
print"\tif (out_state!=verbatim) out_state=misc;">ttokfile
print"break;">ttokfile
}

##:67
##68:

#line 1064 "/u/nr/web/src/master/spider.web"

#line 1065 "/u/nr/web/src/master/spider.web"
print"@ @<Cases for tokens to be output@>=">ttokfile
for(t in tokentangleto){
##69:

#line 1095 "/u/nr/web/src/master/spider.web"

#line 1096 "/u/nr/web/src/master/spider.web"
if(t=="string"||t=="constant"||t=="identifier")
continue



##:69

#line 1067 "/u/nr/web/src/master/spider.web"

if(tokennumbers[t]!=""||tokentangleto[t]=="")
continue
if(t=="@"){
thistangletokname="@@"
}else if(t=="\\"||t=="'"){
thistangletokname="\\"t
}else{
thistangletokname=t
}
printf"case '%s':\n",thistangletokname>ttokfile
this_tangleto=tokentangleto[t]
if(this_tangleto==""){
print"This can't happen -- null tangleto for",t,wherestring
exitcode=-1
}else{
printf"\tif (out_state==verbatim) {\n">ttokfile
printf"\t\tC_printf(\"%%s\",\"%s\");\n",t>ttokfile
printf"\t} else {\n">ttokfile
##70:

#line 1102 "/u/nr/web/src/master/spider.web"

#line 1103 "/u/nr/web/src/master/spider.web"
oldwherestring=wherestring
wherestring="for tangleto "wherestring

transstring=this_tangleto
##27:

#line 387 "/u/nr/web/src/master/spider.web"

#line 388 "/u/nr/web/src/master/spider.web"
temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 393 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
print"Digit not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^[a-zA-Z_]+$/){
print"Key word not allowed in restricted translation",wherestring
exitcode=-1
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=substr(alternate,2,length(alternate)-2)
outstring=outstring temp
}else if(alternate~/^\*$/){
print"<*> not allowed in restricted translation",wherestring
exitcode=-1
}else{
print"Bogus restricted translation",wherestring
exitcode=-1
}
}
outstring="\""outstring"\""



##:27

#line 1108 "/u/nr/web/src/master/spider.web"

printf"\tC_printf(\"%%s\",%s);\n",outstring>ttokfile

wherestring=oldwherestring



##:70

#line 1086 "/u/nr/web/src/master/spider.web"

printf"\t}\n">ttokfile
}
print"\tif (out_state!=verbatim) out_state=misc;">ttokfile
print"break;">ttokfile
}
##:68
##71:

#line 1119 "/u/nr/web/src/master/spider.web"

#line 1120 "/u/nr/web/src/master/spider.web"
tempfile=scrapfile
##72:

#line 1127 "/u/nr/web/src/master/spider.web"

#line 1128 "/u/nr/web/src/master/spider.web"
print"@ Here are the definitions of the token names">tempfile
for(t in tokennumbers){
temp=tokennumbers[t]
if(temp==0)
continue
if(tempfile==ttokfile){
##69:

#line 1095 "/u/nr/web/src/master/spider.web"

#line 1096 "/u/nr/web/src/master/spider.web"
if(t=="string"||t=="constant"||t=="identifier")
continue



##:69

#line 1135 "/u/nr/web/src/master/spider.web"

temp=temp+31+3-highesttoken

}
printf"@d %s = %s\n",tokenname[t],temp>tempfile
}


##:72

#line 1121 "/u/nr/web/src/master/spider.web"

tempfile=ttokfile
##72:

#line 1127 "/u/nr/web/src/master/spider.web"

#line 1128 "/u/nr/web/src/master/spider.web"
print"@ Here are the definitions of the token names">tempfile
for(t in tokennumbers){
temp=tokennumbers[t]
if(temp==0)
continue
if(tempfile==ttokfile){
##69:

#line 1095 "/u/nr/web/src/master/spider.web"

#line 1096 "/u/nr/web/src/master/spider.web"
if(t=="string"||t=="constant"||t=="identifier")
continue



##:69

#line 1135 "/u/nr/web/src/master/spider.web"

temp=temp+31+3-highesttoken

}
printf"@d %s = %s\n",tokenname[t],temp>tempfile
}


##:72

#line 1123 "/u/nr/web/src/master/spider.web"


##:71
##79:

#line 1264 "/u/nr/web/src/master/spider.web"

#line 1265 "/u/nr/web/src/master/spider.web"
print"Writing out reserved words and ilks">logfile
ilkno=64
print"@ Here is a list of all the ilks">reserved
for(i in ilk_translation){
printf"@d SP_%s = %d\n",i,ilkno>reserved
ilkno++
}

##:79
##80:

#line 1275 "/u/nr/web/src/master/spider.web"

#line 1276 "/u/nr/web/src/master/spider.web"
print" ">reserved
print"@ Here are the scraps we get from the reserved words">reserved
print"@d the_word = res_flag+p-name_dir">reserved
print"@<Decide on reserved word scraps@>=">reserved
print"switch (p->ilk) {">reserved
for(t in ilk_translation){
printf"\tcase SP_%s: \n\t\t",t>reserved
transstring=ilk_translation[t]
selfstring="small_app(the_word);"
wherestring=sprintf("in translation of ilk %s",t)
append_keyword="small_app"
##24:

#line 334 "/u/nr/web/src/master/spider.web"

temp=substr(transstring,2,length(transstring)-2)
trcnt=split(temp,trtok,"-")
outstring=""
for(tridx=1;tridx<=trcnt;tridx++){
alternate=trtok[tridx]
##25:

#line 364 "/u/nr/web/src/master/spider.web"

#line 365 "/u/nr/web/src/master/spider.web"
if(alternate=="space"){
alternate="\" \""
}else if(alternate=="dash"){
alternate="\"-\""
}


##:25

#line 340 "/u/nr/web/src/master/spider.web"

if(alternate~/^[0-9]$/){
temp=sprintf("\tapp_str(\"%s\");\n",alternate)
outstring=outstring temp
}else if(alternate~/^[a-zA-Z_]+$/){
translation_keywords[alternate]=1
temp=sprintf("\t%s(%s);\n",append_keyword,alternate)

outstring=outstring temp
}else if(alternate~/^\"([^"]*\\\")*[^"]*\"$/){
temp=sprintf("\tapp_str(%s);\n",alternate)
outstring=outstring temp
}else if(alternate~/^\*$/){
##26:

#line 375 "/u/nr/web/src/master/spider.web"

#line 376 "/u/nr/web/src/master/spider.web"
if(selfstring==""){
print"Translation \"<*>\" makes no sense",wherestring
exitcode=-1
}

##:26

#line 353 "/u/nr/web/src/master/spider.web"

outstring=outstring selfstring
}else{
print"Bogus translation",wherestring
exitcode=-1
}
}

##:24

#line 1289 "/u/nr/web/src/master/spider.web"

if(trcnt>0)
has_translation[t]=1
print outstring>reserved
printf"\tapp_scrap(SP_%s,%s_math);\n",ilk_category[t],\
ilk_mathness[t]>reserved
temp=ilk_category[t]
appended[temp]=1

printf"\t\tbreak;\n">reserved
}
print"}">reserved


##:80
##81:

#line 1305 "/u/nr/web/src/master/spider.web"

#line 1306 "/u/nr/web/src/master/spider.web"
print"@ @<Store all the reserved words@>=">reserved
for(i in reservedilk){
printf"id_lookup(\"%s\",NULL,SP_%s);\n",i,reservedilk[i]>reserved
}

##:81
##118:

#line 1872 "/u/nr/web/src/master/spider.web"

#line 1873 "/u/nr/web/src/master/spider.web"
print"Writing out category codes">logfile
print"@ Here is a list of category codes scraps can have">grammarfile
i=1
for(t in categories){
printf"@d SP_%s = %d\n",t,i>grammarfile
i++
}
print"@c">grammarfile
##:118
##119:

#line 1883 "/u/nr/web/src/master/spider.web"

#line 1884 "/u/nr/web/src/master/spider.web"
print"#ifdef DEBUG">grammarfile
print"#define PRINT_CAT(A,B) case A: printf(B); break">grammarfile
print"print_cat(c) /* symbolic printout of a category */">grammarfile
print"eight_bits c;">grammarfile
print"{">grammarfile
print"  switch(c) {">grammarfile
for(t in categories){
printf"PRINT_CAT(SP_%s,\"%s\");\n",t,t>grammarfile
}
print"    case 0: printf(\"zero\"); break;">grammarfile
print"    default: printf(\"UNKNOWN\"); break;">grammarfile
print"  }">grammarfile
print"}">grammarfile
print"#endif DEBUG">grammarfile
print" ">grammarfile

##:119
##123:

#line 1943 "/u/nr/web/src/master/spider.web"

#line 1944 "/u/nr/web/src/master/spider.web"
print"Writing out grammar">logfile
print"@ Here is where we define |highestposoverall| and where we">grammarfile
print"check the productions.">grammarfile
print"@d highestposoverall =",highestposoverall>grammarfile
print"@<Test for all of the productions@>=">grammarfile
for(n=1;n<=prodnum;n++){
if(n%5==0)
print"@ @<Test for all of the productions@>="\
>grammarfile
##126:

#line 2007 "/u/nr/web/src/master/spider.web"

#line 2008 "/u/nr/web/src/master/spider.web"
this_string=inputline[n]
tempi=index(this_string,"|")
while(tempi!=0){
tempa=substr(this_string,1,tempi-1)
tempb=substr(this_string,tempi+1)
this_string=tempa"\\vert "tempb
tempi=index(this_string,"|")
}
templ="";tempr=this_string
tempi=index(tempr,"_")
while(tempi!=0){
tempa=substr(tempr,1,tempi-1)
tempr=substr(tempr,tempi+1)
templ=templ tempa"\\_"
tempi=index(tempr,"_")
}
this_string=templ tempr
templ="";tempr=this_string
tempi=index(tempr,"#")
while(tempi!=0){
tempa=substr(tempr,1,tempi-1)
tempr=substr(tempr,tempi+1)
templ=templ tempa"\\#"
tempi=index(tempr,"#")
}
this_string=templ tempr


##:126

#line 1953 "/u/nr/web/src/master/spider.web"

##127:

#line 2037 "/u/nr/web/src/master/spider.web"

#line 2038 "/u/nr/web/src/master/spider.web"
toolong=this_string;this_string=""
while(length(toolong)>60){
idx=59
idchar=substr(toolong,idx,1)
while(idx>1&&idchar!=" "){
idx--
idchar=substr(toolong,idx,1)
}
if(idx==1)
idx=59
temp=substr(toolong,1,idx-1)
toolong=substr(toolong,idx+1)
this_string=this_string temp"\n"
}
this_string=this_string toolong



##:127

#line 1954 "/u/nr/web/src/master/spider.web"

printf"if (%s) {\n\t/* %d: {\\tt %s} */\n%s",\
prodtest[n],n,this_string,prodtrans[n]>grammarfile
##124:

#line 1966 "/u/nr/web/src/master/spider.web"

#line 1967 "/u/nr/web/src/master/spider.web"
ttk=targetcategory[n]
if(ttk=="Unnamed category"){

printf"\treduce(pp+%d,%d,%s,%d,%d);\n",ppstart[n],\
tokensreduced[n],unnamed_cat[n],\
1-highestposoverall,n>grammarfile
}else{
appended[ttk]=1

reduction=highestpos[ttk]
if(reduction<highestunknownpos){
reduction=highestunknownpos
}
printf"\treduce(pp+%d,%d,SP_%s,%d,%d);\n",ppstart[n],\
tokensreduced[n],targetcategory[n],\
1-reduction,n>grammarfile
}

##:124

#line 1958 "/u/nr/web/src/master/spider.web"

print"\tgoto end_prods;">grammarfile
printf"} ">grammarfile
}
printf"\n">grammarfile
print"end_prods:">grammarfile

##:123
##130:

#line 2091 "/u/nr/web/src/master/spider.web"

#line 2092 "/u/nr/web/src/master/spider.web"
if(language!=""){
print"@ Here is the language-dependent stuff">tlang
if(version!="")
version=", Version "version
printf"@d banner = \"This is %s TANGLE%s %s\\n\"\n",language,\
version,date>tlang
printf"@<Global...@>=char C_file_extension[]=\"%s\";\n",extension \
>tlang

print"@ Here is the language-dependent stuff">wlang
if(version!="")
version=", Version "version
printf"@d banner = \"This is %s WEAVE%s %s\\n\"\n",language,\
version,date>wlang
print"@<Set |out_ptr| and do a |tex_printf| to read the macros@>="\
>wlang
printf"*out_ptr='x'; tex_printf(\"\\\\input %sweb.te\");\n",\
extension>wlang
printf"@ @<Global...@>=char C_file_extension[]=\"%s\";\n",extension \
>wlang
}else{
print"Error: you haven't given me any \"language\" information"
exitcode=-1
}

##:130
##134:

#line 2185 "/u/nr/web/src/master/spider.web"

#line 2186 "/u/nr/web/src/master/spider.web"
if(mod_def_cat!=""){
print"@ @<Call |app_scrap| for a module definition@>=">scrapfile
printf"app_scrap(SP_%s,no_math);\n",mod_def_cat>scrapfile
appended[mod_def_cat]=1
}else{
print"Error: I don't know what to do with a module definition"
print"       Give me a \"module definition ...\""
exitcode=-1
}
if(mod_use_cat!=""){
print"@ @<Call |app_scrap| for a module use@>=">scrapfile
printf"app_scrap(SP_%s,maybe_math);\n",mod_use_cat>scrapfile
appended[mod_use_cat]=1
}else{
print"Error: I don't know what to do with a module use"
print"       Give me a \"module use ...\""
exitcode=-1
}


##:134
##136:

#line 2226 "/u/nr/web/src/master/spider.web"

#line 2227 "/u/nr/web/src/master/spider.web"
tempfile=grammarfile
##137:

#line 2233 "/u/nr/web/src/master/spider.web"

#line 2234 "/u/nr/web/src/master/spider.web"
print"@ Here is the |at_sign| for the new web">tempfile
printf"@d at_sign = @`%s'\n",at_sign>tempfile
print" ">tempfile
print"@ Here is |the_at_sign| left for common">tempfile
print"@<Global...@>=char the_at_sign = at_sign;">tempfile
print" ">tempfile

##:137

#line 2228 "/u/nr/web/src/master/spider.web"

tempfile=ttokfile
##137:

#line 2233 "/u/nr/web/src/master/spider.web"

#line 2234 "/u/nr/web/src/master/spider.web"
print"@ Here is the |at_sign| for the new web">tempfile
printf"@d at_sign = @`%s'\n",at_sign>tempfile
print" ">tempfile
print"@ Here is |the_at_sign| left for common">tempfile
print"@<Global...@>=char the_at_sign = at_sign;">tempfile
print" ">tempfile

##:137

#line 2230 "/u/nr/web/src/master/spider.web"


##:136
##140:

#line 2300 "/u/nr/web/src/master/spider.web"

#line 2301 "/u/nr/web/src/master/spider.web"
print"@ Here we recognize the comment start seqence">ttokfile
print"@<See a comment starting at |loc| and skip it@>=">ttokfile
printf"{int len; len=strlen(%s);\n",begin_comment_string>ttokfile
printf"if (loc+len<=limit && !strncmp(loc,%s,len)) {\n",\
begin_comment_string>ttokfile
print"\tloc += len; /* a new thing */">ttokfile
print"\tskip_comment(); /* scan to end of comment or newline */">ttokfile
print"\tif (comment_continues || comments_end_with_newline)">ttokfile
print"\t\treturn('\\n');">ttokfile
print"\telse continue;\n}\n}">ttokfile


##:140
##141:

#line 2314 "/u/nr/web/src/master/spider.web"

#line 2315 "/u/nr/web/src/master/spider.web"
print"@ @<See a comment starting at |loc-1| and return |begin_comment|@>="\
>scrapfile
printf"{int len; len=strlen(%s);\n",begin_comment_string>scrapfile
printf"if (loc+len-1<=limit && !strncmp(loc-1,%s,len)) {\n",\
begin_comment_string>scrapfile
print"\tloc += len-1;">scrapfile
print"\t return (begin_comment); /* scan to end of comment or newline */">scrapfile
print"}\n}">scrapfile




##:141
##142:

#line 2328 "/u/nr/web/src/master/spider.web"

#line 2329 "/u/nr/web/src/master/spider.web"
print"@ Here we deal with recognizing the end of comments">ttokfile
printf"@d comments_end_with_newline = %d\n",comments_end_with_newline>ttokfile
print"@<Recognize comment end starting at |loc-1|@>=">ttokfile
if(comments_end_with_newline!=1){
printf"{int len; len=strlen(%s);\n",end_comment_string>ttokfile
printf"if (loc+len-1<=limit && !strncmp(loc-1,%s,len)) {\n",\
end_comment_string>ttokfile
print"loc += len-1; return(comment_continues=0); }}">ttokfile
}else{
print"/* This code will never be executed */ ">ttokfile
}

##:142
##143:

#line 2344 "/u/nr/web/src/master/spider.web"

#line 2345 "/u/nr/web/src/master/spider.web"
printf"@ Here we recognize end of comments">scrapfile
printf"@d comments_end_with_newline = %d\n",comments_end_with_newline>scrapfile
print"@<Check for end of comment@>=">scrapfile
printf"{int len; len=strlen(%s);\n",end_comment_string>scrapfile
printf"if (loc+len-1<=limit && !strncmp(loc-1,%s,len)) {\n",\
end_comment_string>scrapfile
print" loc++; if(bal==1) {if (phase==2) app_tok('}'); return(0);}">scrapfile
print"  else {">scrapfile
print"    err_print(\"! Braces don't balance in comment\");">scrapfile
print"@.Braces don't balance in comment@>">scrapfile
print"    @<Clear |bal| and |return|@>;">scrapfile
print"  }">scrapfile
print"}">scrapfile
print"}">scrapfile


##:143
##144:

#line 2363 "/u/nr/web/src/master/spider.web"

#line 2364 "/u/nr/web/src/master/spider.web"
print"@ Important tokens:">ttokfile
printf"@d begin_comment_string = %s\n",begin_comment_string>ttokfile
printf"@d end_comment_string = %s\n",end_comment_string>ttokfile

##:144
##149:

#line 2465 "/u/nr/web/src/master/spider.web"

#line 2466 "/u/nr/web/src/master/spider.web"
print"@ Important tokens:">ttokfile
printf"@d sharp_line_open = %s\n",sharp_line_open>ttokfile
printf"@d sharp_line_close = %s\n",sharp_line_close>ttokfile

##:149

#line 65 "/u/nr/web/src/master/spider.web"

print"Writing out lists">logfile
##21:

#line 302 "/u/nr/web/src/master/spider.web"

#line 303 "/u/nr/web/src/master/spider.web"
for(t in translation_keywords){
print t>translationfile
}

##:21
##73:

#line 1145 "/u/nr/web/src/master/spider.web"

#line 1146 "/u/nr/web/src/master/spider.web"
for(t in tokenname){
temp=tokenname[t]
if(substr(temp,1,1)!="'"){
##74:

#line 1154 "/u/nr/web/src/master/spider.web"

#line 1155 "/u/nr/web/src/master/spider.web"
tempa=substr(temp,1,3)
if(tempa=="SP_"){
temp=substr(temp,4)
}


##:74

#line 1149 "/u/nr/web/src/master/spider.web"

print temp>tokennamefile
}
}

##:73
##83:

#line 1326 "/u/nr/web/src/master/spider.web"

#line 1327 "/u/nr/web/src/master/spider.web"
for(i in ilk_translation){
print i>ilkfile
}

##:83
##113:

#line 1813 "/u/nr/web/src/master/spider.web"

#line 1814 "/u/nr/web/src/master/spider.web"
if(wrotecycles==0){
print"0: dummy --> nodummy">cycles
}

##:113
##120:

#line 1901 "/u/nr/web/src/master/spider.web"

#line 1902 "/u/nr/web/src/master/spider.web"
for(c in categories){
print c>categoryfile
}

##:120
##122:

#line 1925 "/u/nr/web/src/master/spider.web"

#line 1926 "/u/nr/web/src/master/spider.web"
for(n=1;n<=prodnum;n++){
printf"%2d: %s\n",n,inputline[n]>productions
}

##:122

#line 67 "/u/nr/web/src/master/spider.web"

##22:

#line 307 "/u/nr/web/src/master/spider.web"

#line 308 "/u/nr/web/src/master/spider.web"
for(t in translation_keywords){
num_of_translation_keywords++
}
printf"You used %d translation keywords.\n",\
num_of_translation_keywords>logfile
printf"You used %d translation keywords.\n",num_of_translation_keywords

##:22
##84:

#line 1331 "/u/nr/web/src/master/spider.web"

#line 1332 "/u/nr/web/src/master/spider.web"
for(i in ilk_translation)number_of_ilks++
for(i in reservedilk)number_of_reserved_words++
printf"You defined %d reserved words of %d ilks.\n",\
number_of_reserved_words,number_of_ilks
printf"You defined %d reserved words of %d ilks.\n",\
number_of_reserved_words,number_of_ilks>logfile

##:84
##121:

#line 1906 "/u/nr/web/src/master/spider.web"

#line 1907 "/u/nr/web/src/master/spider.web"
for(c in categories){
number_of_categories++
}
printf"You used %d different categories in %d productions.\n",\
number_of_categories,prodnum
printf"You used %d different categories in %d productions.\n",\
number_of_categories,prodnum>logfile
printf"The biggest production had %d scraps on its left-hand side.\n",\
highestposoverall
printf"The biggest production had %d scraps on its left-hand side.\n",\
highestposoverall>logfile


##:121

#line 68 "/u/nr/web/src/master/spider.web"

##47:

#line 730 "/u/nr/web/src/master/spider.web"

#line 731 "/u/nr/web/src/master/spider.web"
if(tokennumber<127){
print"Error: too many token names for WEAVE --- over by",\
127-tokennumber
exitcode=-1
}
##:47
##48:

#line 739 "/u/nr/web/src/master/spider.web"

#line 740 "/u/nr/web/src/master/spider.web"
if(highesttoken-tokennumber>31-(11-1)+3){\

print"Error: too many token names for TANGLE --- over by",\
highesttoken-tokennumber-(31-(11-1)+3)
exitcode=-1
}



##:48
##82:

#line 1314 "/u/nr/web/src/master/spider.web"

#line 1315 "/u/nr/web/src/master/spider.web"
for(i in ilk_translation){
if(has_reserved[i]!=1){
print"Error: there is no reserved word of ilk",i
exitcode=-1
}
if(has_translation[i]!=1){
print"Error: ilk",i,"has no translation"
exitcode=-1
}
}

##:82
##116:

#line 1854 "/u/nr/web/src/master/spider.web"

#line 1855 "/u/nr/web/src/master/spider.web"
for(c in categories){
if(reduced[c]!=1){
print"Warning: category",c,"never reduced"
}
}


##:116
##125:

#line 1988 "/u/nr/web/src/master/spider.web"

#line 1989 "/u/nr/web/src/master/spider.web"
for(c in categories){
if(appended[c]!=1){
if(c=="ignore_scrap"){
print"Warning: category",c,"never appended"
}else{
print"Error: category",c,"never appended"
exitcode=-1
}
}
}



##:125

#line 69 "/u/nr/web/src/master/spider.web"

if(exitcode!=0){
exit exitcode
}
}

##:3