1/ BNF is not the same as XML and SPARQL. 2/ No links in grammar 3/ Whitespace runs not stated 4/ Terminals not fully identified. 5/ Spaces in strings? 6/ Escapes in strings? Line endings? How to write a string => use SPARQL string token ('', "", ''' and """) 7/ Comments "#foo" is a comment, not a string! 8/ Ambiguities in rules: Literal() ( typedLiteral() | stringLiteralNoLanguage() | stringLiteralWithLanguage() ) --> rewrite DataSomeValuesFrom() "DataSomeValuesFrom" "(" DataPropertyExpression() ( DataPropertyExpression() )* DataRange() ")" --> LOOKAHEAD(2) DataAllValuesFrom(): { } "DataAllValuesFrom" "(" DataPropertyExpression() ( DataPropertyExpression() )* DataRange() ")" ---------------- """ The infix notation for descriptions is ambiguous as stated. """ No, they are not. Manchester syntax: No rule for annotationAnnotatedList etc After generating via the meta-rules, find the mapping is not as described. dataProperty(),objectProperty() => dataPropertyIRI(),objectPropertyIRI() Randomly different from SPARQL e.g. doubles. annotationPropertyFrame: Empty disjunction expansion. Fix: at least one. Rewrite dataRange(), dataConjunction(), description() Ambiguity on staring with an IRI: dataAtomic() Datatype() datatypeRestriction() conjunction() Rewrite to use ("and"...)* classIRI() and primary() start with primary() restriction() | atomic() => both start with restriction Branches have common rule. datatypeFrame (X)* (Y)? (X)* Rewrite: (X)* (Y (X)* )? classFrame() Grammar wrong. "HasKey:" is mandatory there. Asymmetric: also: | 'DisjointWith:' descriptionAnnotatedList | 'DisjointUnionOf:' annotations description2List Rewrite (objectPropertyXXX() | dataPropertyXXX() ) objectProperty and dataProperty start with objectOrDatapropertyIRI Same for expressions fact() dataAtomic() Datatype(): datatypeRestriction() starts with a Datatype() Rewrite around conjunction()