342 lines
15 KiB
BNF
342 lines
15 KiB
BNF
ABS = "abs" .
|
|
ABSTRACT = "abstract" .
|
|
ACOS = "acos" .
|
|
AGGREGATE = "aggregate" .
|
|
ALIAS = "alias" .
|
|
AND = "and" .
|
|
ANDOR = "andor" .
|
|
ARRAY = "array" .
|
|
AS = "as" .
|
|
ASIN = "asin" .
|
|
ATAN = "atan" .
|
|
BAG = "bag" .
|
|
BASED_ON = "based_on" .
|
|
BEGIN = "begin" .
|
|
BINARY = "binary" .
|
|
BLENGTH = "blength" .
|
|
BOOLEAN = "boolean" .
|
|
BY = "by" .
|
|
CASE = "case" .
|
|
CONSTANT = "constant" .
|
|
CONST_E = "const_e" .
|
|
COS = "cos" .
|
|
DERIVE = "derive" .
|
|
DIV = "div" .
|
|
ELSE = "else" .
|
|
END = "end" .
|
|
END_ALIAS = "end_alias" .
|
|
END_CASE = "end_case" .
|
|
END_CONSTANT = "end_constant" .
|
|
END_ENTITY = "end_entity" .
|
|
END_FUNCTION = "end_function" .
|
|
END_IF = "end_if" .
|
|
END_LOCAL = "end_local" .
|
|
END_PROCEDURE = "end_procedure" .
|
|
END_REPEAT = "end_repeat" .
|
|
END_RULE = "end_rule" .
|
|
END_SCHEMA = "end_schema" .
|
|
END_SUBTYPE_CONSTRAINT = "end_subtype_constraint" .
|
|
END_TYPE = "end_type" .
|
|
ENTITY = "entity" .
|
|
ENUMERATION = "enumeration" .
|
|
ESCAPE = "escape" .
|
|
EXISTS = "exists" .
|
|
EXTENSIBLE = "extensible" .
|
|
EXP = "exp" .
|
|
FALSE = "false" .
|
|
FIXED = "fixed" .
|
|
FOR = "for" .
|
|
FORMAT = "format" .
|
|
FROM = "from" .
|
|
FUNCTION = "function" .
|
|
GENERIC = "generic" .
|
|
GENERIC_ENTITY = "generic_entity" .
|
|
HIBOUND = "hibound" .
|
|
HIINDEX = "hiindex" .
|
|
IF = "if" .
|
|
IN = "in" .
|
|
INSERT = "insert" .
|
|
INTEGER = "integer" .
|
|
INVERSE = "inverse" .
|
|
LENGTH = "length" .
|
|
LIKE = "like" .
|
|
LIST = "list" .
|
|
LOBOUND = "lobound" .
|
|
LOCAL = "local" .
|
|
LOG = "log" .
|
|
LOG10 = "log10" .
|
|
LOG2 = "log2" .
|
|
LOGICAL = "logical" .
|
|
LOINDEX = "loindex" .
|
|
MOD = "mod" .
|
|
NOT = "not" .
|
|
NUMBER = "number" .
|
|
NVL = "nvl" .
|
|
ODD = "odd" .
|
|
OF = "of" .
|
|
ONEOF = "oneof" .
|
|
OPTIONAL = "optional" .
|
|
OR = "or" .
|
|
OTHERWISE = "otherwise" .
|
|
PI = "pi" .
|
|
PROCEDURE = "procedure" .
|
|
QUERY = "query" .
|
|
REAL = "real" .
|
|
REFERENCE = "reference" .
|
|
REMOVE = "remove" .
|
|
RENAMED = "renamed" .
|
|
REPEAT = "repeat" .
|
|
RETURN = "return" .
|
|
ROLESOF = "rolesof" .
|
|
RULE = "rule" .
|
|
SCHEMA = "schema" .
|
|
SELECT = "select" .
|
|
SELF = "self" .
|
|
SET = "set" .
|
|
SIN = "sin" .
|
|
SIZEOF = "sizeof" .
|
|
SKIP = "skip" .
|
|
SQRT = "sqrt" .
|
|
STRING = "string" .
|
|
SUBTYPE = "subtype" .
|
|
SUBTYPE_CONSTRAINT = "subtype_constraint" .
|
|
SUPERTYPE = "supertype" .
|
|
TAN = "tan" .
|
|
THEN = "then" .
|
|
TO = "to" .
|
|
TOTAL_OVER = "total_over" .
|
|
TRUE = "true" .
|
|
TYPE = "type" .
|
|
TYPEOF = "typeof" .
|
|
UNIQUE = "unique" .
|
|
UNKNOWN = "unknown" .
|
|
UNTIL = "until" .
|
|
USE = "use" .
|
|
USEDIN = "usedin" .
|
|
VALUE = "value" .
|
|
VALUE_IN = "value_in" .
|
|
VALUE_UNIQUE = "value_unique" .
|
|
VAR = "var" .
|
|
WHERE = "where" .
|
|
WHILE = "while" .
|
|
WITH = "with" .
|
|
XOR = "xor" .
|
|
bit = "0" | "1" .
|
|
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .
|
|
digits = digit { digit } .
|
|
encoded_character = octet octet octet octet .
|
|
hex_digit = digit | "a" | "b" | "c" | "d" | "e" | "f" .
|
|
letter = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" .
|
|
lparen_then_not_lparen_star = "(" { "(" } not_lparen_star { not_lparen_star } .
|
|
not_lparen_star = not_paren_star | ")" .
|
|
not_paren_star = letter | digit | not_paren_star_special .
|
|
not_paren_star_quote_special = "!" | "#" | "$" | "%" | "&" | "+" | "," | "-" | "." | "/" | ":" | ";" | "<" | "=" | ">" | "?" | "@" | "[" | "\\" | "]" | "^" | "_" | "{" | "|" | "}" | "~" .
|
|
not_paren_star_special = not_paren_star_quote_special | "\"\"" .
|
|
not_quote = not_paren_star_quote_special | letter | digit | "(" | ")" | "*" .
|
|
not_rparen_star = not_paren_star | "(" .
|
|
octet = hex_digit hex_digit .
|
|
special = not_paren_star_quote_special | "(" | ")" | "*" | "\"\"" .
|
|
not_rparen_star_then_rparen = not_rparen_star { not_rparen_star } ")" { ")" } .
|
|
binary_literal = "%" bit { bit } .
|
|
encoded_string_literal = "\"" encoded_character { encoded_character } "\"" .
|
|
integer_literal = digits .
|
|
real_literal = ( digits "." [ digits ] [ "e" [ sign ] digits ] ) | integer_literal .
|
|
simple_id = letter { letter | digit | "_" } .
|
|
simple_string_literal = "'" { ( "'" "'" ) | not_quote } "'" .
|
|
embedded_remark = "(*" [ remark_tag ] { ( not_paren_star { not_paren_star } ) | lparen_then_not_lparen_star | ( "*" { "*" } ) | not_rparen_star_then_rparen | embedded_remark } "*)" .
|
|
remark = embedded_remark | tail_remark .
|
|
remark_tag = "\"" remark_ref { "." remark_ref } "\"" .
|
|
remark_ref = attribute_ref | constant_ref | entity_ref | enumeration_ref | function_ref | parameter_ref | procedure_ref | rule_label_ref | rule_ref | schema_ref | subtype_constraint_ref | type_label_ref | type_ref | variable_ref .
|
|
tail_remark = "--" [ remark_tag ] .
|
|
attribute_ref = attribute_id .
|
|
constant_ref = constant_id .
|
|
entity_ref = entity_id .
|
|
enumeration_ref = enumeration_id .
|
|
function_ref = function_id .
|
|
parameter_ref = parameter_id .
|
|
procedure_ref = procedure_id .
|
|
rule_label_ref = rule_label_id .
|
|
rule_ref = rule_id .
|
|
schema_ref = schema_id .
|
|
subtype_constraint_ref = subtype_constraint_id .
|
|
type_label_ref = type_label_id .
|
|
type_ref = type_id .
|
|
variable_ref = variable_id .
|
|
abstract_entity_declaration = ABSTRACT .
|
|
abstract_supertype = ABSTRACT SUPERTYPE ";" .
|
|
abstract_supertype_declaration = ABSTRACT SUPERTYPE [ subtype_constraint ] .
|
|
actual_parameter_list = "(" [ parameter ] { "," parameter } ")" .
|
|
add_like_op = "+" | "-" | OR | XOR .
|
|
aggregate_initializer = "[" [ element { "," element } ] "]" .
|
|
aggregate_source = simple_expression .
|
|
aggregate_type = AGGREGATE [ ":" type_label ] OF parameter_type .
|
|
aggregation_types = array_type | bag_type | list_type | set_type .
|
|
algorithm_head = { declaration } [ constant_decl ] [ local_decl ] .
|
|
alias_stmt = ALIAS variable_id FOR general_ref { qualifier } ";" stmt { stmt } END_ALIAS ";" .
|
|
array_type = ARRAY bound_spec OF [ OPTIONAL ] [ UNIQUE ] instantiable_type .
|
|
assignment_stmt = general_ref { qualifier } ":=" expression ";" .
|
|
attribute_decl = redeclared_attribute | attribute_id .
|
|
attribute_id = simple_id .
|
|
attribute_qualifier = "." attribute_ref .
|
|
bag_type = BAG [ bound_spec ] OF instantiable_type .
|
|
binary_type = BINARY [ width_spec ] .
|
|
boolean_type = BOOLEAN .
|
|
bound_1 = numeric_expression .
|
|
bound_2 = numeric_expression .
|
|
bound_spec = "[" bound_1 ":" bound_2 "]" .
|
|
built_in_constant = CONST_E | PI | SELF | "?" .
|
|
built_in_function = ABS | ACOS | ASIN | ATAN | BLENGTH | COS | EXISTS | EXP | FORMAT | HIBOUND | HIINDEX | LENGTH | LOBOUND | LOINDEX | LOG | LOG2 | LOG10 | NVL | ODD | ROLESOF | SIN | SIZEOF | SQRT | TAN | TYPEOF | USEDIN | VALUE | VALUE_IN | VALUE_UNIQUE .
|
|
built_in_procedure = INSERT | REMOVE .
|
|
case_action = case_label { "," case_label } ":" stmt .
|
|
case_label = expression .
|
|
case_stmt = CASE selector OF { case_action } [ OTHERWISE ":" stmt ] END_CASE ";" .
|
|
compound_stmt = BEGIN stmt { stmt } END ";" .
|
|
concrete_types = aggregation_types | simple_types | type_ref .
|
|
constant_body = constant_id ":" instantiable_type ":=" expression ";" .
|
|
constant_decl = CONSTANT constant_body { constant_body } END_CONSTANT ";" .
|
|
constant_factor = built_in_constant | constant_ref .
|
|
constant_id = simple_id .
|
|
constructed_types = enumeration_type | select_type .
|
|
declaration = entity_decl | function_decl | procedure_decl | subtype_constraint_decl | type_decl .
|
|
derived_attr = attribute_decl ":" parameter_type ":=" expression ";" .
|
|
derive_clause = DERIVE derived_attr { derived_attr } .
|
|
domain_rule = [ rule_label_id ":" ] expression .
|
|
element = expression [ ":" repetition ] .
|
|
entity_body = { explicit_attr } [ derive_clause ] [ inverse_clause ] [ unique_clause ] [ where_clause ] .
|
|
entity_constructor = entity_ref "(" [ expression { "," expression } ] ")" .
|
|
entity_decl = entity_head entity_body END_ENTITY ";" .
|
|
entity_head = ENTITY entity_id subsuper ";" .
|
|
entity_id = simple_id .
|
|
enumeration_extension = BASED_ON type_ref [ WITH enumeration_items ] .
|
|
enumeration_id = simple_id .
|
|
enumeration_items = "(" enumeration_id { "," enumeration_id } ")" .
|
|
enumeration_reference = [ type_ref "." ] enumeration_ref .
|
|
enumeration_type = [ EXTENSIBLE ] ENUMERATION [ ( OF enumeration_items ) | enumeration_extension ] .
|
|
escape_stmt = ESCAPE ";" .
|
|
explicit_attr = attribute_decl { "," attribute_decl } ":" [ OPTIONAL ] parameter_type ";" .
|
|
expression = simple_expression [ rel_op_extended simple_expression ] .
|
|
factor = simple_factor [ "**" simple_factor ] .
|
|
formal_parameter = parameter_id { "," parameter_id } ":" parameter_type .
|
|
function_call = ( built_in_function | function_ref ) actual_parameter_list .
|
|
function_decl = function_head algorithm_head stmt { stmt } END_FUNCTION ";" .
|
|
function_head = FUNCTION function_id [ "(" formal_parameter { ";" formal_parameter } ")" ] ":" parameter_type ";" .
|
|
function_id = simple_id .
|
|
generalized_types = aggregate_type | general_aggregation_types | generic_entity_type | generic_type .
|
|
general_aggregation_types = general_array_type | general_bag_type | general_list_type | general_set_type .
|
|
general_array_type = ARRAY [ bound_spec ] OF [ OPTIONAL ] [ UNIQUE ] parameter_type .
|
|
general_bag_type = BAG [ bound_spec ] OF parameter_type .
|
|
general_list_type = LIST [ bound_spec ] OF [ UNIQUE ] parameter_type .
|
|
general_ref = parameter_ref | variable_ref .
|
|
general_set_type = SET [ bound_spec ] OF parameter_type .
|
|
generic_entity_type = GENERIC_ENTITY [ ":" type_label ] .
|
|
generic_type = GENERIC [ ":" type_label ] .
|
|
group_qualifier = "\\" entity_ref .
|
|
if_stmt = IF logical_expression THEN stmt { stmt } [ ELSE stmt { stmt } ] END_IF ";" .
|
|
increment = numeric_expression .
|
|
increment_control = variable_id ":=" bound_1 TO bound_2 [ BY increment ] .
|
|
index = numeric_expression .
|
|
index_1 = index .
|
|
index_2 = index .
|
|
index_qualifier = "[" index_1 [ ":" index_2 ] "]" .
|
|
instantiable_type = concrete_types | entity_ref .
|
|
integer_type = INTEGER .
|
|
interface_specification = reference_clause | use_clause .
|
|
interval = "{" interval_low interval_op interval_item interval_op interval_high "}" .
|
|
interval_high = simple_expression .
|
|
interval_item = simple_expression .
|
|
interval_low = simple_expression .
|
|
interval_op = "<=" | "<" .
|
|
inverse_attr = attribute_decl ":" [ ( SET | BAG ) [ bound_spec ] OF ] entity_ref FOR [ entity_ref "." ] attribute_ref ";" .
|
|
inverse_clause = INVERSE inverse_attr { inverse_attr } .
|
|
list_type = LIST [ bound_spec ] OF [ UNIQUE ] instantiable_type .
|
|
literal = binary_literal | logical_literal | real_literal | string_literal .
|
|
local_decl = LOCAL local_variable { local_variable } END_LOCAL ";" .
|
|
local_variable = variable_id { "," variable_id } ":" parameter_type [ ":=" expression ] ";" .
|
|
logical_expression = expression .
|
|
logical_literal = FALSE | TRUE | UNKNOWN .
|
|
logical_type = LOGICAL .
|
|
multiplication_like_op = "*" | "/" | DIV | MOD | AND | "||" .
|
|
named_types = entity_ref | type_ref .
|
|
named_type_or_rename = named_types [ AS ( entity_id | type_id ) ] .
|
|
null_stmt = ";" .
|
|
number_type = NUMBER .
|
|
numeric_expression = simple_expression .
|
|
one_of = ONEOF "(" supertype_expression { "," supertype_expression } ")" .
|
|
parameter = expression .
|
|
parameter_id = simple_id .
|
|
parameter_type = generalized_types | simple_types | named_types .
|
|
population = entity_ref .
|
|
precision_spec = numeric_expression .
|
|
primary = literal | ( qualifiable_factor { qualifier } ) .
|
|
procedure_call_stmt = ( built_in_procedure | procedure_ref ) actual_parameter_list ";" .
|
|
procedure_decl = procedure_head algorithm_head { stmt } END_PROCEDURE ";" .
|
|
procedure_head = PROCEDURE procedure_id [ "(" [ VAR ] formal_parameter { ";" [ VAR ] formal_parameter } ")" ] ";" .
|
|
procedure_id = simple_id .
|
|
qualifiable_factor = function_call | attribute_ref | constant_factor | general_ref | population .
|
|
qualified_attribute = SELF group_qualifier attribute_qualifier .
|
|
qualifier = attribute_qualifier | group_qualifier | index_qualifier .
|
|
query_expression = QUERY "(" variable_id "<*" aggregate_source "|" logical_expression ")" .
|
|
real_type = REAL [ "(" precision_spec ")" ] .
|
|
redeclared_attribute = qualified_attribute [ RENAMED attribute_id ] .
|
|
referenced_attribute = attribute_ref | qualified_attribute .
|
|
reference_clause = REFERENCE FROM schema_ref [ "(" resource_or_rename { "," resource_or_rename } ")" ] ";" .
|
|
rel_op = "<=" | ">=" | "<>" | "=" | ":<>:" | ":=:" | "<" | ">" .
|
|
rel_op_extended = rel_op | IN | LIKE .
|
|
rename_id = constant_id | entity_id | function_id | procedure_id | type_id .
|
|
repeat_control = [ increment_control ] [ while_control ] [ until_control ] .
|
|
repeat_stmt = REPEAT repeat_control ";" stmt { stmt } END_REPEAT ";" .
|
|
repetition = numeric_expression .
|
|
resource_or_rename = resource_ref [ AS rename_id ] .
|
|
resource_ref = constant_ref | entity_ref | function_ref | procedure_ref | type_ref .
|
|
return_stmt = RETURN [ "(" expression ")" ] ";" .
|
|
rule_decl = rule_head algorithm_head { stmt } where_clause END_RULE ";" .
|
|
rule_head = RULE rule_id FOR "(" entity_ref { "," entity_ref } ")" ";" .
|
|
rule_id = simple_id .
|
|
rule_label_id = simple_id .
|
|
schema_body = { interface_specification } [ constant_decl ] { declaration | rule_decl } .
|
|
schema_decl = SCHEMA schema_id [ schema_version_id ] ";" schema_body END_SCHEMA ";" .
|
|
schema_id = simple_id .
|
|
schema_version_id = string_literal .
|
|
selector = expression .
|
|
select_extension = BASED_ON type_ref [ WITH select_list ] .
|
|
select_list = "(" named_types { "," named_types } ")" .
|
|
select_type = [ EXTENSIBLE [ GENERIC_ENTITY ] ] SELECT [ select_list | select_extension ] .
|
|
set_type = SET [ bound_spec ] OF instantiable_type .
|
|
sign = "+" | "-" .
|
|
simple_expression = term { add_like_op term } .
|
|
simple_factor = aggregate_initializer | interval | query_expression | ( [ unary_op ] ( "(" expression ")" | primary ) ) | entity_constructor | enumeration_reference .
|
|
simple_types = binary_type | boolean_type | integer_type | logical_type | number_type | real_type | string_type .
|
|
skip_stmt = SKIP ";" .
|
|
stmt = alias_stmt | assignment_stmt | case_stmt | compound_stmt | escape_stmt | if_stmt | null_stmt | procedure_call_stmt | repeat_stmt | return_stmt | skip_stmt .
|
|
string_literal = simple_string_literal | encoded_string_literal .
|
|
string_type = STRING [ width_spec ] .
|
|
subsuper = [ supertype_constraint ] [ subtype_declaration ] .
|
|
subtype_constraint = OF "(" supertype_expression ")" .
|
|
subtype_constraint_body = [ abstract_supertype ] [ total_over ] [ supertype_expression ";" ] .
|
|
subtype_constraint_decl = subtype_constraint_head subtype_constraint_body END_SUBTYPE_CONSTRAINT ";" .
|
|
subtype_constraint_head = SUBTYPE_CONSTRAINT subtype_constraint_id FOR entity_ref ";" .
|
|
subtype_constraint_id = simple_id .
|
|
subtype_declaration = SUBTYPE OF "(" entity_ref { "," entity_ref } ")" .
|
|
supertype_constraint = abstract_supertype_declaration | abstract_entity_declaration | supertype_rule .
|
|
supertype_expression = supertype_factor { ANDOR supertype_factor } .
|
|
supertype_factor = supertype_term { AND supertype_term } .
|
|
supertype_rule = SUPERTYPE subtype_constraint .
|
|
supertype_term = one_of | "(" supertype_expression ")" | entity_ref .
|
|
syntax = schema_decl { schema_decl } .
|
|
term = factor { multiplication_like_op factor } .
|
|
total_over = TOTAL_OVER "(" entity_ref { "," entity_ref } ")" ";" .
|
|
type_decl = TYPE type_id "=" underlying_type ";" [ where_clause ] END_TYPE ";" .
|
|
type_id = simple_id .
|
|
type_label = type_label_id | type_label_ref .
|
|
type_label_id = simple_id .
|
|
unary_op = "+" | "-" | NOT .
|
|
underlying_type = constructed_types | concrete_types .
|
|
unique_clause = UNIQUE unique_rule ";" { unique_rule ";" } .
|
|
unique_rule = [ rule_label_id ":" ] referenced_attribute { "," referenced_attribute } .
|
|
until_control = UNTIL logical_expression .
|
|
use_clause = USE FROM schema_ref [ "(" named_type_or_rename { "," named_type_or_rename } ")" ] ";" .
|
|
variable_id = simple_id .
|
|
where_clause = WHERE domain_rule ";" { domain_rule ";" } .
|
|
while_control = WHILE logical_expression .
|
|
width = numeric_expression .
|
|
width_spec = "(" width ")" [ FIXED ] . |