RUSSIAN
(Русский)
ENGLISH


This function requires cookies.
If the browser does not accept cookies,
the light theme is used always.

1. Class

CLASS = '{'  Identifier [ '|'  Identifier ]  '}'   { ','   class_attribute ] }   ':'   { { CR Block_comment } CR   Import } [ CR   Base_class ] [ CR  Block_friends ] { CR   class_item }   CR   'END' [ CR Block_history ]  { CR text }

class_attribute = 'ABSTRACT' | 'NATIVE' | 'BAD' | 'BITWISE' | 'BYTES' | 'DESTRUCTORS' | 'GENERIC' | 'INFINITE |  'RECURSIVE' | 'SHORT_STRINGS' | 'STOPPING' | 'SAFE' | tested_class |
'UNTESTED' | deprecated_class | abandoned_class

class_item = Enumeration_declaration | Record_declaration | Object_declaration | Table_declaration | Constants_block | Field_declaration | Function_declaration | Operator_definition | Test_block | Native_statement | TODO_statement | Block_comment

deprecated_class = 'DEPRECATED' '(' '''' text '''' ')'

abandoned_class = 'ABANDONED' '(' '''' text '''' ')'

tested_class = 'TESTED' [ '(' Integer ')' ]

Block_comment = '-' '-' { '-' } '''' text ''''
 

 

    2. Import block

Import = import-list {  CR import-list ]

import-list =  [ 'DEBUG' ]  'IMPORT'  { ','  import-mod }   [ ':' ]   '{'   import-reference   '}'   { ','   '{'  import-reference  '}' }    (';'|'.')

import-mod = ( 'ANYWAY' | 'DEBUG' | 'TEST' | 'FRIENDS' )

import-reference = ( Identifier | '{' Identifier '}' )

 

    3. Base class

Base_class = 'BASE'   'CLASS'  [ ':' ]  '{'   Identifier   '}'   [ ';' | '.' ]

 

 

4. Enumeration declaration

Enumeration_declaration = 'ENUM'   '{'   Identifier   [ '|' ]   Identifier   '}'  [ deprecated_enum | abandoned_enum  ]  ':'   enumeration_item    { ','    enumeration_item }  [ CR ]  '.'

enumeration_item = [ CR ] ''''   Identifier  [ '|'  Identifier  ]    ''''

deprecated_enum = 'DEPRECATED' '(' '''' text '''' ')'

abandoned_enum = 'ABANDONED' '(' '''' text '''' ')'

 

5. Structure declaration

Record_declaration = 'STRUCTURE'   '{'   Identifier   [ '|' ]   Identifier   '}'   [   deprecated_record | abandoned_record   ] ':'   [ Field_declaration ]   { 'CR'   Field_declaration }   [ CR ]  '.'

deprecated_record = 'DEPRECATED' '(' '''' text '''' ')'

abandoned_record = 'ABANDONED' '(' '''' text '''' ')'

 

6. Table declaration

Table_declaration = 'TABLE'   Identifier [ '|' Identifier ] ':' [ CR ] '{'   Identifier   '}'   { [ CR ] table_name | counters | notnulls | names }  [ CR ]  '.'

table_name = 'NAME'   '''' text ''''

counters = 'COUNTER'   '(' Identifier {  ',' Identifier } ')'

notnulls = 'NOTNULL'   '(' Identifier { ',' Identifier } ')'

names = 'NAMES'   '(' Identifier '='  '"' text '"' { ','  Identifier '='  '"' text '"' }  ')'

 

7. Constants block

Constants_block = 'CONST'   Data_type   [  '{'  Identifier  '}'  ]  ':'   single_const   { CR   single_const }

single_const = Identifier   [ '|'   Identifier ]   '='   Expression

 

8. Field declaration

Field_declaration = Data_type   Identifier   [ '|'   Identifier ]   [ array_size ]   { ','   field_attr }   [ '='   Expression ]

array_size = '['   [ ( Integer | '{'   Identifier   '}'   '.' ]   '{'   Identifier   '}' ) ]   ']'

field_attr = 'READ' | 'INIT' | deparecated_field | abandoned_field

deprecated_field = 'DEPRECATED' '(' '''' text '''' ')'

abandoned_field = 'ABANDONED' '(' '''' text '''' ')'

 

9. Function / method declaration

Function_declaration = ( function_header | construct_header | destruct_header )  ':'   fun_body  [  native_code  ]  '.'

