Add if statements
This commit is contained in:
parent
b100bdd8c1
commit
59921871bb
|
|
@ -175,6 +175,9 @@ Return
|
||||||
function F return Boolean is
|
function F return Boolean is
|
||||||
begin
|
begin
|
||||||
return True;
|
return True;
|
||||||
|
return A : My_Rec := (F => 1) do
|
||||||
|
null;
|
||||||
|
end return;
|
||||||
end F;
|
end F;
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
@ -203,7 +206,43 @@ end F;
|
||||||
(factor
|
(factor
|
||||||
(primary
|
(primary
|
||||||
(name
|
(name
|
||||||
(identifier)))))))))))))
|
(identifier)))))))))))
|
||||||
|
(statement
|
||||||
|
(compound_statement
|
||||||
|
(extended_return_statement
|
||||||
|
(extended_return_object_declaration
|
||||||
|
(identifier)
|
||||||
|
(return_subtype_indication
|
||||||
|
(subtype_indication
|
||||||
|
(name
|
||||||
|
(identifier))))
|
||||||
|
(assign_value
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(aggregate
|
||||||
|
(record_aggregate
|
||||||
|
(record_component_association_list
|
||||||
|
(record_component_association
|
||||||
|
(component_choice_list
|
||||||
|
(selector_name
|
||||||
|
(identifier)))
|
||||||
|
(assoc_expression
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(numeric_literal))))))))))))))))))))
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement))))))))))
|
||||||
(name
|
(name
|
||||||
(identifier))))))
|
(identifier))))))
|
||||||
|
|
||||||
|
|
@ -361,3 +400,227 @@ end;
|
||||||
(factor
|
(factor
|
||||||
(primary
|
(primary
|
||||||
(numeric_literal))))))))))))))))))))))))))))
|
(numeric_literal))))))))))))))))))))))))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
if statement
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
procedure P is
|
||||||
|
begin
|
||||||
|
if A = 0 or else B = 1 then
|
||||||
|
declare
|
||||||
|
begin
|
||||||
|
null;
|
||||||
|
end;
|
||||||
|
elsif A = 1 then
|
||||||
|
declare
|
||||||
|
C : Integer;
|
||||||
|
begin
|
||||||
|
null;
|
||||||
|
exception
|
||||||
|
when Constraint_Error => null;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
null;
|
||||||
|
end;
|
||||||
|
end if;
|
||||||
|
end P;
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(compilation
|
||||||
|
(compilation_unit
|
||||||
|
(proper_body
|
||||||
|
(subprogram_body
|
||||||
|
(subprogram_specification
|
||||||
|
(procedure_specification
|
||||||
|
(name
|
||||||
|
(identifier))))
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(compound_statement
|
||||||
|
(if_statement
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(name
|
||||||
|
(identifier))))))
|
||||||
|
(relational_operator)
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(numeric_literal))))))
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(name
|
||||||
|
(identifier))))))
|
||||||
|
(relational_operator)
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(numeric_literal)))))))
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(compound_statement
|
||||||
|
(block_statement
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement)))))))))
|
||||||
|
(elsif_statement_item
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(name
|
||||||
|
(identifier))))))
|
||||||
|
(relational_operator)
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(numeric_literal)))))))
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(compound_statement
|
||||||
|
(block_statement
|
||||||
|
(non_empty_declarative_part
|
||||||
|
(declarative_item_pragma
|
||||||
|
(object_declaration
|
||||||
|
(defining_identifier_list
|
||||||
|
(identifier))
|
||||||
|
(subtype_indication
|
||||||
|
(name
|
||||||
|
(identifier))))))
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement))))
|
||||||
|
(exception_handler_list
|
||||||
|
(exception_handler
|
||||||
|
(exception_choice_list
|
||||||
|
(exception_choice
|
||||||
|
(name
|
||||||
|
(identifier))))
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement))))))))))))
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(compound_statement
|
||||||
|
(block_statement
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement))))))))))))))
|
||||||
|
(name
|
||||||
|
(identifier))))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Case statement
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
procedure P is
|
||||||
|
begin
|
||||||
|
case Func(A => 1) is
|
||||||
|
when '1' .. '2' =>
|
||||||
|
null;
|
||||||
|
when '3' | '4' =>
|
||||||
|
null;
|
||||||
|
end case;
|
||||||
|
end;
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(compilation
|
||||||
|
(compilation_unit
|
||||||
|
(proper_body
|
||||||
|
(subprogram_body
|
||||||
|
(subprogram_specification
|
||||||
|
(procedure_specification
|
||||||
|
(name
|
||||||
|
(identifier))))
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(compound_statement
|
||||||
|
(case_statement
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(name
|
||||||
|
(function_call
|
||||||
|
(name
|
||||||
|
(identifier))
|
||||||
|
(actual_parameter_part
|
||||||
|
(parameter_association
|
||||||
|
(component_choice_list
|
||||||
|
(selector_name
|
||||||
|
(identifier)))
|
||||||
|
(assoc_expression
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(numeric_literal))))))))))))))))))
|
||||||
|
(case_statement_alternative
|
||||||
|
(discrete_choice_list
|
||||||
|
(discrete_choice
|
||||||
|
(range_g
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(character_literal)))))
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(character_literal))))))))
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement)))))
|
||||||
|
(case_statement_alternative
|
||||||
|
(discrete_choice_list
|
||||||
|
(discrete_choice
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(character_literal))))))))
|
||||||
|
(discrete_choice
|
||||||
|
(expression
|
||||||
|
(relation
|
||||||
|
(simple_expression
|
||||||
|
(term
|
||||||
|
(factor
|
||||||
|
(primary
|
||||||
|
(character_literal)))))))))
|
||||||
|
(sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(simple_statement
|
||||||
|
(null_statement))))))))))))))
|
||||||
|
|
|
||||||
82
grammar.js
82
grammar.js
|
|
@ -107,6 +107,7 @@ module.exports = grammar({
|
||||||
|
|
||||||
[$.function_call, $.procedure_call_statement],
|
[$.function_call, $.procedure_call_statement],
|
||||||
[$.function_call, $.name],
|
[$.function_call, $.name],
|
||||||
|
[$.selector_name, $.primary],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
@ -184,7 +185,7 @@ module.exports = grammar({
|
||||||
),
|
),
|
||||||
selector_name: $ => choice(
|
selector_name: $ => choice(
|
||||||
$._direct_name,
|
$._direct_name,
|
||||||
$.character_literal,
|
// $.character_literal, // was in ada-mode, moved to primary instead
|
||||||
// reservedWord('others'),
|
// reservedWord('others'),
|
||||||
),
|
),
|
||||||
attribute_reference: $ => choice(
|
attribute_reference: $ => choice(
|
||||||
|
|
@ -513,6 +514,7 @@ module.exports = grammar({
|
||||||
$.aggregate,
|
$.aggregate,
|
||||||
$.name,
|
$.name,
|
||||||
$.string_literal, // ada-mode puts this in name instead
|
$.string_literal, // ada-mode puts this in name instead
|
||||||
|
$.character_literal,
|
||||||
// $.allocator,
|
// $.allocator,
|
||||||
),
|
),
|
||||||
access_type_definition: $ => seq(
|
access_type_definition: $ => seq(
|
||||||
|
|
@ -1522,15 +1524,62 @@ module.exports = grammar({
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
compound_statement: $ => choice(
|
compound_statement: $ => choice(
|
||||||
// $.if_statement,
|
$.if_statement,
|
||||||
// $.case_statement,
|
$.case_statement,
|
||||||
$.loop_statement,
|
$.loop_statement,
|
||||||
// $.block_statement,
|
$.block_statement,
|
||||||
// $.extended_return_statement,
|
$.extended_return_statement,
|
||||||
// $.parallel_block_statement,
|
// $.parallel_block_statement,
|
||||||
// $.accept_statement,
|
// $.accept_statement,
|
||||||
// $.select_statement,
|
// $.select_statement,
|
||||||
),
|
),
|
||||||
|
case_statement_alternative: $ => seq(
|
||||||
|
reservedWord('when'),
|
||||||
|
$.discrete_choice_list,
|
||||||
|
'=>',
|
||||||
|
$.sequence_of_statements,
|
||||||
|
),
|
||||||
|
case_statement: $ => seq(
|
||||||
|
reservedWord('case'),
|
||||||
|
$.expression,
|
||||||
|
reservedWord('is'),
|
||||||
|
repeat1($.case_statement_alternative),
|
||||||
|
reservedWord('end'),
|
||||||
|
reservedWord('case'),
|
||||||
|
';',
|
||||||
|
),
|
||||||
|
block_statement: $ => seq(
|
||||||
|
optional($.loop_label),
|
||||||
|
optional(seq(
|
||||||
|
reservedWord('declare'),
|
||||||
|
optional($.non_empty_declarative_part),
|
||||||
|
)),
|
||||||
|
reservedWord('begin'),
|
||||||
|
$.handled_sequence_of_statements,
|
||||||
|
reservedWord('end'),
|
||||||
|
optional($.identifier),
|
||||||
|
';',
|
||||||
|
),
|
||||||
|
if_statement: $ => seq(
|
||||||
|
reservedWord('if'),
|
||||||
|
field('condition', $.expression),
|
||||||
|
reservedWord('then'),
|
||||||
|
$.sequence_of_statements,
|
||||||
|
repeat($.elsif_statement_item),
|
||||||
|
optional(seq(
|
||||||
|
reservedWord('else'),
|
||||||
|
$.sequence_of_statements,
|
||||||
|
)),
|
||||||
|
reservedWord('end'),
|
||||||
|
reservedWord('if'),
|
||||||
|
';',
|
||||||
|
),
|
||||||
|
elsif_statement_item: $ => seq(
|
||||||
|
reservedWord('elsif'),
|
||||||
|
field('condition', $.expression),
|
||||||
|
reservedWord('then'),
|
||||||
|
$.sequence_of_statements,
|
||||||
|
),
|
||||||
exit_statement: $ => seq(
|
exit_statement: $ => seq(
|
||||||
reservedWord('exit'),
|
reservedWord('exit'),
|
||||||
optional($.name),
|
optional($.name),
|
||||||
|
|
@ -1565,6 +1614,29 @@ module.exports = grammar({
|
||||||
optional($.expression),
|
optional($.expression),
|
||||||
';',
|
';',
|
||||||
),
|
),
|
||||||
|
extended_return_statement: $ => seq(
|
||||||
|
reservedWord('return'),
|
||||||
|
$.extended_return_object_declaration,
|
||||||
|
optional(seq(
|
||||||
|
reservedWord('do'),
|
||||||
|
$.handled_sequence_of_statements,
|
||||||
|
reservedWord('end'),
|
||||||
|
reservedWord('return'),
|
||||||
|
)),
|
||||||
|
';',
|
||||||
|
),
|
||||||
|
extended_return_object_declaration: $ => seq(
|
||||||
|
$.identifier,
|
||||||
|
':',
|
||||||
|
optional(reservedWord('aliased')),
|
||||||
|
optional(reservedWord('constant')),
|
||||||
|
$.return_subtype_indication,
|
||||||
|
optional($.assign_value),
|
||||||
|
),
|
||||||
|
return_subtype_indication: $ => choice(
|
||||||
|
$.subtype_indication,
|
||||||
|
$.access_definition,
|
||||||
|
),
|
||||||
procedure_call_statement: $ => seq(
|
procedure_call_statement: $ => seq(
|
||||||
$.name,
|
$.name,
|
||||||
optional($.actual_parameter_part),
|
optional($.actual_parameter_part),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user