Previous: Complete programs, Up: Grammar [Contents][Index]
The following is the complete grammar for the coNCePTuaL language. The EBNF productions appear here in the order that they were presented in the rest of the chapter.
<expr> | ::= | <cond_expr> |
<cond_expr> | ::= |
<add_expr> IF <rel_expr>
OTHERWISE <add_expr> |
<add_expr> | ::= | <mult_expr> |
| | <add_expr> ‘+’ <mult_expr> | |
| | <add_expr> ‘-’ <mult_expr> | |
| | <add_expr> ‘|’ <mult_expr> | |
| |
<add_expr> XOR
<mult_expr> |
<power_expr> | ::= | <primary_expr> [‘**’ <unary_expr>] |
<unary_expr> | ::= | <power_expr> |
| | <unary_operator> <unary_expr> |
<unary_operator> | ::= | ‘+’ | ‘-’ | NOT |
<primary_expr> | ::= | ‘(’ <expr> ‘)’ |
| | <ident> | |
| | <integer> | |
| | <func_name> ‘(’ <enumerated_exprs> ‘)’ | |
| | REAL
‘(’
<expr> ‘)’ |
<enumerated_exprs> | ::= | <expr> [‘,’ <expr>]* |
<aggr_expr> | ::= | [
EACH ] <expr> |
| | THE
<expr> |
|
| | THE
<aggr_func> [ AND THE <aggr_func>]*
[ OF
[ THE ]]
<expr> |
|
| | A HISTOGRAM OF [ THE ]
<expr> |
<aggr_func> | ::= | [
ARITHMETIC ] MEAN |
HARMONIC MEAN | GEOMETRIC MEAN |
MEDIAN | STANDARD DEVIATION |
VARIANCE | MEDIAN ABSOLUTE
DEVIATION |
SUM | MINIMUM | MAXIMUM |
FINAL
|
<expr> PERCENTILE |
<rel_expr> | ::= | <rel_disj_expr> |
<rel_disj_expr> | ::= | [ <rel_disj_expr> ‘\/’] <rel_conj_expr> |
<rel_conj_expr> | ::= | [ <rel_conj_expr> ‘/\’] <rel_primary_expr> |
<rel_primary_expr> | ::= | <eq_expr> |
| | ‘(’ <rel_expr> ‘)’ |
<range> | ::= | ‘{’ <expr> [‘,’ <expr>]* [‘, ... ,’ <expr>] ‘}’ |
| | ‘{’ <expr> [ FOR EACH
<ident>
IN
<range> [‘,’ <range>]* ]+ |
|
[ WHERE
<rel_expr>] ‘}’ |
<restricted_ident> | ::= |
<ident> SUCH THAT
<rel_expr> |
<source_task> | ::= |
ALL TASKS |
| |
ALL TASKS <ident> |
|
| | TASK
<expr> |
|
| |
TASKS
<restricted_ident> |
|
| | TASK
GROUP
<ident> |
|
| |
TASKS <range> [,
<range>]* |
<target_tasks> | ::= | ALL OTHER TASKS |
| | TASK
<expr> |
|
| |
TASKS
<restricted_ident> |
|
| | TASK
GROUP
<ident> |
|
| |
TASKS <range> [,
<range>]* |
<item_count> | ::= | A |
AN |
<expr> |
<item_size> | ::= | <empty> |
| | <expr> <data_multiplier> | |
| | <data_type> SIZED |
<data_multiplier> | ::= | BIT |
BYTE |
HALFWORD | WORD | INTEGER |
DOUBLEWORD | QUADWORD | PAGE | KILOBYTE
|
MEGABYTE | GIGABYTE |
<data_type> | ::= | BYTE
|
HALFWORD | WORD | INTEGER |
DOUBLEWORD | QUADWORD | PAGE |
<message_alignment> | ::= | <data_type> |
| | <expr> <data_multiplier> |
<receive_stmt> | ::= | <target_tasks> |
[ ASYNCHRONOUSLY ]
RECEIVE |
||
<message_spec> | ||
FROM
<source_task> |
<wait_stmt> | ::= | <source_task> |
AWAITS
COMPLETION |
<mcast_stmt> | ::= | <source_task> |
[ ASYNCHRONOUSLY ]
MULTICASTS |
||
<message_spec> | ||
TO
<target_tasks> |
<sync_stmt> | ::= | <source_task> |
SYNCHRONIZES |
<string_or_log_comment> | ::= | <string> |
| |
THE VALUE OF <string> |
<output_stmt> | ::= | <source_task> |
OUTPUTS |
||
<expr> | <string_or_log_comment> | ||
[ AND
<expr> |
<string_or_log_comment>]* |
<log_stmt> | ::= | <source_task> |
LOGS |
||
<aggr_expr> AS
<string_or_log_comment> |
||
[ AND
<aggr_expr> AS
<string_or_log_comment>]* |
<flush_stmt> | ::= | <source_task> |
COMPUTES
AGGREGATES |
<reset_stmt> | ::= | <source_task> |
RESETS ITS
COUNTERS |
<store_stmt> | ::= | <source_task> |
STORES ITS
COUNTERS |
<restore_stmt> | ::= | <source_task> |
RESTORES ITS
COUNTERS |
<complex_stmt> | ::= | <simple_stmt>
[ THEN
<complex_stmt>] |
<let_binding> | ::= |
<ident>
BE |
expr | |
| | <source_task> | |||
| |
A RANDOM TASK [
<random_task_constraints>] |
<random_task_constraints> | ::= |
OTHER THAN <expr> |
| |
LESS THAN <expr> [ BUT NOT
<expr>] |
|
| |
GREATER THAN <expr> [ BUT NOT
<expr>] |
|
| | IN
‘[’
<expr> ‘,’ <expr> ‘]’
[ BUT
NOT
<expr>] |
<if_stmt> | ::= | IF
<rel_expr> |
THEN
<simple_stmt> |
||
[
OTHERWISE
<simple_stmt>] |
<assert_stmt> | ::= |
ASSERT THAT <string> |
WITH
<rel_expr> |
<delay_stmt> | ::= | <source_task> |
SLEEPS | COMPUTES |
||
FOR
<expr> <time_unit> |
<time_unit> | ::= |
MICROSECONDS | MILLISECONDS | SECONDS |
MINUTES | HOURS | DAYS |
<touch_stmt> | ::= | <source_task> |
TOUCHES |
||
[
<expr> <data_type> OF ] |
||
AN
<item_size> MEMORY REGION |
||
[
<expr> TIMES ] |
||
[
WITH STRIDE <expr>
<data_type> | WITH RANDOM
STRIDE ] |
<touch_buffer_stmt> | ::= | <source_task> |
TOUCHES |
||
ALL MESSAGE
BUFFERS |
||
| MESSAGE BUFFER
<expr> |
||
| THE CURRENT MESSAGE
BUFFER |
<processor_stmt> | ::= | <source_task> |
IS ASSIGNED TO |
||
PROCESSOR <expr> |
A RANDOM PROCESSOR |
<backend_stmt> | ::= | <source_task> |
BACKEND EXECUTES |
||
<expr> | <string> | ||
[ AND
<expr> | <string>]* |
<version_decl> | ::= | REQUIRE LANGUAGE
VERSION
<string> |
<param_decl> | ::= | <ident> |
IS
<string> |
||
AND COMES FROM
<string>
OR
<string> |
||
WITH DEFAULT <expr> |
<backend_decl> | ::= | THE BACKEND
DECLARES
<string> |
<program> | ::= | ( <version_decl> | <param_decl> | <backend_decl> [‘.’])* |
( <top_level_complex_stmt> [‘.’])+ |
<top_level_complex_stmt> | ::= | <complex_stmt> |
The primitives <ident>, <string>, and <integer> are described in Primitives.
Previous: Complete programs, Up: Grammar [Contents][Index]