function_header = ( 'FUCTION' | 'FUN' | 'METHOD' |  'OVERRIDE' )  Identifier   [ '|'   Identifier ]   [ '('  parameter { ',' parameter  ')' ]   [ '==>'   Data_type [ 'RESULT' [ '|' Identifier ] ] ]
{ ','  fun_attribute }   { ',' param_restriction }

parameter = Data_type   Identifier   [ '|'   Identifier ]   [ '['   array_size   ']' ]

construct_header = 'CONSTRUCT'

destruct_header = 'DESTRUCT'

array_size = [ '{'   Identifier   '}' ] | [ '*' ]

fun_attribute = 'RECURSIVE' | 'NATIVE' | 'NEW' | 'REPLACE' | 'PUBLIC' | 'UNCOOKED' | 'TRAP' | 'FORGET' | deprecated_function | abandoned_function | wait_list | store_value | setter_for | operators_mod

deprecated_function = 'DEPRECATED' '(' '''' text '''' ')'

abandoned_function = 'ABANDONED' '(' '''' text '''' ')'

wait_list = 'WAIT' '(' Identifier { ',' Identifier } ')'

store_value = 'STORE' '(' Identifier '=' Integer ')'

setter_for = 'SETTER' 'FOR' Identifier

param_restriction = unconditional_restriction | conditional_restriction

uncoditional_restriction = 'RESTRICT'  Identifier  restriction_definition

conditional_restriction = 'IF' Identifier restriction_definition ',' 'THEN' Identifier restriction_definition

restriction_definition = is_constant | in_range | in_list

is_constant = 'IS' 'CONSTANT'

in_range = 'IN'   '['   Expression   'TO'   Expression   ']'

in_list = 'IN'  [ 'FLAGS' ]   ( list_expressions | set_names | '{' Identifier '}' )

list_expressions = '['   Expression  { ','   Expression  }  ']'

set_names = '{'  Identifier {  ','  Identifier  }  '}'

fun_body = { CR   Statement } | [Statement] | [ 'NATIVE' ] String_constant

native_code = 'NATIVE' Expression

 

10. Operator definition

Operator_definition = 'OPERATOR' [ data_type ] ( '+' | '-' | '*' | '/' ) data_type '==>' data_type [ ',' operators_mod ] ':' expression  '.'

operators_mod = 'OPERATORS' '(' '{' identifier '}' { ',' '{' identifier '}' } ')'
 

 

11. TEST block

Test_block = 'TEST'   Identifier [ '|' Identifier ]  ':'   { CR  test_statement }  '.'

test_statement = Statement | assert_statement

assert_statement = 'ASSERT' Expression [ ',' Expression ]

 

12. NATIVE statement

Native_statement = 'NATIVE'   ':'   String_constant  '.'

 

13. TODO statement

TODO_statement = 'TODO'   ':'   String_constant  '.'

 

14. Statement

Statement =  ( simple [ '==>' ] | '==>' ) | Block_comment | break | continue | stop | Conditional_statement | Loop_statement | Push_block | Debug_block | Like | Revert | NONE | UNCOOKED

simple = Declaration_local_var | Assignment | Send_data

Block_comment = '-'   '-'   { '-' }   ''''   'текст'   ''''  [ ',' 'REUSED' ]

break = 'BREAK'    Identifier

continue = 'CONTINUE'   Identifier

stop = 'STOP'   String_constant

 

15. Conditional statement

Conditional_statement =  'CASE'   [  Expression  ]   '?'    case_body   [ CR   'ELSE'   one_or_more_statements ]   ';'

case_body = one_or_more_statements | branches

branches = branch { branch }

branch = '['   Expression   { ','   Expression }   ']'  ( ':'  |  '?' )   one_or_more_statements

one_or_more_statements = [ Statement ]  { CR   Statement }

 

16. Loop statement

Loop_statement =  for_header   ':'   one_or_more_statements   ';'

for_header = 'FOR' [ ',' 'INFINITE' ]  Identifier  [ '|'   Identifier ]  { for_in | for_enum}

for_in = 'IN' for_array

for_enum = { 'ENUM' | 'ENUMERATE' } Expression

for_array = '['  Expression  to_downto  Expression }   ']' | Expression

to_downto = 'TO'  |  'DOWNTO'

 

17. PUSH variable block

Push_statement =  'PUSH'   Expression   [ '='   Expression ]   ':'   one_or_more_statements   ';'

 

18. DEBUG code block

Debug_statement =  { 'DEBUG' }  ':'   one_or_more_statements   ';'

 

19. SILENT code block (without warnings from the compiler)

Silent_statement =  { 'SILENT' }  ':'   one_or_more_statements   ';'
   

20. Restrict time of running block (LIMIT)

Limit =  'LIMIT' ( 'TIME' | 'FUN' | 'FUNCTIONS' | 'LOOPS' ) '(' Expression ')' [ units ] ':' one_or_more_statements   ';'

