--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rdf-turtle/bnf Fri Jun 10 14:34:17 2011 -0700
@@ -0,0 +1,64 @@
+[1] Query ::= Prologue ConstructQuery
+[2] Prologue ::= BaseDecl? PrefixDecl*
+[3] BaseDecl ::= BASE IRI_REF '.'
+[4] PrefixDecl ::= PREFIX PNAME_NS IRI_REF '.'
+[6] ConstructQuery ::= ConstructTemplate
+[30] ConstructTemplate ::= ConstructTriples?
+[31] ConstructTriples ::= TriplesSameSubject ( '.' ConstructTriples? )?
+[32] TriplesSameSubject ::= GraphTerm PropertyListNotEmpty | TriplesNode PropertyList
+[33] PropertyListNotEmpty ::= Verb ObjectList ( ';' ( Verb ObjectList )? )*
+[34] PropertyList ::= PropertyListNotEmpty?
+[35] ObjectList ::= Object ( ',' Object )*
+[36] Object ::= GraphNode
+[37] Verb ::= IRIref | 'a'
+[38] TriplesNode ::= Collection | BlankNodePropertyList
+[39] BlankNodePropertyList ::= '[' PropertyListNotEmpty ']'
+[40] Collection ::= '(' GraphNode+ ')'
+[41] GraphNode ::= GraphTerm | TriplesNode
+[45] GraphTerm ::= IRIref | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL
+[60] RDFLiteral ::= String ( LANGTAG | ( '^^' IRIref ) )?
+[61] NumericLiteral ::= NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative
+[62] NumericLiteralUnsigned ::= INTEGER | DECIMAL | DOUBLE
+[63] NumericLiteralPositive ::= INTEGER_POSITIVE | DECIMAL_POSITIVE | DOUBLE_POSITIVE
+[64] NumericLiteralNegative ::= INTEGER_NEGATIVE | DECIMAL_NEGATIVE | DOUBLE_NEGATIVE
+[65] BooleanLiteral ::= 'true' | 'false'
+[66] String ::= STRING_LITERAL1 | STRING_LITERAL2 | STRING_LITERAL_LONG1 | STRING_LITERAL_LONG2
+[67] IRIref ::= IRI_REF | PrefixedName
+[68] PrefixedName ::= PNAME_LN | PNAME_NS
+[69] BlankNode ::= BLANK_NODE_LABEL | ANON
+
+@terminals
+
+[70] IRI_REF ::= '<' ([^<>\"{}|^`\\]-[#x00-#x20])* '>'
+[71] PNAME_NS ::= PN_PREFIX? ':'
+[72] PNAME_LN ::= PNAME_NS PN_LOCAL
+[73] BLANK_NODE_LABEL ::= '_:' PN_LOCAL
+[74] BASE ::= '@base'
+[75] PREFIX ::= '@prefix'
+[76] LANGTAG ::= BASE | PREFIX | '@999' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*
+[77] INTEGER ::= [0-9]+
+[78] DECIMAL ::= [0-9]* '.' [0-9]+
+[79] DOUBLE ::= [0-9]+ '.' [0-9]* EXPONENT | '.' ([0-9])+ EXPONENT | ([0-9])+ EXPONENT
+[80] INTEGER_POSITIVE ::= '+' INTEGER
+[81] DECIMAL_POSITIVE ::= '+' DECIMAL
+[82] DOUBLE_POSITIVE ::= '+' DOUBLE
+[83] INTEGER_NEGATIVE ::= '-' INTEGER
+[84] DECIMAL_NEGATIVE ::= '-' DECIMAL
+[85] DOUBLE_NEGATIVE ::= '-' DOUBLE
+[86] EXPONENT ::= [eE] [+-]? [0-9]+
+[87] STRING_LITERAL1 ::= "'" ( ([^#x27#x5C#xA#xD]) | ECHAR )* "'"
+[88] STRING_LITERAL2 ::= '"' ( ([^#x22#x5C#xA#xD]) | ECHAR )* '"'
+[89] STRING_LITERAL_LONG1 ::= "'''" ( ( "'" | "''" )? ( [^'\\] | ECHAR ) )* "'''"
+[90] STRING_LITERAL_LONG2 ::= '"""' ( ( '"' | '""' )? ( [^"\\] | ECHAR ) )* '"""'
+[91] ECHAR ::= '\\' [tbnrf\\"']
+[92] NIL ::= '(' WS* ')'
+[93] WS ::= #x20 | #x9 | #xD | #xA
+[94] ANON ::= '[' WS* ']'
+[95] PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+[96] PN_CHARS_U ::= PN_CHARS_BASE | '_'
+[98] PN_CHARS ::= PN_CHARS_U | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]
+[99] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS|'.')* PN_CHARS)?
+[100] PN_LOCAL ::= ( PN_CHARS_U | [0-9] ) ((PN_CHARS|'.')* PN_CHARS)?
+
+@pass: [ \t\r\n]+ | '#' [^\r\n]*
+