parse Relations:
```plantuml
@startuml
start
:consume("such that");
if (token is "such that") then (yes)
repeat
:consume();
:convert token into valid RelationType;
if (token can be converted to RelationType) then (yes)
:consume("(");
if (token is "(") then (yes)
:parse left hand side;
repeat
:consume();
:convert token into\n RelationParameterType;
if (token can be converted to\n RelationParameterType) then (yes)
if (RelationParameter type is IDENT or\nSYNONYM and has an invalid name) then (yes)
:Invalid Syntax;
stop
else (no)
if (just parsed left hand side) then (yes)
:consume(",");
if (token is ",") then (yes)
else (no)
:Invalid Syntax;
stop
endif
else (no)
:consume(")");
if (token is ")") then (yes)
else (no)
:Invalid Syntax;
stop
endif
endif
endif
else (no)
:Invalid Syntax;
stop
endif
repeatwhile(still need to parse right hand side) is (yes)
-> no;
if (relation has valid concrete syntax grammar) then (yes)
:add Relation with RelationType and RelationParameterTypes to list of relations;
else (no)
:Invalid Syntax;
stop
endif
else (no)
:Invalid Syntax;
stop
endif
else (no)
:Invalid Syntax;
stop
endif
repeatwhile(while next token is TokenType AND) is (yes)
->no;
stop
else (no)
:Invalid Syntax;
stop
endif
@enduml
```