Node:Term Token, Next:Token String, Previous:Sentence, Up:Full Syntax
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(1000) --> subterm(999) , subterm(1000) 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