Skip to content

CMQL Formal Grammar

Simon Mourier edited this page Feb 19, 2020 · 1 revision

This article contains the CMQL formal grammar as well as complimentary notes on identifiers and parameters.

More information such as available operators, examples or advanced methods, can be found in the Architect Guide, and more especially in the Methods chapter.

"Name"      = 'CMQL'
"Author"    = 'SOFTFLUENT S.A.S <https://www.softfluent.com>'
"Version"   = '2.4a'
"About"     = 'CodeModeler Query Language. Copyright 2005-2020 SoftFluent.'
"Character Mapping" = 'Unicode'
"Case Sensitive"    = False
"Start Symbol" = <Method>
 
! =============================================================================
! Comments
! =============================================================================
Comment Start = '/*'
Comment End   = '*/'
Comment Line  = '--'
 
! =============================================================================
! Terminals
! =============================================================================
{String Ch 1}      = {All Valid} - ["]
{String Ch 2}      = {All Valid} - ['']
{Id Ch Standard}   = {Alphanumeric} + [_] + [.] + [$]
{Id Ch Extended}   = {All Valid} - ['['] - [']']
{Id Ch Snippet}    = {Id Ch Extended} + {CR} + {LF}
{Hex Digit}        = {Digit} + [abcdef]
{Date Char}        = {Digit} + {Whitespace} + [/:] - [#]
 
StringLiteral   = '"'{String Ch 1}*'"' | ''{String Ch 2}*''
IntegerLiteral  = {Digit}+
RealLiteral     = {Digit}+'.'{Digit}+
HexLiteral      = '0x' {Hex Digit}+
DateLiteral     = '#' {Date Char}+ '#'
 
Identifier      = (({Letter} | '$' | '?'){Id Ch Standard}* | '['+{Id Ch Snippet}+']')+
 
! =============================================================================
! Rules
! =============================================================================
<method>       ::= <loadMethod>
                | <ruleMethod>
                | <deleteMethod>
                | <countMethod>
                | <rawMethod>
                | <searchMethod>
 
<statementList> ::= <statement> <statementList>
                | <statement>
 
<statement>     ::= <expression>
    
! =============================================================================
! Rule, Delete, Count, Search Methods
! =============================================================================
<rawMethodType>    ::= raw
 
<rawMethod>  ::= <rawMethodType> <arguments> <rawCode>
 
<ruleMethodType>    ::= rule
 
<ruleMethod>  ::= <ruleMethodType> <arguments> <ifThenElseList>
 
<deleteMethodType>    ::= delete
 
<deleteMethod>  ::= <deleteMethodType> <arguments> <from> <where> <snippet>
                | <deleteMethodType> <arguments> <raw> <rawCode>
 
<countMethodType>    ::= count
 
<countMethod>  ::= <countMethodType> <arguments> <from> <where> <snippet>
                | <countMethodType> <arguments> <raw> <rawCode>
 
<searchMethodType>    ::= search
 
<searchMethod>  ::= <searchMethodType> <arguments> <from> <where> <order> <snippet>
                | <searchMethodType> <arguments> <raw> <rawCode>
 
 
<ifThenElseList> ::= <ifThenElse> ',' <ifThenElseList>
                | <ifThenElse>
                |
                
<ifThenElse>    ::= if <expression> then <statementList> else <statementList>
                | if <expression> then <statementList>
                
! =============================================================================
! Load Method
! =============================================================================
<loadMethodType>    ::= load
                    | loadone
 
<loadMethod>  ::= <loadMethodType> <arguments> <from> <where> <order> <snippet>
                | <loadMethodType> <arguments> <raw> <rawCode>
                                
<arguments>       ::= '(' <argumentList> ')'
                    | '(*)'
                    | '(**)'
                    |
 
<argumentList>   ::= <argumentItem> ',' <argumentList>
                  | <argumentItem>
                  |
 
<argumentItem>   ::= <argumentType> <argumentName>
                  | <argumentNameNoType>
 
<argumentType>   ::= Identifier
                  | Identifier '[]'
                  
<argumentName> ::= Identifier
 
<argumentNameNoType> ::= Identifier
 
<raw>    ::= raw
 
<from>    ::= from <fromList>
                  |
                  
<fromList>    ::= Identifier ',' <fromList>
                  | Identifier
 
<where>  ::= where <expression>
                  |
 
<order>  ::= order by <orderList>
                  |
 
<orderList>    ::= Identifier <orderType> ',' <orderList>
                  | Identifier <orderType>
 
<orderType>    ::= asc
                  | desc
                  |
                  
<rawCode>   ::= Identifier
                |
 
! ============================================================================= 
! Expressions
! =============================================================================
<expression>  ::= <andExpression> or <expression>
                | <andExpression>
 
<andExpression>     ::= <notExpression> and <andExpression>
                | <notExpression>
 
<notExpression>     ::= not <predicateExpression>
                | <predicateExpression>
 
<predicateExpression>    ::= <existsExpression>
                | <inExpression>
                | <equalsExpression>
                | <greaterThanExpression>
                | <lesserThanExpression>
                | <greaterThanOrEqualExpression>
                | <lesserThanOrEqualExpression>
                | <likeExpression>
                | <containsExpression>
                | <freeTextExpression>
                | <notEqualsExpression>
                | <bitwiseAndExpression>
                | <bitwiseOrExpression>
                | <addExpression>
 
 
<containsExpression> ::= <addExpression> contains <addExpression>
 
<freeTextExpression> ::= <addExpression> freetext <addExpression>
                
<existsExpression> ::= <addExpression> exists
 
<bitwiseAndExpression> ::= <addExpression> '&' <addExpression>
 
<bitwiseOrExpression> ::= <addExpression> '|' <addExpression>
 
<likeExpression> ::= <addExpression> starts with <addExpression>
                | <addExpression> startswith <addExpression>
                | <addExpression> is like <addExpression>
                | <addExpression> like <addExpression>
                | <addExpression> '#' <addExpression>
                
<inExpression>  ::= <addExpression> in <tuple>
 
<equalsExpression> ::= <addExpression> equals <addExpression>
                | <addExpression> is equal to <addExpression>
                | <addExpression> '='  <addExpression>
 
<notEqualsExpression> ::= <addExpression> not equals <addExpression>
                | <addExpression> is not equal to <addExpression>
                | <addExpression> '!='  <addExpression>
                | <addExpression> '<>'  <addExpression>
                
<greaterThanExpression> ::= <addExpression> '>'  <addExpression>
                | <addExpression> is greater than <addExpression>
                | <addExpression> greaterthan <addExpression>
 
<greaterThanOrEqualExpression> ::= <addExpression> '>='  <addExpression>
                | <addExpression> is greater than or equal to <addExpression>
                | <addExpression> is greater than or equal<addExpression>
                | <addExpression> greaterthanorequal <addExpression>
                | <addExpression> greaterthanorequalto <addExpression>
 
<lesserThanExpression> ::= <addExpression> '<'  <addExpression>
                | <addExpression> is lesser than <addExpression>
                | <addExpression> lesserthan <addExpression>
 
<lesserThanOrEqualExpression> ::= <addExpression> '<='  <addExpression>
                | <addExpression> is lesser than or equal to <addExpression>
                | <addExpression> is lesser than or equal<addExpression>
                | <addExpression> lesserthanorequal <addExpression>
                | <addExpression> lesserthanorequalto <addExpression>
 
<addExpression>     ::= <addExpression> '+' <multiplyExpression>
                | <addExpression> '-' <multiplyExpression>
                | <multiplyExpression>
 
<multiplyExpression>    ::= <multiplyExpression> '*' <negateExpression> 
                | <multiplyExpression> '/' <negateExpression>
                | <negateExpression>
 
<negateExpression>  ::= '-' <value>
                | <value>
                                
<paramRef>      ::= '@' Identifier
 
<boolLiteral>   ::= true
                | false
        
<value>       ::= <tuple>
                | Identifier
                | <paramRef>
                | IntegerLiteral
                | RealLiteral
                | StringLiteral
                | HexLiteral
                | DateLiteral
                | <boolLiteral>
 
<tuple>       ::= '(' <expressionList> ')'
 
<expressionList>  ::= <expression> ',' <expressionList>
               | <expression>
 
<snippet> ::= Identifier
            |

 

Clone this wiki locally