Intel XENIX 286 Programmers Guide (86) - Tenox.tc
Intel XENIX 286 Programmers Guide (86) - Tenox.tc Intel XENIX 286 Programmers Guide (86) - Tenox.tc
XENIX Programming I* lexical analysis *I yylex(){ register c; {I* skip over blanks *I } while( ( c = getchar( )) = = ' ' ) if ( isupper(c) ){ yylval.ival = c-'A'; return( VREG ); } if ( islower(c) ){ yylval.ival = c -'a'; return( DREG ); } if( isdigit( c) II c = = '.' ){ I* gobble up digits, points, exponents *I char buf[BSZ + 1], * cp = buf; int dot = 0, exp = 0; for( ; (cp-buf) < BSZ ; + + cp,c = getchar() ){ *cp = c; if ( isdigit(c) ) continue; if(c =='.' ){ if( dot + + ll exp ) return( '.' ); I* above causes syntax error *I continue; } if (c = = 'e' ) { if ( exp + + ) return( ' e' ); I* above causes syntax error *I continue; } I* end of number *I break; } *cp = '\eO'; if( (cp-buf) > = BSZ ) printf( "constant too long: truncated\n"); else ungetc( c, stdin ); I* above pushes back last char read *I yylval.dval = atof { buf ); return{ CONST ); } return{ c); } yacc: Compiler-Compiler 10-37
yacc: Compiler-Compiler 10-38 INTERVAL hilo( a, b, c, d ) double a, b, c, d; { I* returns the smallest interval containing a, b, c, and d *I I* used by *, I routines *I INTERVAL v; if( a>b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if( c>d ) { if ( c>v.hi ) v.hi = c; if ( d v.hi ) v.hi = d; if ( c = 0. && v.lo < = 0. ){ printf( "divisor interval contains 0.\n" ); return( 1); } return(O); } INTERVAL vdiv( a, b, v) double a, b; INTERVAL v; { return( hilo( alv.hi, alv.lo, blv.hi, blv.lo) ); } XENIX Programming
- Page 188 and 189: XENIX Programming lex: Lexical Anal
- Page 190 and 191: XENIX Programming lex: Lexical Anal
- Page 192 and 193: XENIX Programm ing lex: Lexical Ana
- Page 194 and 195: XENIX Programming Specifying Source
- Page 196 and 197: XENIX Programming lex: Lexical Anal
- Page 198 and 199: XENIX Programming lex: Lexical Anal
- Page 200 and 201: XENIX Programming The definitions s
- Page 202 and 203: CHAPTER 10 yacc: COMPILER-COMPILER
- Page 204 and 205: XENIX Programming yacc: Compiler-Co
- Page 206 and 207: XENIX Programming yacc: Compiler-Co
- Page 208 and 209: XENIX Programming yacc: Compiler-Co
- Page 210 and 211: XENIX Programming yacc: Compiler-Co
- Page 212 and 213: XENIX Programming yacc: Compiler-Co
- Page 214 and 215: XENIX Programming yacc: Compiler-Co
- Page 216 and 217: XENIX Programming yacc: Compiler-Co
- Page 218 and 219: XENIX Programming yacc: Compiler-Co
- Page 220 and 221: XENIX Programming yacc: Compiler-Co
- Page 222 and 223: XENIX Programming yacc: Compiler-Co
- Page 224 and 225: XENIX Programming yacc: Compiler-Co
- Page 226 and 227: XENIX Programming yacc: Compiler-Co
- Page 228 and 229: XENIX Programming yacc: Compiler-Co
- Page 230 and 231: XENIX Programming yacc: Compiler-Co
- Page 232 and 233: XENIX Programming yacc: Compiler-Co
- Page 234 and 235: XENIX Programming yacc: Compiler-Co
- Page 236 and 237: XENIX Programming %left %left %left
- Page 240: XENIX Programming yacc: Compiler-Co
- Page 243 and 244: m4: Macro Processor XENIX Programmi
- Page 245 and 246: m4: Macro Processor XENIX Programmi
- Page 247 and 248: m4: Macro Processor XENIX Programm
- Page 249 and 250: m4: Macro Processor XENIX Programmi
- Page 251 and 252: m4: Macro Processor XENIX Programmi
- Page 253 and 254: C Language Portability XENIX Progra
- Page 255 and 256: C Language Portability XENIX Progra
- Page 257 and 258: C Language Portability XENIX Progra
- Page 259 and 260: C Language Portability XENIX Progra
- Page 261 and 262: C Language Portability XENIX Progra
- Page 263 and 264: C Language Portability XENIX Progra
- Page 266 and 267: APPENDIX B PROG RAMMING COMMANDS Th
- Page 268 and 269: XENIX Programming ad b (continued)
- Page 270 and 271: XENIX Programming Programming Comma
- Page 272 and 273: XENIX Programming Programming Comma
- Page 274 and 275: XENIX Programming Programming Comma
- Page 276 and 277: XENIX Programming Programming Comma
- Page 278 and 279: XENIX Programming Programming Comma
- Page 280 and 281: XENIX Programming Programming Comma
- Page 282 and 283: XENIX Programming Programming Comma
- Page 284 and 285: XENIX Programming as (continued) Fi
- Page 286 and 287: XENIX Programming Programming Comma
<strong>XENIX</strong> Programming<br />
I* lexical analysis *I<br />
yylex(){<br />
register c;<br />
{I* skip over blanks *I }<br />
while( ( c = ge<strong>tc</strong>har( )) = = ' ' )<br />
if ( isupper(c) ){<br />
yylval.ival = c-'A';<br />
return( VREG );<br />
}<br />
if ( islower(c) ){<br />
yylval.ival = c -'a';<br />
return( DREG );<br />
}<br />
if( isdigit( c) II c = = '.' ){<br />
I* gobble up digits, points, exponents *I<br />
char buf[BSZ + 1], * cp = buf;<br />
int dot = 0, exp = 0;<br />
for( ; (cp-buf) < BSZ ; + + cp,c = ge<strong>tc</strong>har() ){<br />
*cp = c;<br />
if ( isdigit(c) ) continue;<br />
if(c =='.' ){<br />
if( dot + + ll exp ) return( '.' );<br />
I* above causes syntax error *I<br />
continue;<br />
}<br />
if (c = = 'e' ) {<br />
if ( exp + + ) return( ' e' );<br />
I* above causes syntax error *I<br />
continue;<br />
}<br />
I* end of number *I<br />
break;<br />
}<br />
*cp = '\eO';<br />
if( (cp-buf) > = BSZ )<br />
printf( "constant too long: truncated\n");<br />
else unge<strong>tc</strong>( c, stdin );<br />
I* above pushes back last char read *I<br />
yylval.dval = atof { buf );<br />
return{ CONST );<br />
}<br />
return{ c);<br />
}<br />
yacc: Compiler-Compiler<br />
10-37