units = 'MSEC' | 'MILLISECONDS' | 'SEC' | 'SECOND' | 'MIN' | 'MINUTES' | 'HOURS' | 'DAYS'
 

21. Code block reuse (LIKE)

Like =  { 'LIKE' } [ Identifier ]  '.' '.' '.' { '.' } ''' text ''' [ ',' [CR] 'BUT' replacements ]

replacements = '(' pattern '==>' [pattern] ')' { ',' '(' pattern '==>' [pattern] ')' }

pattern = '''' text '''' | text

 

22. REVERT of a portion of code

Revert =  { 'REVERT' } [ Identifier ]  '.' '.' '.' { '.' } ''' text '''

 

23. Local variable declaration

Declaration_local_var =  [ Date_type ] Identifier [ '|'Identifier ] [ dynamic_array | fixed_array | initialization ]

dynamic_array = '[' ']' [ '<<' Expression ]

fixed_array = '[' [ '{' Identifier '}' [ '.' '{' Identifier '}' ] ']'

initialization = '=' ( Expression | New_object_construction )

 

24. Assignment statement

Assignment = ( repeat_previous_target | Expression ) (logic_arithmetic_assign | '=' New_object_construction)

repeat_previous_target = '.' '.' [ Unnaming_chain ]

logic_arithmetic_assign = ( '=' | '+=' | '-=' | '&=' | '*=' | '/=' | '^=' | '%=' | '&&=' | '||=' | '|=' ) Expression

 

25. Sending data statement

Send_date = [ ( repeat_previous_target | Expression ) send_left ] [ send_right ]

send_left = '<<' ( Expression ( { '<<' Expression } | by_table ) | SQL_insert | SQL_delete | SQL_update | SQL_select )

by_table = ',' 'BY' 'TABLE' Identifier

send_right = '>>' ( Expression |
Declaration_local_var )
 

26. Data type

Data_type =  type_class_or_enum_or_record | 'BOOL' | 'BOOLEAN' | 'BYTE' | 'INT' | 'INTEGER' | 'REAL' | 'STR' | 'STRING' | '{' '?' '}'

type_class_or_enum_or_record = '{'   Identifier   '}'  [  '.'   '{'   Identifier   '}'  ]

 

27. New object construction

New_object_construction =  '{'   Identifier   '}'  [  '.'   '{'   Identifier   '}'  ]  '('  Field_initialization  { ',' Field_initialization ')' [ owned_by | send_to_array ]

owned_by = 'OWNED' 'BY' Expression

send_to_array = '>>' Expression

 

28. Field initialization

Field_initialization =  Identifier   [ '[' [ Expression ] ']' ]   ( init_assign | init_append )

init_assign = '='  Expression

init_append = '<<' Expression

 

 

29. Expression

Expression = ( named_constant | function_call | enum_item | enclose_in_parentheses | numeric_constant | string_constant ) [ { field_or_function | array_item_or_slice } ] | prefixed_expression | binary_operation | containing_operation | '*'

named_constant = [ '{' Identifier '}' '.' ] Identifier

function_call = [ '{' Identifier '}' '.' ] Identifier '(' Expression { ',' Expression ')'

enum_item = [ '{' Identifier '}' '.' ] [ '{' Identifier '}' '.' ] '''' Identifier ''''

enclose_in_parentheses = '('   Expression   ')'

prefixed_expression = ( '!' | '~' | '+' | '-' ) Expression

binary_operation = Expression  ( '+' | '-' | '*' | '/' | '%' | '&' | '|' | '^' | '&&' | '||' | '==' | '!=' | '<' | '<=' | '>' | '>=' )   Expression

conaining_operation = Expression  ( 'IN' | '!IN' )   ( Expression | constant_array )

constant_array = '['   Expression   { ','   Expression }   ']'

concatenation = Expression    Expression

field_or_function = '.' ( Identifier [ function_params ] | type_cast )

function_params = '(' Expression { ',' Expression } ')'

type_cast = '{' Identifier '}'

array_item_or_slice = '[' [ Expression [ ( TO | DOWNTO ) Expression ] ']'

 

30. Numeric constant

Numeric_constant = [ '+' | '-' ]   ( '0x'  hexadecimal | '0b' binary | '0o' octal | decimal )

hexadecimal = ( hex_digit | '_' ) { hex_digit | '_' }

hex_digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'A' | 'b' | 'B' | 'c' | 'C' | 'd' | 'D' | 'e' | 'E' | 'f' | 'F'

binary = ( '0' | '1' | '_' ) { '0' | '1' | '_' }

octal = ( octal_digit | '_' ) { octal_digit | '_' }

octal_digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'

deciamal = Integer   [ '.'   Integer ]   [ ( 'e' | 'E' ) [ '+ | '-' ] Integer ]

 

31. String constant

String_constant = single_string { single_string | separate_line_string_in_apostrophes } [ '.' '_' Identifier ]

single_string = ( string_in_quotas | encoded_char )  [ '@@' ]

string_in_quotas = [ CR | '@' ]   '"'   { Symbol_except_" }   '"'

encoded_char = '#'  ( Integer | special_char_name )

special_char_name = 'NL' | 'CR' | 'LF' | 'BK' | 'TAB' | 'DEL' | 'SP' | 'BELL' | 'ESC'

separate_line_string_in_apostrophes = CR '''"' { Symbol_except_"' } '"'''

 

32. Integer

Integer = digit  [  { digit | '_' }  ]

digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

 

33. Name

Name = Identifier   { '|' Identifier } { '||' Name }

 

 

34. Identifier

Identifier = Letter   { Letter | '_' | digit }

 

35. Changes history

Changes_history =  'HISTORY' [ ':' ] { CR  created_updated } [ CR 'HISTORY' 'ENDED' ]

created_updated = ( 'CREATED' | 'UPDATED' ) '(' Integer '-' Integer [ '-' Integer ] ')' [ by_author ] [ version ] ':' single_record { ';' single_record } '.'

by_author = ',' 'BY' '"' text '"'

version = ',' ( 'VER' | 'VERSION' ) '"' text '"'

single_record = CR ( 'ADDED' | 'CHANGED' | 'FIXED' ) ':' item_changed { ',' item_changed }

item_changed = '"' text '"' | Identifier

 

36. SQL Insert

SQL_insert =  'INSERT' [ 'INTO' ] Identifier ( ',' 'BY' Expression | fields_insert )

fields_insert = ',' Identifier '=' SQL_operand { ',' Identifier '=' SQL_operand }

 

37. SQL Update

SQL_update =  'UPDATE' Identifier [ Identifier join_tables ',' ] 'SET' fields_update [ [ ',' ] 'WHERE' SQL_expression ]

join_tables = ',' 'JOIN' Identifier Identifier 'ON' SQL_expression { ',' 'JOIN' Identifier Identifier 'ON' SQL_expression }

fields_update = Identifier '=' SQL_operand { ',' Identifier '=' SQL_operand }

 

38. SQL Delete

SQL_delete =  'DELETE' Identifier [ Identifier join_tables ',' ] [ ',' 'WHERE' SQL_expression ]

join_tables = ',' 'JOIN' Identifier Identifier 'ON' SQL_expression { ',' 'JOIN' Identifier Identifier 'ON' SQL_expression }
 

 

39. SQL Select

SQL_select =  'SELECT' [ 'TOP' Expression ',' ] [ 'DISTINCT' ',' ] 'FROM' Identifier [ Identifier join_select ] '(' sql_fields ')' [ ',' 'WHERE''WHERE' SQL_expression ] [ ',' 'GROUP' 'BY' '(' Identifier { ',' Identifier } ')' ] [ ',' 'ORDER' 'BY' '(' Identifier [ 'DESC' ] { ',' Identifier [ 'DESC' ] ')' ]

sql_fields = SQL_operand [ 'AS' Identifier ] { ',' SQL_operand [ 'AS' Identifier ] }

join_select = ','  [ 'OUTER' ] [ 'LEFT' ] 'JOIN' Identifier Identifier 'ON' SQL_expression { ',' [ 'OUTER' ] [ 'LEFT' ] 'JOIN' Identifier Identifier 'ON' SQL_expression }
 

 

40. SQL Expression

SQL_expression =  expr_item { ( 'AND' | 'OR' ) expr_item

expr_item = ( unary_item | binary_item )

unary_item = [ 'NOT' ] ( SQL_operand | '(' SQL_expression ')' )

binary_item = SQL_operand ( is_null | in_list | between_range | compare_op SQL_operand )

is_null = 'IS' ['NOT' ] 'NULL'

in_list = [ 'NOT' ] 'IN' '(' SQL_operand { ',' SQL_operand } ')'

between_range = 'BETWEEN' SQL_operand 'AND' SQL_operand

compare_op = '<=' | '>=' | '<' | '> | '==' | '<>'

 

41. SQL Operand

SQL_operand =  ( [ Identifier '.' ] Identifier
|  '{' [ '@' ] Expression '}'
| Expression
| '''' text ''''
| 'SQL' '(' Expression ')'
| [ 'NOT' ] 'EXISTS' '(' SELECT_operator ')' )

 

Content

     Introduction

My current plans

My old plans from 2016

    What is done already

Content

 

 

(C) 2016-2018, Vladimir Kladov

 

 


Home