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 layout-text }
|
| | op(N,fy) subterm(N) | { if subterm starts with a ‘(’, op must be followed by layout-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 }
|
term(1000) | ::= subterm(999) , subterm(1000) | { term with functor ','/2 }
|
|
term(0) | ::= functor ( arguments ) | { provided there is no layout-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
|
| | sign inf
|
| | sign nan
|
|
unsigned-number | ::= natural-number | unsigned-float
|
|
atom | ::= name
|
|
functor | ::= name
|