Add if statements
This commit is contained in:
parent
b100bdd8c1
commit
59921871bb
|
|
@ -175,6 +175,9 @@ Return
|
|||
function F return Boolean is
|
||||
begin
|
||||
return True;
|
||||
return A : My_Rec := (F => 1) do
|
||||
null;
|
||||
end return;
|
||||
end F;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
@ -203,7 +206,43 @@ end F;
|
|||
(factor
|
||||
(primary
|
||||
(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
|
||||
(identifier))))))
|
||||
|
||||
|
|
@ -361,3 +400,227 @@ end;
|
|||
(factor
|
||||
(primary
|
||||
(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, $.name],
|
||||
[$.selector_name, $.primary],
|
||||
|
||||
],
|
||||
|
||||
|
|
@ -184,7 +185,7 @@ module.exports = grammar({
|
|||
),
|
||||
selector_name: $ => choice(
|
||||
$._direct_name,
|
||||
$.character_literal,
|
||||
// $.character_literal, // was in ada-mode, moved to primary instead
|
||||
// reservedWord('others'),
|
||||
),
|
||||
attribute_reference: $ => choice(
|
||||
|
|
@ -513,6 +514,7 @@ module.exports = grammar({
|
|||
$.aggregate,
|
||||
$.name,
|
||||
$.string_literal, // ada-mode puts this in name instead
|
||||
$.character_literal,
|
||||
// $.allocator,
|
||||
),
|
||||
access_type_definition: $ => seq(
|
||||
|
|
@ -1522,15 +1524,62 @@ module.exports = grammar({
|
|||
),
|
||||
),
|
||||
compound_statement: $ => choice(
|
||||
// $.if_statement,
|
||||
// $.case_statement,
|
||||
$.if_statement,
|
||||
$.case_statement,
|
||||
$.loop_statement,
|
||||
// $.block_statement,
|
||||
// $.extended_return_statement,
|
||||
$.block_statement,
|
||||
$.extended_return_statement,
|
||||
// $.parallel_block_statement,
|
||||
// $.accept_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(
|
||||
reservedWord('exit'),
|
||||
optional($.name),
|
||||
|
|
@ -1565,6 +1614,29 @@ module.exports = grammar({
|
|||
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(
|
||||
$.name,
|
||||
optional($.actual_parameter_part),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user