-
Notifications
You must be signed in to change notification settings - Fork 0
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
|
- Introduction
- Architect Guide
- Concepts
- Using Visual Studio
- Overview
- Creating a CodeModeler Project
- Visual Environment
- Project Hierarchy
- Design Surface
- Customizing Design Surfaces
- Ribbon Bar
- Property Grid
- Member Format Expressions
- Model Grid
- Method Editor
- View Editor
- Instance Editor and Grid
- Resources Editor
- Inferred Model Viewer
- Building
- Project Physical Layout
- Source Control Support
- Generating
- Aspect Oriented Design (AOD)
- Developer Guide
- The Business Object Model (BOM)
- CodeModeler Query Language (CMQL)
- Starting Guide - Tutorial
- Upgrade From CFE