packages feed

BNFC-meta-0.1: examples/sql/Sql.hs

{-# Language QuasiQuotes #-}
module SQL where
import Language.LBNF

compile [$cf|

antiquote "[" ":" ":]" ;

entrypoints SqlStatement,BoolExpression,Value,TableName ;

-- Statements
DeleteStatement. SqlStatement ::= "DELETE" "FROM" TableName WhereClause ;

WhereClause.   WhereClause ::= "WHERE" BoolExpression;
NoWhereClause. WhereClause ::= ;

-- Names
TableName.  TableName  ::= LocalOrSchemaQualifiedName ;
ColumnName. ColumnName  ::= LocalOrSchemaQualifiedName ;

-- Expressions
BoolOr.    BoolExpression    ::= BoolExpression "OR" BoolExpression1 ;
BoolAnd.   BoolExpression1   ::= BoolExpression1 "AND" BoolExpression2 ;
BoolNeg.   BoolExpression2   ::= "NOT" BoolExpression3 ;
BoolIsNot. BoolExpression3   ::= BoolExpression4 "IS" "NOT" TruthValue ;
BoolIs.    BoolExpression3   ::= BoolExpression4 "IS" TruthValue ;
BoolVal.   BoolExpression4   ::= RowValuePredicand CompOp RowValuePredicand ;
_.         BoolExpression4   ::= "(" BoolExpression ")" ;
--      |     <nonparenthesized value expression primary>
-- Lots of other predicates go here...

_. BoolExpression  ::= BoolExpression1 ;
_. BoolExpression1 ::= BoolExpression2 ;
_. BoolExpression2 ::= BoolExpression3 ;
_. BoolExpression3 ::= BoolExpression4 ;


ValuePredicand            . RowValuePredicand ::= Value ;
ColumnReferencePredicand  . RowValuePredicand ::= ColumnName ;
--  <boolean value expression>
--  <explicit row value constructor>
-- <row value special case> 

TRUE.    TruthValue ::= "TRUE" ;
FALSE.   TruthValue ::= "FALSE" ;
UNKNOWN. TruthValue ::= "UNKNOWN" ;

-- Comparison operators
EqualsOp.              CompOp ::= "=" ;
NotEqualsOp.           CompOp ::= "><" ;
LessThanOperator.      CompOp ::= "<" ;
GreaterThanOp.         CompOp ::= ">" ;
LessThanOrEqualsOp.    CompOp ::= "<=" ;
GreaterThanOrEqualsOp. CompOp ::= ">=" ;

-- Data
StringValue.  Value  ::= String ;
IntValue.     Value  ::= Integer ;
DoubleValue.  Value  ::= Double ;
--  <datetime value expression>
--  <interval value expression>
--  <user-defined type value expression>
--  <reference value expression>
--  <collection value expression>

-- Tokens
token LocalOrSchemaQualifiedName 
  (letter (letter | digit)* '.')* letter (letter | digit)* ;

|]