| 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 |