home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / 1_1_contri / usd / 06_bc / bc
Encoding:
Text File  |  1986-05-23  |  28.7 KB  |  1,139 lines

  1. .\"    @(#)bc    6.1 (Berkeley) 5/23/86
  2. .\"
  3. .EH 'USD:6-%''BC \- An Arbitrary Precision Desk-Calculator Language'
  4. .OH 'BC \- An Arbitrary Precision Desk-Calculator Language''USD:6-%'
  5. .\".RP
  6. .TL
  7. BC \- An Arbitrary Precision Desk-Calculator Language
  8. .AU
  9. Lorinda Cherry
  10. .AU
  11. Robert Morris
  12. .AI
  13. .MH
  14. .AB
  15. BC is a language and a compiler for doing arbitrary precision arithmetic
  16. on the PDP-11 under the
  17. .UX
  18. time-sharing
  19. system.  The output of the compiler is interpreted and executed by
  20. a collection of routines which can input, output, and do
  21. arithmetic on indefinitely large integers and on scaled fixed-point
  22. numbers.
  23. .PP
  24. These routines are themselves based on a dynamic storage allocator.
  25. Overflow does not occur until all available core storage
  26. is exhausted.
  27. .PP
  28. The language has a complete control structure as well as immediate-mode
  29. operation.  Functions can be defined and saved for later execution.
  30. .PP
  31. Two five hundred-digit numbers can be multiplied to give a
  32. thousand digit result in about ten seconds.
  33. .PP
  34. A small collection of library functions is also available,
  35. including sin, cos, arctan, log, exponential, and Bessel functions of
  36. integer order.
  37. .PP
  38. Some of the uses of this compiler are
  39. .IP \-
  40. to do computation with large integers,
  41. .IP \-
  42. to do computation accurate to many decimal places,
  43. .IP \-
  44. conversion of numbers from one base to another base.
  45. .AE
  46. .PP
  47. .SH
  48. Introduction
  49. .PP
  50. BC is a language and a compiler for doing arbitrary precision
  51. arithmetic on the
  52. .UX
  53. time-sharing system [1].
  54. The compiler was written to make conveniently available a
  55. collection of routines (called DC [5]) which are capable of doing
  56. arithmetic on integers of arbitrary size.  The compiler
  57. is by no means intended to provide a complete programming
  58. language.
  59. It is a minimal language facility.
  60. .PP
  61. There is a scaling provision that permits the
  62. use of decimal point notation.
  63. Provision is made for input and output in bases other than
  64. decimal.  Numbers can be converted from decimal to octal by
  65. simply setting the output base to equal 8.
  66. .PP
  67. The actual limit on the number of digits that can
  68. be handled depends on the amount of storage available on the machine.
  69. Manipulation of numbers with many hundreds of digits
  70. is possible even on the smallest versions of
  71. .UX .
  72. .PP
  73. The syntax of BC has been deliberately selected to agree
  74. substantially with the C language [2].  Those who
  75. are familiar with C will find few surprises in this language.
  76. .SH
  77. Simple Computations with Integers
  78. .PP
  79. The simplest kind of statement is an arithmetic expression
  80. on a line by itself.
  81. For instance, if you type in the line:
  82. .DS
  83. .ft B
  84. 142857 + 285714
  85. .ft P
  86. .DE
  87. the program responds immediately with the line
  88. .DS
  89. .ft B
  90. 428571
  91. .ft P
  92. .DE
  93. The operators \-, *, /, %, and ^ can also be used; they
  94. indicate subtraction, multiplication, division, remaindering, and
  95. exponentiation, respectively.  Division of integers produces an
  96. integer result truncated toward zero.
  97. Division by zero produces an error
  98. comment.
  99. .PP
  100. Any term in an expression may be prefixed by a minus sign to
  101. indicate that it is to be negated (the `unary' minus sign).
  102. The expression
  103. .DS
  104. .ft B
  105. 7+\-3
  106. .ft P
  107. .DE
  108. is interpreted to mean that \-3 is to be added to 7.
  109. .PP
  110. More complex expressions with several operators and with
  111. parentheses are interpreted just as in
  112. Fortran, with ^ having the greatest binding
  113. power, then * and % and /, and finally + and \-.
  114. Contents of parentheses are evaluated before material
  115. outside the parentheses.
  116. Exponentiations are
  117. performed from right to left and the other operators
  118. from left to right.
  119. The two expressions
  120. .DS
  121. .ft B
  122. a^b^c  and  a^(b^c)
  123. .ft P
  124. .DE
  125. are equivalent, as are the two expressions
  126. .DS
  127. .ft B
  128. a*b*c  and  (a*b)*c
  129. .ft P
  130. .DE
  131. BC shares with Fortran and C the undesirable convention that
  132. .DS
  133. \fBa/b*c\fP  is equivalent to  \fB(a/b)*c\fP
  134. .ft P
  135. .DE
  136. .PP
  137. Internal storage registers to hold numbers have single lower-case
  138. letter names.  The value of an expression can be assigned to
  139. a register in the usual way.  The statement
  140. .DS
  141. .ft B
  142. x = x + 3
  143. .ft P
  144. .DE
  145. has the effect of increasing by three the value of the contents of the
  146. register named x.
  147. When, as in this case, the outermost operator is an =, the
  148. assignment is performed but the result is not printed.
  149. Only 26 of these named storage registers are available.
  150. .PP
  151. There is a built-in square root function whose
  152. result is truncated to an integer (but see scaling below).
  153. The lines
  154. .DS
  155. .ft B
  156. x = sqrt(191)
  157. x
  158. .ft P
  159. .DE
  160. produce the printed result
  161. .DS
  162. .ft B
  163. 13
  164. .ft P
  165. .DE
  166. .SH
  167. Bases
  168. .PP
  169. There are special internal quantities, called `ibase' and `obase'.
  170. The contents of `ibase', initially set to 10,
  171. determines the base used for interpreting numbers read in.
  172. For example, the lines
  173. .DS
  174. .ft B
  175. ibase = 8
  176. 11
  177. .ft P
  178. .DE
  179. will produce the output line
  180. .DS
  181. .ft B
  182. 9
  183. .ft P
  184. .DE
  185. and you are all set up to do octal to decimal conversions.
  186. Beware, however of trying to change the input base back
  187. to decimal by typing
  188. .DS
  189. .ft B
  190. ibase = 10
  191. .ft P
  192. .DE
  193. Because the number 10 is interpreted as octal, this statement will
  194. have no effect.
  195. For those who deal in hexadecimal notation,
  196. the characters A\-F are permitted in numbers
  197. (no matter what base is in effect)
  198. and are
  199. interpreted as digits having values 10\-15 respectively.
  200. The statement
  201. .DS
  202. .ft B
  203. ibase = A
  204. .ft P
  205. .DE
  206. will change you back to decimal input base no matter what the
  207. current input base is.
  208. Negative and large positive input bases are
  209. permitted but useless.
  210. No mechanism has been provided for the input of arbitrary
  211. numbers in bases less than 1 and greater than 16.
  212. .PP
  213. The contents of `obase', initially set to 10, are used as the base for output
  214. numbers.  The lines
  215. .DS
  216. .ft B
  217. obase = 16
  218. 1000
  219. .ft P
  220. .DE
  221. will produce the output line
  222. .DS
  223. .ft B
  224. 3E8
  225. .ft P
  226. .DE
  227. which is to be interpreted as a 3-digit hexadecimal number.
  228. Very large output bases are permitted, and they are sometimes useful.
  229. For example, large numbers can be output in groups of five digits
  230. by setting `obase' to 100000.
  231. Strange (i.e. 1, 0, or negative) output bases are
  232. handled appropriately.
  233. .PP
  234. Very large numbers are split across lines with 70 characters per line.
  235. Lines which are continued end with \\.
  236. Decimal output conversion is practically instantaneous, but output
  237. of very large numbers (i.e., more than 100 digits) with other bases
  238. is rather slow.
  239. Non-decimal output conversion of
  240. a one hundred digit number takes about
  241. three seconds.
  242. .PP
  243. It is best to remember that `ibase' and `obase' have no effect
  244. whatever on the course of internal computation or
  245. on the evaluation of expressions, but only affect input and
  246. output conversion, respectively.
  247. .SH
  248. Scaling
  249. .PP
  250. A third special internal quantity called `scale' is
  251. used to determine the scale of calculated
  252. quantities.
  253. Numbers may have
  254. up to 99 decimal digits after the decimal point.
  255. This fractional part is retained in further computations.
  256. We refer to the number of digits after the decimal point of
  257. a number as its scale.
  258. .PP
  259. When two scaled numbers are combined by
  260. means of one of the arithmetic operations, the result
  261. has a scale determined by the following rules.  For
  262. addition and subtraction, the scale of the result is the larger
  263. of the scales of the two operands.  In this case,
  264. there is never any truncation of the result.
  265. For multiplications, the scale of the result is never
  266. less than the maximum of the two scales of the operands,
  267. never more than the sum of the scales of the operands
  268. and, subject to those two restrictions,
  269. the scale of the result is set equal to the contents of the internal
  270. quantity `scale'.
  271. The scale of a quotient is the contents of the internal
  272. quantity `scale'.  The scale of a remainder is
  273. the sum of the scales of the quotient and the divisor.
  274. The result of an exponentiation is scaled as if
  275. the implied multiplications were performed.
  276. An exponent must be an integer.
  277. The scale of a square root is set to the maximum of the scale
  278. of the argument and the contents of `scale'.
  279. .PP
  280. All of the internal operations are actually carried out in terms
  281. of integers, with digits being discarded when necessary.
  282. In every case where digits are discarded, truncation and
  283. not rounding is performed.
  284. .PP
  285. The contents of
  286. `scale' must be no greater than
  287. 99 and no less than 0.  It is initially set to 0.
  288. In case you need more than 99 fraction digits, you may arrange
  289. your own scaling.
  290. .PP
  291. The internal quantities `scale', `ibase', and `obase' can be
  292. used in expressions just like other variables.
  293. The line
  294. .DS
  295. .ft B
  296. scale = scale + 1
  297. .ft P
  298. .DE
  299. increases the value of `scale' by one, and the line
  300. .DS
  301. .ft B
  302. scale
  303. .ft P
  304. .DE
  305. causes the current value of `scale' to be printed.
  306. .PP
  307. The value of `scale' retains its meaning as a
  308. number of decimal digits to be retained in internal
  309. computation even when `ibase' or `obase' are not equal to 10.
  310. The internal computations (which are still conducted in decimal,
  311. regardless of the bases) are performed to the specified number
  312. of decimal digits, never hexadecimal or octal or any
  313. other kind of digits.
  314. .SH
  315. Functions
  316. .PP
  317. The name of a function is a single lower-case letter.
  318. Function names are permitted to collide with simple
  319. variable names.
  320. Twenty-six different defined functions are permitted
  321. in addition to the twenty-six variable names.
  322. The line
  323. .DS
  324. .ft B
  325.     define a(x){
  326. .ft P
  327. .DE
  328. begins the definition of a function with one argument.
  329. This line must be followed by one or more statements,
  330. which make up the body of the function, ending
  331. with a right brace }.
  332. Return of control from a function occurs when a return
  333. statement is executed or when the end of the function is reached.
  334. The return statement can take either
  335. of the two forms
  336. .DS
  337. .ft B
  338. return
  339. return(x)
  340. .ft P
  341. .DE
  342. In the first case, the value of the function is 0, and in
  343. the second, the value of the expression in parentheses.
  344. .PP
  345. Variables used in the function can be declared as automatic
  346. by a statement of the form
  347. .DS
  348. .ft B
  349. auto x,y,z
  350. .ft P
  351. .DE
  352. There can be only one `auto' statement in a function and it must
  353. be the first statement in the definition.
  354. These automatic variables are allocated space and initialized
  355. to zero on entry to the function and thrown away on return.  The
  356. values of any variables with the same names outside the function
  357. are not disturbed.
  358. Functions may be called recursively and the automatic variables
  359. at each level of call are protected.
  360. The parameters named in a function definition are treated in
  361. the same way as the automatic variables of that function
  362. with the single exception that they are given a value
  363. on entry to the function.
  364. An example of a function definition is
  365. .DS
  366. .ft B
  367.     define a(x,y){
  368.         auto z
  369.         z = x*y
  370.         return(z)
  371.     }
  372. .ft P
  373. .DE
  374. The value of this function, when called, will be the
  375. product of its
  376. two arguments.
  377. .PP
  378. A function is called by the appearance of its name
  379. followed by a string of arguments enclosed in
  380. parentheses and separated by commas.
  381. The result
  382. is unpredictable if the wrong number of arguments is used.
  383. .PP
  384. Functions with no arguments are defined and called using
  385. parentheses with nothing between them: b().
  386. .PP
  387. If the function
  388. .ft I
  389. a
  390. .ft
  391. above has been defined, then the line
  392. .DS
  393. .ft B
  394. a(7,3.14)
  395. .ft P
  396. .DE
  397. would cause the result 21.98 to be printed and the line
  398. .DS
  399. .ft B
  400. x = a(a(3,4),5)
  401. .ft P
  402. .DE
  403. would cause the value of x to become 60.
  404. .SH
  405. Subscripted Variables
  406. .PP
  407. A single lower-case letter variable name
  408. followed by an expression in brackets is called a subscripted
  409. variable (an array element).
  410. The variable name is called the array name and the expression
  411. in brackets is called the subscript.
  412. Only one-dimensional arrays are
  413. permitted.  The names of arrays are permitted to
  414. collide with the names of simple variables and function names.
  415. Any fractional
  416. part of a subscript is discarded before use.
  417. Subscripts must be greater than or equal to zero and 
  418. less than or equal to 2047.
  419. .PP
  420. Subscripted variables may be freely used in expressions, in
  421. function calls, and in return statements.
  422. .PP
  423. An array name may be used as an argument to a function,
  424. or may be declared as automatic in
  425. a function definition by the use of empty brackets:
  426. .DS
  427. .ft B
  428. f(a[\|])
  429. define f(a[\|])
  430. auto a[\|]
  431. .ft P
  432. .DE
  433. When an array name is so used, the whole contents of the array
  434. are copied for the use of the function, and thrown away on exit
  435. from the function.
  436. Array names which refer to whole arrays cannot be used
  437. in any other contexts.
  438. .SH
  439. Control Statements
  440. .PP
  441. The `if', the `while', and the `for' statements
  442. may be used to alter the flow within programs or to cause iteration.
  443. The range of each of them is a statement or
  444. a compound statement consisting of a collection of
  445. statements enclosed in braces.
  446. They are written in the following way
  447. .DS
  448. .ft B
  449. if(relation) statement
  450. while(relation) statement
  451. for(expression1; relation; expression2) statement
  452. .ft P
  453. .DE
  454. or
  455. .DS
  456. .ft B
  457. if(relation) {statements}
  458. while(relation) {statements}
  459. for(expression1; relation; expression2) {statements}
  460. .ft P
  461. .DE
  462. .PP
  463. A relation in one of the control statements is an expression of the form
  464. .DS
  465. .ft B
  466. x>y
  467. .ft P
  468. .DE
  469. where  two expressions are related by one of the six relational
  470. operators \fS <, >, <=, >=, ==, or !=.\fP
  471. The relation \fS==\fP
  472. stands for `equal to' and \fS!=\fP stands for `not equal to'.
  473. The meaning of the remaining relational operators is
  474. clear.
  475. .PP
  476. BEWARE of using \fS=\fP instead of \fS==\fP in a relational.  Unfortunately,
  477. both of them are legal, so you will not get a diagnostic
  478. message, but \fS=\fP really will not do a comparison.
  479. .PP
  480. The `if' statement causes execution of its range
  481. if and only if the relation is true.
  482. Then control passes to the next statement in sequence.
  483. .PP
  484. The `while' statement causes execution of its range
  485. repeatedly as long as the relation
  486. is true.  The relation is tested before each execution
  487. of its range and if the relation
  488. is false, control passes to the next statement beyond the range
  489. of the while.
  490. .PP
  491. The `for' statement begins
  492. by executing `expression1'.  Then the relation is tested
  493. and, if true, the statements in the range of the `for' are executed.
  494. Then `expression2' is executed.  The relation is tested, and so on.
  495. The typical use of the `for' statement is for a controlled iteration,
  496. as in the statement
  497. .DS
  498. .ft B
  499. for(i=1; i<=10; i=i+1) i
  500. .ft P
  501. .DE
  502. which will print the integers from 1 to 10.
  503. Here are some examples of the use of the control statements.
  504. .DS
  505. .ft B
  506. define f(n){
  507. auto i, x
  508. x=1
  509. for(i=1; i<=n; i=i+1) x=x*i
  510. return(x)
  511. }
  512. .ft P
  513. .DE
  514. The line
  515. .DS
  516. .ft B
  517.     f(a)
  518. .ft P
  519. .DE
  520. will print
  521. .ft I
  522. a
  523. .ft
  524. factorial if
  525. .ft I
  526. a
  527. .ft
  528. is a positive integer.
  529. Here is the definition of a function which will
  530. compute values of the binomial coefficient
  531. (m and n are assumed to be positive integers).
  532. .DS
  533. .ft B
  534. define b(n,m){
  535. auto x, j
  536. x=1
  537. for(j=1; j<=m; j=j+1) x=x*(n\-j+1)/j
  538. return(x)
  539. }
  540. .ft P
  541. .DE
  542. The following function computes values of the exponential function
  543. by summing the appropriate series
  544. without regard for possible truncation errors:
  545. .DS
  546. .ft B
  547. scale = 20
  548. define e(x){
  549.     auto a, b, c, d, n
  550.     a = 1
  551.     b = 1
  552.     c = 1
  553.     d = 0
  554.     n = 1
  555.     while(1==1){
  556.         a = a*x
  557.         b = b*n
  558.         c = c + a/b
  559.         n = n + 1
  560.         if(c==d) return(c)
  561.         d = c
  562.     }
  563. }
  564. .ft P
  565. .DE
  566. .SH
  567. Some Details
  568. .PP
  569. There are some language features that every user should know
  570. about even if he will not use them.
  571. .PP
  572. Normally statements are typed one to a line.  It is also permissible
  573. to type several statements on a line separated by semicolons.
  574. .PP
  575. If an assignment statement is parenthesized, it then has
  576. a value and it can be used anywhere that an expression can.
  577. For example, the line
  578. .DS
  579. .ft B
  580. (x=y+17)
  581. .ft P
  582. .DE
  583. not only makes the indicated assignment, but also prints the
  584. resulting value.
  585. .PP
  586. Here is an example of a use of the value of an
  587. assignment statement even when it is not parenthesized.
  588. .DS
  589. .ft B
  590. x = a[i=i+1]
  591. .ft P
  592. .DE
  593. causes a value to be assigned to x and also increments i
  594. before it is used as a subscript.
  595. .PP
  596. The following constructs work in BC in exactly the same manner
  597. as they do in the C language.  Consult the appendix or the
  598. C manuals [2] for their exact workings.
  599. .DS
  600. .ft B
  601. .ta 2i
  602. x=y=z  is the same as    x=(y=z)
  603. x =+ y    x = x+y
  604. x =\- y    x = x\-y
  605. x =* y    x = x*y
  606. x =/ y    x = x/y
  607. x =% y    x = x%y
  608. x =^ y    x = x^y
  609. x++    (x=x+1)\-1
  610. x\-\-    (x=x\-1)+1
  611. ++x    x = x+1
  612. \-\-x    x = x\-1
  613. .ft P
  614. .DE
  615. Even if you don't intend to use the constructs,
  616. if you type one inadvertently, something correct but unexpected
  617. may happen.
  618. .PP
  619. WARNING!  In some of these constructions, spaces are
  620. significant.
  621. There is a real difference between
  622. .ft B
  623. x =\-  y and x= \-y.
  624. .ft P
  625. The first replaces x by x\-y and the second by \-y.
  626. .SH
  627. Three Important Things
  628. .PP
  629. 1.  To exit a BC program, type `quit'.
  630. .PP
  631. 2. There is a comment convention identical to that of C and
  632. of PL/I.  Comments begin with `/*' and end with `*/'.
  633. .PP
  634. 3. There is a library of math functions which may be obtained by
  635. typing at command level
  636. .DS
  637. .ft B
  638. bc \-l
  639. .ft P
  640. .DE
  641. This command will load a set of library functions
  642. which, at the time of writing, consists of sine (named `s'),
  643. cosine (`c'), arctangent (`a'), natural logarithm (`l'),
  644. exponential (`e') and Bessel functions of integer order (`j(n,x)').  Doubtless more functions will be added
  645. in time.
  646. The library sets the scale to 20.  You can reset it to something
  647. else if you like.
  648. The design of these mathematical library routines
  649. is discussed elsewhere [3].
  650. .PP
  651. If you type
  652. .DS
  653. .ft B
  654. bc file ...
  655. .ft P
  656. .DE
  657. BC will read and execute the named file or files before accepting
  658. commands from the keyboard.  In this way, you may load your
  659. favorite programs and function definitions.
  660. .SH
  661. Acknowledgement
  662. .PP
  663. The compiler is written in YACC [4]; its original
  664. version  was written by S. C. Johnson.
  665. .SH
  666. References
  667. .IP [1]
  668. K. Thompson and D. M. Ritchie,
  669. .ft I
  670. UNIX Programmer's Manual,
  671. .ft
  672. Bell Laboratories,
  673. 1978.
  674. .IP [2]
  675. B. W. Kernighan and
  676. D. M. Ritchie,
  677. .ft I
  678. The C Programming Language,
  679. .ft
  680. Prentice-Hall, 1978.
  681. .IP [3]
  682. R. Morris,
  683. .ft I
  684. A Library of Reference Standard Mathematical Subroutines,
  685. .ft
  686. Bell Laboratories internal memorandum, 1975.
  687. .IP [4]
  688. S. C. Johnson,
  689. .ft I
  690. YACC \(em Yet Another Compiler-Compiler.
  691. .ft
  692. Bell Laboratories Computing Science Technical Report #32, 1978.
  693. .IP [5]
  694. R. Morris and L. L. Cherry,
  695. .ft I
  696. DC \- An Interactive Desk Calculator.
  697. .ft
  698. .LP
  699. .bp
  700. .ft B
  701. .DS C
  702. Appendix
  703. .DE
  704. .ft
  705. .NH
  706. Notation
  707. .PP
  708. In the following pages syntactic categories are in \fIitalics\fP;
  709. literals are in \fBbold\fP; material in brackets [\|] is optional.
  710. .NH
  711. Tokens
  712. .PP
  713. Tokens consist of keywords, identifiers, constants, operators,
  714. and separators.
  715. Token separators may be blanks, tabs or comments.
  716. Newline characters or semicolons separate statements.
  717. .NH 2
  718. Comments
  719. .PP
  720. Comments are introduced by the characters /* and terminated by
  721. */.
  722. .NH 2
  723. Identifiers
  724. .PP
  725. There are three kinds of identifiers \- ordinary identifiers, array identifiers
  726. and function identifiers.
  727. All three types consist of single lower-case letters.
  728. Array identifiers are followed by square brackets, possibly
  729. enclosing an expression describing a subscript.
  730. Arrays are singly dimensioned and may contain up to 2048
  731. elements.
  732. Indexing begins at zero so an array may be indexed from 0 to 2047.
  733. Subscripts are truncated to integers.
  734. Function identifiers are followed by parentheses, possibly enclosing arguments.
  735. The three types of identifiers do not conflict;
  736. a program can have a variable named \fBx\fP,
  737. an array named \fBx\fP and a function named \fBx\fP, all of which are separate and
  738. distinct.
  739. .NH 2
  740. Keywords
  741. .PP
  742. The following are reserved keywords:
  743. .ft B
  744. .ta .5i 1.0i
  745. .nf
  746.     ibase    if
  747.     obase    break
  748.     scale    define
  749.     sqrt    auto
  750.     length    return
  751.     while    quit
  752.     for
  753. .fi
  754. .ft
  755. .NH 2
  756. Constants
  757. .PP
  758. Constants consist of arbitrarily long numbers
  759. with an optional decimal point.
  760. The hexadecimal digits \fBA\fP\-\fBF\fP are also recognized as digits with
  761. values 10\-15, respectively.
  762. .NH 1
  763. Expressions
  764. .PP
  765. The value of an expression is printed unless the main
  766. operator is an assignment.
  767. Precedence is the same as the order
  768. of presentation here, with highest appearing first.
  769. Left or right associativity, where applicable, is
  770. discussed with each operator.
  771. .bp
  772. .NH 2
  773. Primitive expressions
  774. .NH 3
  775. Named expressions
  776. .PP
  777. Named expressions are
  778. places where values are stored.
  779. Simply stated,
  780. named expressions are legal on the left
  781. side of an assignment.
  782. The value of a named expression is the value stored in the place named.
  783. .NH 4
  784. \fIidentifiers\fR
  785. .PP
  786. Simple identifiers are named expressions.
  787. They have an initial value of zero.
  788. .NH 4
  789. \fIarray-name\fP\|[\|\fIexpression\fP\|]
  790. .PP
  791. Array elements are named expressions.
  792. They have an initial value of zero.
  793. .NH 4
  794. \fBscale\fR, \fBibase\fR and \fBobase\fR
  795. .PP
  796. The internal registers
  797. \fBscale\fP, \fBibase\fP and \fBobase\fP are all named expressions.
  798. \fBscale\fP is the number of digits after the decimal point to be
  799. retained in arithmetic operations.
  800. \fBscale\fR has an initial value of zero.
  801. \fBibase\fP and \fBobase\fP are the input and output number
  802. radix respectively.
  803. Both \fBibase\fR and \fBobase\fR have initial values of 10.
  804. .NH 3
  805. Function calls
  806. .NH 4
  807. \fIfunction-name\fB\|(\fR[\fIexpression\fR\|[\fB,\|\fIexpression\|\fR.\|.\|.\|]\|]\fB)
  808. .PP
  809. A function call consists of a function name followed by parentheses
  810. containing a comma-separated list of
  811. expressions, which are the function arguments.
  812. A whole array passed as an argument is specified by the
  813. array name followed by empty square brackets.
  814. All function arguments are passed by
  815. value.
  816. As a result, changes made to the formal parameters have
  817. no effect on the actual arguments.
  818. If the function terminates by executing a return
  819. statement, the value of the function is
  820. the value of the expression in the parentheses of the return
  821. statement or is zero if no expression is provided
  822. or if there is no return statement.
  823. .NH 4
  824. sqrt\|(\|\fIexpression\fP\|)
  825. .PP
  826. The result is the square root of the expression.
  827. The result is truncated in the least significant decimal place.
  828. The scale of the result is
  829. the scale of the expression or the
  830. value of
  831. .ft B
  832. scale,
  833. .ft
  834. whichever is larger.
  835. .NH 4
  836. length\|(\|\fIexpression\fP\|)
  837. .PP
  838. The result is the total number of significant decimal digits in the expression.
  839. The scale of the result is zero.
  840. .NH 4
  841. scale\|(\|\fIexpression\fP\|)
  842. .PP
  843. The result is the scale of the expression.
  844. The scale of the result is zero.
  845. .NH 3
  846. Constants
  847. .PP
  848. Constants are primitive expressions.
  849. .NH 3
  850. Parentheses
  851. .PP
  852. An expression surrounded by parentheses is
  853. a primitive expression.
  854. The parentheses are used to alter the
  855. normal precedence.
  856. .NH 2
  857. Unary operators
  858. .PP
  859. The unary operators
  860. bind right to left.
  861. .NH 3
  862. \-\|\fIexpression\fP
  863. .PP
  864. The result is the negative of the expression.
  865. .NH 3
  866. ++\|\fInamed-expression\fP
  867. .PP
  868. The named expression is
  869. incremented by one.
  870. The result is the value of the named expression after
  871. incrementing.
  872. .NH 3
  873. \-\-\|\fInamed-expression\fP
  874. .PP
  875. The named expression is
  876. decremented by one.
  877. The result is the value of the named expression after
  878. decrementing.
  879. .NH 3
  880. \fInamed-expression\fP\|++
  881. .PP
  882. The named expression is
  883. incremented by one.
  884. The result is the value of the named expression before
  885. incrementing.
  886. .NH 3
  887. \fInamed-expression\fP\|\-\-
  888. .PP
  889. The named expression is
  890. decremented by one.
  891. The result is the value of the named expression before
  892. decrementing.
  893. .NH 2
  894. Exponentiation operator
  895. .PP
  896. The exponentiation operator binds right to left.
  897. .NH 3
  898. \fIexpression\fP ^ \fIexpression\fP
  899. .PP
  900. The result is the first
  901. expression raised to the power of the
  902. second expression.
  903. The second expression must be an integer.
  904. If \fIa\fP
  905. is the scale of the left expression
  906. and \fIb\fP is the absolute value
  907. of the right expression,
  908. then the scale of the result is:
  909. .PP
  910. min\|(\|\fIa\(mub\fP,\|max\|(\|\fBscale\fP,\|\fIa\fP\|)\|)
  911. .NH 2
  912. Multiplicative operators
  913. .PP
  914. The operators *, /, % bind left to right.
  915. .NH 3
  916. \fIexpression\fP * \fIexpression\fP
  917. .PP
  918. The result is the product
  919. of the two expressions.
  920. If \fIa\fP and \fIb\fP are the
  921. scales of the two expressions,
  922. then the scale of the result is:
  923. .PP
  924. min\|(\|\fIa+b\fP,\|max\|(\|\fBscale\fP,\|\fIa\fP,\|\fIb\fP\|)\|)
  925. .NH 3
  926. \fIexpression\fP / \fIexpression\fP
  927. .PP
  928. The result is the quotient of the two expressions.
  929. The scale of the result is the value of \fBscale\fR.
  930. .NH 3
  931. \fIexpression\fP % \fIexpression\fP
  932. .PP
  933. The % operator produces the remainder of the division
  934. of the two expressions.
  935. More precisely,
  936. \fIa\fP%\fIb\fP is \fIa\fP\-\fIa\fP/\fIb\fP*\fIb\fP.
  937. .PP
  938. The scale of the result is the sum of the scale of
  939. the divisor and the value of
  940. .ft B
  941. scale
  942. .ft
  943. .NH 2
  944. Additive operators
  945. .PP
  946. The additive operators bind left to right.
  947. .NH 3
  948. \fIexpression\fP + \fIexpression\fP
  949. .PP
  950. The result is the sum of the two expressions.
  951. The scale of the result is
  952. the maximun of the scales of the expressions.
  953. .NH 3
  954. \fIexpression\fP \- \fIexpression\fP
  955. .PP
  956. The result is the difference of the two expressions.
  957. The scale of the result is the
  958. maximum of the scales of the expressions.
  959. .NH 2
  960. assignment operators
  961. .PP
  962. The assignment operators bind right to left.
  963. .NH 3
  964. \fInamed-expression\fP = \fIexpression\fP
  965. .PP
  966. This expression results in assigning the value of the expression
  967. on the right
  968. to the named expression on the left.
  969. .NH 3
  970. \fInamed-expression\fP =+ \fIexpression\fP
  971. .NH 3
  972. \fInamed-expression\fP =\- \fIexpression\fP
  973. .NH 3
  974. \fInamed-expression\fP =* \fIexpression\fP
  975. .NH 3
  976. \fInamed-expression\fP =/ \fIexpression\fP
  977. .NH 3
  978. \fInamed-expression\fP =% \fIexpression\fP
  979. .NH 3
  980. \fInamed-expression\fP =^ \fIexpression\fP
  981. .PP
  982. The result of the above expressions is equivalent
  983. to ``named expression = named expression OP expression'',
  984. where OP is the operator after the = sign.
  985. .NH 1
  986. Relations
  987. .PP
  988. Unlike all other operators, the relational operators
  989. are only valid as the object of an \fBif\fP, \fBwhile\fP,
  990. or inside a \fBfor\fP statement.
  991. .NH 2
  992. \fIexpression\fP < \fIexpression\fP
  993. .NH 2
  994. \fIexpression\fP > \fIexpression\fP
  995. .NH 2
  996. \fIexpression\fP <= \fIexpression\fP
  997. .NH 2
  998. \fIexpression\fP >= \fIexpression\fP
  999. .NH 2
  1000. \fIexpression\fP == \fIexpression\fP
  1001. .NH 2
  1002. \fIexpression\fP != \fIexpression\fP
  1003. .NH 1
  1004. Storage classes
  1005. .PP
  1006. There are only two storage classes in BC, global and automatic
  1007. (local).
  1008. Only identifiers that are to be local to a function need be 
  1009. declared with the \fBauto\fP command.
  1010. The arguments to a function
  1011. are local to the function.
  1012. All other identifiers are assumed to be global
  1013. and available to all functions.
  1014. All identifiers, global and local, have initial values
  1015. of zero.
  1016. Identifiers declared as \fBauto\fP are allocated on entry to the function 
  1017. and released on returning from the function.
  1018. They therefore do not retain values between function calls.
  1019. \fBauto\fP arrays are specified by the array name followed by empty square brackets.
  1020. .PP
  1021. Automatic variables in BC do not work in exactly the same way
  1022. as in either C or PL/I.  On entry to a function, the old values of
  1023. the names that appear as parameters and as automatic
  1024. variables are pushed onto a stack.  
  1025. Until return is made from the function, reference to these
  1026. names refers only to the new values.
  1027. .NH 1
  1028. Statements
  1029. .PP
  1030. Statements must be separated by semicolon or newline.
  1031. Except where altered by control statements, execution
  1032. is sequential.
  1033. .NH 2
  1034. Expression statements
  1035. .PP
  1036. When a statement is an expression, unless
  1037. the main operator is an assignment, the value
  1038. of the expression is printed, followed by a newline character.
  1039. .NH 2
  1040. Compound statements
  1041. .PP
  1042. Statements may be grouped together and used when one statement is expected
  1043. by surrounding them with { }.
  1044. .NH 2
  1045. Quoted string statements
  1046. .PP
  1047. "any string"
  1048. .sp .5
  1049. This statement prints the string inside the quotes.
  1050. .NH 2
  1051. If statements
  1052. .sp .5
  1053. \fBif\|(\|\fIrelation\fB\|)\|\fIstatement\fR
  1054. .PP
  1055. The substatement is executed if the relation is true.
  1056. .NH 2
  1057. While statements
  1058. .sp .5
  1059. \fBwhile\|(\|\fIrelation\fB\|)\|\fIstatement\fR
  1060. .PP
  1061. The statement is executed while the relation
  1062. is true.
  1063. The test occurs before each execution of the statement.
  1064. .NH 2
  1065. For statements
  1066. .sp .5
  1067. \fBfor\|(\|\fIexpression\fB; \fIrelation\fB; \fIexpression\fB\|)\|\fIstatement\fR
  1068. .PP
  1069. The for statement is the same as
  1070. .nf
  1071. .ft I
  1072.     first-expression
  1073.     \fBwhile\|(\fPrelation\|\fB) {\fP
  1074.         statement
  1075.         last-expression
  1076.     }
  1077. .ft R
  1078. .fi
  1079. .PP
  1080. All three expressions must be present.
  1081. .NH 2
  1082. Break statements
  1083. .sp .5
  1084. \fBbreak\fP
  1085. .PP
  1086. \fBbreak\fP causes termination of a \fBfor\fP or \fBwhile\fP statement.
  1087. .NH 2
  1088. Auto statements
  1089. .sp .5
  1090. \fBauto \fIidentifier\fR\|[\|\fB,\fIidentifier\fR\|]
  1091. .PP
  1092. The auto statement causes the values of the identifiers to be pushed down.
  1093. The identifiers can be ordinary identifiers or array identifiers.
  1094. Array identifiers are specified by following the array name by empty square
  1095. brackets.
  1096. The auto statement must be the first statement
  1097. in a function definition.
  1098. .NH 2
  1099. Define statements
  1100. .sp .5
  1101. .nf
  1102. \fBdefine(\|\fR[\fIparameter\|\fR[\fB\|,\|\fIparameter\|.\|.\|.\|\fR]\|]\|\fB)\|{\fI
  1103.     statements\|\fB}\fR
  1104. .fi
  1105. .PP
  1106. The define statement defines a function.
  1107. The parameters may
  1108. be ordinary identifiers or array names.
  1109. Array names must be followed by empty square brackets.
  1110. .NH 2
  1111. Return statements
  1112. .sp .5
  1113. \fBreturn\fP
  1114. .sp .5
  1115. \fBreturn(\fI\|expression\|\fB)\fR
  1116. .PP
  1117. The return statement causes termination of a function,
  1118. popping of its auto variables, and
  1119. specifies the result of the function.
  1120. The first form is equivalent to \fBreturn(0)\fR.
  1121. The result of the function is the result of the expression
  1122. in parentheses.
  1123. .NH 2
  1124. Quit
  1125. .PP
  1126. The quit statement stops execution of a BC program and returns
  1127. control to UNIX when it is first encountered.
  1128. Because it is not treated as an executable statement,
  1129. it cannot be used
  1130. in a function definition or in an 
  1131. .ft B
  1132. if, for,
  1133. .ft
  1134. or
  1135. .ft B
  1136. while
  1137. .ft
  1138. statement.
  1139.