
DOCUMENT START
NON-TERMINALS
	spec	:=	Introduces Needs ( Equations )* <EOF>
	Introduces	:=	( <INTRODUCES> sortNames ( "," sortNames )* "." )?
	Needs	:=	( <NEEDS> name ( "," name )* "." )?
	Equations	:=	OPDeclarations
		|	SortEquations
		|	ReEquations
		|	SyntaxSection
		|	PrettyPrinterEquation
		|	ImportClause
	SyntaxSection	:=	<SYNTAX> ( Syntax )+ <END>
	Syntax	:=	names <EQUAL> names "."
	PrettyPrinterEquation	:=	<PP> names <QPONTOS> names "."
	SortEquations	:=	<EQ> ( names ( <DPONTOS> | <EQUAL> | <SUB> | <SUP> ) names "." )
	OPDeclarations	:=	( <OP> names <QPONTOS> ( namesList )? <INTO> names "." )
	namesList	:=	sortNames ( "," sortNames )*
	ReEquations	:=	<RE> ReClause ( "=>" ReClause )* "."
	ReClause	:=	names <EQUAL> names
	ImportClause	:=	<IMP> name "."
	sortNames	:=	( <NAME> )+
	names	:=	( aName | parentizedNames )+
	parentizedNames	:=	( <APAR> ) ( aName | "=>" | "." | <EQUAL> | <DPONTOS> | <QPONTOS> | <SUB> | <SUP> | parentizedNames )* ( <FPAR> )
	name	:=	( <NAME> )
	userInput	:=	( aName | "=>" | "." | <EQUAL> | <DPONTOS> | <QPONTOS> | <SUB> | <SUP> | <APAR> | <FPAR> )+
	aName	:=	<NAME>
		|	<VARNAME>
		|	","
		|	<BV>
		|	<RE>
		|	<EQ>
		|	<OP>
		|	<PP>
		|	<SYNTAX>
		|	<IMP>

DOCUMENT END
