RATFOR
ratfor - ratfor preprocessor synopsis: ratfor [-l n] [-o output] input Ratfor has the following syntax: prog: stat prog stat stat: if (...) stat if (...) stat else stat while (...) stat repeat stat repeat stat until (...) for (...;...;...) stat do ... stat switch (intexpr) { case val[,val]: stmt ... default: stmt } break n next n return (...) digits stat { prog } or [ prog ] or $( prog $) anything unrecognizable where stat is any Fortran or Ratfor statement, and intexpr is an expression that resolves into an integer value. A statement is terminated by an end-of-line or a semicolon. The following translations are also performed. < .lt. <= .le. == .eq. != .ne. ^= .ne. ~= .ne. >= .ge. > .gt. | .or. & .and. ! .not. ^ .not. ~ .not. Integer constants in bases other that decimal may be specified as n%dddd... where n is a decimal number indicating the base and dddd... are digits in that base. For bases > 10, letters are used for digits above 9. Examples: 8%77, 16%2ff, 2%0010011. The number is converted the equivalent decimal value using multiplication; this may cause sign problems if the number has too many digits. String literals ("..." or '...') can be continued across line boundaries by ending the line to be continued with an underline. The underline is not included as part of the literal. Leading blanks and tabs on the next line are ignored; this facilitates consistent indentation. include file will include the named file in the input. define (name,value) or define name value defines name as a symbolic parameter with the indicated value. Names of symbolic parameters may contain letters, digits, periods, and underline character but must begin with a letter (e.g. B.FLAG). Upper case is not equivalent to lower case in parameter names. string name "character string" or string name(size) "character string" defines name to be an integer array long enough to accomodate the ascii codes for the given character string, one per word. The last word of name is initialized to the symbolic parameter EOS, and indicates the end of string. ---------------------------------------------------------------------- This has been added: switch(getjunk()) { case 2: if (somecond) "COND true" else "COND false" case 3: "CASE 3 handled here.." case 4: "CASE 4 handled here.." case 5: "CASE 5 handled here.." default: "DEFAULT actions.." } This generates: I23000=(getjunk()) goto 23000 23002 continue if(.not.(somecond))goto 23003 "COND true" goto 23004 23003 continue "COND false" 23004 continue goto 23001 23005 continue "CASE 3 handled here.." goto 23001 23006 continue "CASE 4 handled here.." goto 23001 23007 continue "CASE 5 handled here.." goto 23001 23008 continue "DEFAULT actions.." goto 23001 23000 continue I23000=I23000-1 if (I23000.lt.1.or.I23000.gt.4)goto 23008 goto (23002,23005,23006,23007),I23000 23001 continue Note that, unlike C, ratfor case statements BREAK automatically.
Back to Fortran