Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/ffcalc/ffcx.syn @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agcl/ffcalc/ffcx.syn Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,64 @@ +{/* FOUR FUNCTION CALCULATOR: FFCALCX.SYN */} + +// -- CONFIGURATION SECTION ---------------------------- +[ + default token type = double + disregard white space + lexeme { real} + left { '+', '-'} + left { '*', '/'} + right {unary minus} +] + +// -- FOUR FUNCTION CALCULATOR ------------------------- +(void) calculator $ + -> [calculation?, '\n']..., eof + +(void) calculation + -> expression:x =printf("%g\n",x); + -> name:n, '=', expression:x ={ + printf("%c = %g\n",n+'A',value[n]=x);} + -> error + +expression + -> name:n = value[n]; + -> real + -> '(', expression:x, ')' = x; + -> expression:x, '+', expression:t = x+t; + -> expression:x, '-', expression:t = x-t; + -> expression:t, '*', expression:f = t*f; + -> expression:t, '/', expression:f = t/f; + -> unary minus, expression:f = -f; + +// -- LEXICAL UNITS ------------------------------------ +digit = '0-9' +eof = -1 +unary minus = '-' + +(void) white space + -> ' ' + '\t' + '\r' + '\f' + '\v' + -> "/*", ~eof?..., "*/" + +(int) name + -> 'a-z' + 'A-Z':c = c-'A'; + +real + -> integer part:i, '.', fraction part:f = i+f; + -> integer part, '.'? + -> '.', fraction part:f = f; + +integer part + -> digit:d = d-'0'; + -> integer part:x, digit:d = 10*x + d-'0'; + +fraction part + -> digit:d =(d-'0')/10.; + -> digit:d, fraction part:f =(d-'0' + f)/10.; + +{ /* -- EMBEDDED C ---------------------------------- */ + double value[64]; /* registers */ + int main(void) { + ffcalcx(); + return 0; + } +} /* -- END OF EMBEDDED C ----------------------------*/