term-read-in | ::= subterm(1200) full-stop |
|
subterm(N) | ::= term(M) | { where M is less than or equal to N } |
|
term(N) | ::= op(N,fx) subterm(N-1) | { except in the case of a number if subterm starts with a ‘(’, op must be followed by whitespace-text } |
| | op(N,fy) subterm(N) | { if subterm starts with a ‘(’, op must be followed by whitespace-text } |
| | subterm(N-1) op(N,xfx) subterm(N-1) |
| | subterm(N-1) op(N,xfy) subterm(N) |
| | subterm(N) op(N,yfx) subterm(N-1) |
| | subterm(N-1) op(N,xf) |
| | subterm(N) op(N,yf) |
|
term(1100) | ::= subterm(1099) | subterm(1100) | { term with functor ;/2 unless | is declared infix } |
term(1000) | ::= subterm(999) , subterm(1000) | { term with functor ','/2 } |
|
term(0) | ::= functor ( arguments ) | { provided there is no whitespace-text between the functor and the ‘(’ } |
| | ( subterm(1200) ) |
| | { subterm(1200) } |
| | list |
| | string |
| | constant |
| | variable |
|
op(N,T) | ::= name | { where name has been declared as an operator of type T and precedence N } |
|
arguments | ::= subterm(999) |
| | subterm(999) , arguments |
|
list | ::= [] |
| | [ listexpr ] |
|
listexpr | ::= subterm(999) |
| | subterm(999) , listexpr |
| | subterm(999) | subterm(999) |
|
constant | ::= atom | number |
|
number | ::= unsigned-number |
| | sign unsigned-number |
|
unsigned-number | ::= natural-number | unsigned-float |
|
atom | ::= name |
|
functor | ::= name |