query = tablename '?' statement . statement = '(' + statement + ')' | booleanstatement | logicalstatement . booleanstatement = statement '&' statement | statement '|' statement | '!' statement . logicalstatement = logicalstatement ('<'|'>'|'<='|'=>'|'=='|'!='|'~') logicalstatement . | value . | variable . value = floatnumber | decimalnumber | hexnumber | octalnumber | string . variable = identifier . tablename = identifier . identifier = UnicodeLetter { UnicodeLetter | UnicodeDigit } . floatnumber = decimals "." [ decimals ] [ exponent ] | decimals exponent | "." decimals [ exponent ] | [ "+" | "-" ] "nan" | [ "+" | "-" ] "inf" . decimals = decimal_digit { decimal_digit } . exponent = ( "e" | "E" ) [ "+" | "-" ] decimals . decimalnumber = ( "1" ... "9" ) { decimal_digit } | "0" . hexnumber = 0" ( "x" | "X" ) hex_digit { hex_digit }. octalnumber = "0" octal_digit { octal_digit } . decimal_digit = "0" ... "9" . hex_digit = "0" ... "9" | "A" ... "F" | "a" ... "f" . octal_digit = "0" ... "7" . string = '"' { normalchar | escapedchar } '"'. normalchar = Char - '"' - "\" . escapedchar = "\" Char . # Char, UnicodeLetter and UnicodeDigit are assumed to be predefined. # Example: materials ? (30 <= shearmodulus <= 50)