<commit_before><chapter id="statementblocks">
    <title>Blocks and control structures</title>
    
    <para>Method, attribute and class bodies contain procedural code that is executed 
    when the method or attribute is invoked, or when the class is instantiated. The 
    code contains expressions and control directives and is organized using blocks and 
    control structures.</para>
    
    <section id="blocks">
        <title>Blocks and statements</title>
            
        <para>A <emphasis>block</emphasis> is list of semicolon-delimited statements, 
        method, attribute and local declarations, and control structures, surrounded 
        by braces. Some blocks end in a control directive. The statements, local 
        specifiers and control structures are executed sequentially.</para>

        <programlisting>Block := "{" DeclarationOrStatement* DirectiveStatement? "}"</programlisting>
        
        <programlisting>DeclarationOrStatement := Declaration | Statement</programlisting>

        <para>A <emphasis>statement</emphasis> is an assignment or specification, an 
        invocation of a method, an instantiation of a class, a control structure or a 
        control directive.</para>

        <programlisting>Statement := ExpressionStatement | Specification | ControlStructure</programlisting>
        <commit_msg>local initialization<commit_after><chapter id="statementblocks">
    <title>Blocks and control structures</title>
    
    <para>Method, attribute and class bodies contain procedural code that is executed 
    when the method or attribute is invoked, or when the class is instantiated. The 
    code contains expressions and control directives and is organized using blocks and 
    control structures.</para>
    
    <section id="blocks">
        <title>Blocks and statements</title>
            
        <para>A <emphasis>block</emphasis> is list of semicolon-delimited statements, 
        method, attribute and local declarations, and control structures, surrounded 
        by braces. Some blocks end in a control directive. The statements, local 
        specifiers and control structures are executed sequentially.</para>

        <programlisting>Block := "{" DeclarationOrStatement* DirectiveStatement? "}"</programlisting>
        
        <programlisting>DeclarationOrStatement := Declaration | Statement</programlisting>

        <para>A <emphasis>statement</emphasis> is an assignment or specification, an 
        invocation of a method, an instantiation of a class, a control structure or a 
        control directive.</para>

        <programlisting>Statement := ExpressionStatement | Specification | ControlStructure</programlisting>
        
        <para>A simple attribute may not be used in an expression until its value has
        been explicitly specified or initialized. The Ceylon compiler guarantees this
        by evaluating all conditional branches between the declaration of a simple 
        attribute and its first use in an expression. Each conditional branch must
        specify or assign a value to the simple attribute.</para>
        
{'fraction_non_alphanumeric': 0.06464, 'fraction_numerical': 0.0, 'mean_word_length': 3.3057851239669422, 'pattern_counts': {'":': 0, '<': 49, '<?xml version=': 0, '>': 49, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3603046', 'n_tokens_mistral': 729, 'n_tokens_neox': 657, 'n_words': 297}