4.1.7.4 Syntax of Terms as Tokens

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


Send feedback on this subject.