FQL Grammar

From Facebook Developer Wiki

Jump to: navigation, search

This is the grammar file we use to parse FQL statements. CAPS indicate terminal expressions as recognized by the tokenizer.

start ::= statement opt_semicolon. opt_semicolon ::= SEMICOLON. opt_semicolon ::= . statement ::= SELECT expression_list FROM IDENT WHERE disjunction opt_order opt_limit. opt_order ::= ORDER BY expression opt_desc. opt_order ::= . opt_desc ::= DESC. opt_desc ::= ASC. opt_desc ::= . opt_limit ::= LIMIT INT COMMA INT. opt_limit ::= LIMIT INT opt_offset. opt_limit ::= . opt_offset ::= OFFSET INT. opt_offset ::= . expression_list ::= disjunction. expression_list ::= expression_list COMMA disjunction. disjunction ::= conjunction. disjunction ::= disjunction OR conjunction. conjunction ::= expression. conjunction ::= conjunction AND expression. expression ::= expression CMP sum. expression ::= sum IN OPEN_PAREN statement CLOSE_PAREN. expression ::= sum IN OPEN_PAREN expression_list CLOSE_PAREN. expression ::= sum IN OPEN_PAREN CLOSE_PAREN. expression ::= sum IN term. expression ::= sum. sum ::= sum ADD_OP prod. sum ::= prod. prod ::= prod STAR big_term. prod ::= prod SLASH big_term. prod ::= big_term. big_term ::= OPEN_PAREN disjunction CLOSE_PAREN. big_term ::= NOT big_term. big_term ::= term. term ::= IDENT. term ::= constant. term ::= IDENT OPEN_PAREN expression_list CLOSE_PAREN. term ::= IDENT OPEN_PAREN CLOSE_PAREN. constant ::= INT. constant ::= STRING.


In actuality, the "statement" production is slightly more complex in order to flag some common errors:

statement ::= SELECT star_catching_expr_list FROM IDENT WHERE disjunction opt_order opt_limit. statement ::= SELECT star_catching_expr_list. // Error: FROM and WHERE clauses are required statement ::= SELECT star_catching_expr_list FROM IDENT. // Error: WHERE clause is required. star_catching_expr_list ::= STAR. // Error: SELECT * not supported star_catching_expr_list ::= star_catching_expr_list COMMA STAR. // Error: SELECT * not supported star_catching_expr_list ::= disjunction. star_catching_expr_list ::= star_catching_expr_list COMMA disjunction.
reference