|
|
|
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 |
(C) 2016-2018, Vladimir Kladov
|
Home
|