@@ -727,7 +727,7 @@ parenthesized_expression: "(" expression ")"
727727 | constant
728728
729729// B.3.2
730- statement_list : _ statement+
730+ statement_list : _ statement+ end_of_statement_list_label ?
731731
732732_ statement: " ;"
733733 | assignment_statement
@@ -745,6 +745,8 @@ _statement: ";"
745745 | repeat_statement
746746 | exit_statement
747747 | continue_statement
748+ | jmp_statement
749+ | labeled_statement
748750
749751
750752// B.3.2.1
@@ -779,7 +781,29 @@ case_statement: "CASE"i expression "OF"i case_elements [ else_clause ] "END_CASE
779781
780782case_elements : case_element +
781783
782- case_element : case_list " :" [ statement_list ]
784+ case_element_statement_list : _ case_element_statement+
785+
786+ // Specifically exclude labeled statements as they are aliased to case
787+ // statements themselves:
788+ _ case_element_statement: " ;"
789+ | assignment_statement
790+ | no_op_statement
791+ | set_statement
792+ | reset_statement
793+ | reference_assignment_statement
794+ | return_statement
795+ | chained_function_call_statement
796+ | function_call_statement
797+ | if_statement
798+ | case_statement
799+ | for_statement
800+ | while_statement
801+ | repeat_statement
802+ | exit_statement
803+ | continue_statement
804+ | jmp_statement
805+
806+ case_element : case_list " :" [ case_element_statement_list ]
783807
784808case_list : case_list_element ( " ," case_list_element )*
785809
@@ -804,3 +828,11 @@ repeat_statement: "REPEAT"i statement_list "UNTIL"i expression "END_REPEAT"i ";"
804828exit_statement .1 : " EXIT" i " ;" +
805829
806830continue_statement .1 : " CONTINUE" i " ;" +
831+
832+ LABEL : IDENTIFIER
833+ labeled_statement .1 : LABEL " :" _ statement
834+
835+ // End-of-statement list may have a label associated with it:
836+ end_of_statement_list_label : LABEL " :"
837+
838+ jmp_statement : " JMP" i LABEL " ;" +
0 commit comments