Skip to content

Latest commit

 

History

History
1892 lines (1847 loc) · 105 KB

theoryNotes.md

File metadata and controls

1892 lines (1847 loc) · 105 KB

Edge Cases Causing Ambiguity

Since we do not have scoping implemented, we allow any identifier to be a type name as well (since locally scoped identifiers may shadow type names). However, this causes the following cases of ambiguity:

  • a unary_expression of the type sizeof(char). Either the brackets are parsed with the sizeof token, or they become part of a primary_expression with the identifier named char.
  • a cast_expression of the type ((__uint16_t) ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8))). The (__uint16_t) may be parsed as a postfix_expression and the expression in brackets following as an argument to a function call.
  • a declaration of the type sqlite3_mutex *pMutex;. It may be interpreted as an expression_statement consisting of a multiplication. This causes ambiguity in the parsing of compound_statements.

Type signatures of the parses generated by each of the above ambiguities can be found at the end.

Tentative Theory v3 (10 Aug)

We address the issue brought up by the attempt to express typedef semantics in this framework.

We use the same definitions for $\mu, $, %$, and $\gamma$, but with the additional semantics that

  • an identifier bound by a $\mu$-rule has global scope – it can be used by any other rule in the grammar.
  • if a bound identifier is under a $*$, or a sequence of multiple identical expressions, it is bound to a list of the strings that each copy matches (this is inspired by Lean4's TSepArray semantics).

These features help us to define C's typedef in this framework, with scoping. We do it as follows:

declaration        <- μ("typedef" type_spec $(ident, n) ";" / ...,
                        [type_name :-> %n / γ(type_name)])
compound_statement <- μ("{" declaration* statement* "}",
                        [type_name :-> !%n ; γ(type_name)])

Note that if n did not have global scope, we would (a) have to copy the entire RHS of declaration into the rule for compound_statement, and (b) not be able to refer to the bound names at the end of the compound statement.

Note on 14 Aug: This can be done more simply and elegantly by using nonterminals as scopes in reference.

typedef_nont <- "typedef" type_specifier $(ident, n) ";"
declaration <- μ(typedef_nont / ... ,
                 [type_name :-> %typedef_nont:n / γ(type_name)])
compound_statement <- μ("{" declaration* statement* "}",
                        [type_name :-> !%declaration:typedef_nont:n ; γ(type_name)])

Issues/Questions

  • !%n, when n is a list, has the semantics of !n1 !n2 .... How to generalise this to other combinators applie to lists? Is this hacky?
  • %n refers in the RHS of declaration to a single name, but in the RHS of compound_statement to a list of names, since declaration is under a * there. Is this acceptable?

Tentative Theory v2 (07 Aug)

In order to avoid involving a function with an infinite input space (which we don't provide the infrastructure to define), we take inspiration from Lean4's macro_rules command and allow expressions in grammar to refer back to subexpressions they match with.

Definitions

In essence, we define four new combinators:

  • $\mu : \text{PEG} \times \text{NT} \times \text{PEG} \to \text{PEG}$. An expression $\mu(E, T, E')$ has the semantics that after $E$ is parsed, the production rule associated with $T$ takes $E'$ as its new RHS.
  • $$ : \text{PEG} \times \Sigma* \to \text{PEG}$. This is a sort of antiquotation combinator. If the expression $$(E_1, n)$ occurs in the first argument of $\mu$, then $n$ can be used to refer to the string of terminals associated with $E$ in the parse.
  • $% : \Sigma* \to \text{PEG}$. This complements the $$$ combinator. If $%n$ occurs in the third argument of $\mu$, it indicates the string of terminals associated with the expression bound to $n$ by $$$ in the first argument. [Note on 14 Aug: Use the nonterminal in which the identifier is bound as a kind of scope (see the example of C above).]
  • $\gamma : \text{NT} \to \text{PEG}$. This gives access to the production associated with a nonterminal before the modification.

Issues/Questions

  • What if we want to refer to the string associated with a subexpression of the one bound by $$$ (see the C example below)?
  • (related but may not have the same solution) Should we allow any nonterminal to refer to a name bound anywhere else in the grammar?

Describing C and Lean4

C

Consider the typedef statement. We define the expansion of the declaration nonterminal as follows:

declaration <- μ("typedef" type_specifier $(ident, n) ";",
                 type_name_token,
                 %n / γ(type_name_token))

This has the effect of adding the identifier referred to by n to the beginning of the RHS of type_name_token.

However, the problem of ending a scope is more difficult. We know that if we want type_name_token to not include foo anymore, say, we can simply let $E'$ be

!("foo"); γ(t)

But at the end of a scope, we do not have access to the identifier that we want removed.

Note to self: this may be solvable by using $\mu$ in $E'$ itself, though potentially a bit cursed. Will hash this out.
We can do this by allowing multiple modifications within a single μ. Consider the following

declaration <- μ("typedef" type_specifier $(ident, n) ";",
                 {type_name_token :-> %n / γ(type_name_token),
                  compound_statement :-> μ(γ(compound_statement),
                                           {type_name_token :-> !(%n) γ(type_name_token)})})

Tentative Theory of Modifiable Grammar

We describe here a tentative way to define a modifiable (we avoid the term extensible) reformulation of PEG theory, in a way that retains its most useful properties.

Definitions

A modifiable grammar $\Gamma$ is defined as a tuple $(G, \mu, \Lambda)$, where

$$\mu : \text{AST} \to G \to G$$

and

$$\Lambda : \text{AST} \to \text{PEG}$$

Note that PEG here refers to the type of PEG expressions, constructed using nonterminals, terminals, and the combinators of sequence, repetition, lookahead and prioritised choice.

The ruleset $G$ is a set of production rules

$$G : \Sigma* \to \text{PEG}.$$

We define the domain to be $\Sigma*$ so as to allow any string to act as a nonterminal.

Some production rules have the additional semantics that whenever their expansion is successfully used to parse a string (giving an AST $A$ as output), we use $\mu$ to modify the grammar

$$G' = \mu(A, G).$$

$\mu$ can have one of two behaviors: it can delete a nonterminal

$$\mu(A, G) = \lambda P \implies \begin{cases} !. & P = P_j \\ G(P) & P \neq P_j, \end{cases}$$

where $P_j$ may depend on $A$, or it can add an expression to the production rule associated with a nonterminal

$$\mu(A, G) = \lambda P \implies \begin{cases} \Lambda(A) / G(P) & P = P_j \\ G(P) & P \neq P_j. \end{cases}$$

$\Lambda$ as defined above is a function from ASTs to PEG expressions, with the additional constraint that it can only reduce tree structure (the result tree must be isomorphic, either to the input tree, or to one of its subtrees at some depth).

Rationale

The $\Lambda$ function is the one that does the actual "lifting" of expressions from the program to the grammar. It is constrained to reduce tree structure so as to ensure that its running time is linear in the number of symbols in the input; if it was allowed to arbitrarily blow up the tree, we could not place bounds on parsing time.

As it is, we can now claim (?) that the parsing will not exceed linear time, as the processing time for a program with $n$ symbols has increased by at most $\mathcal{O}(n)$ operations (the time it takes to run $\Lambda$).

Issues/Questions

  • In the above we describe the functions $\mu, \Lambda$ by their signatures, but we do not give a structural way to define them. If we allow arbitrary functions for $\mu$ and $\Lambda$, we will not be able to reason about (nor prove anything) about the class of grammars we define: e.g. how do we know that $\mu$ doesn't require us to solve the halting problem for deciding how to change the grammar?
  • It's unclear wether we want $\Lambda : \text{AST} \to \text{PEG}$ or vice-versa, $\Lambda : \text{PEG} \to \text{AST}$. Morally we want the former, but it is not clear how we'd define this for arbitrary $AST$s. The latter allows us to know precisely what combinators we want to expose on the grammar.
  • To address the above two points, we would ideally want to define extensions to $\text{PEG}$ (i.e. the meta-grammar) that allow us to construct these operators. For example, an operator $\rho : { /, *, ! } \to \text{AST}$ that allows us to reflect the $\text{PEG}$ combinators in the grammar. How we'd define $\mu$ is still unclear.

Describing C and Lean4

C

We know that typedef statements are declarations. So we let the production rule defined as

declaration <- declaration_specifiers init_declarator_list ';'

have the modifying semantics described above, and define $\mu$ to be of the second type (adding an expression to a nonterminal).
Then we need to specify only $\Lambda$ and $P_j$. $\Lambda$ simply extracts the identifier from the AST; for example, applying it on

void (*foo)(int)

returns foo. Thus the tree structure is reduced.
$P_j$ is constant (independent of $A$), and is always type_name_token.

Lean4

We can consider the case of statements of the form

syntax num <|> (arith op num) <|> "(" arith ")" : arith

Here again, we only need $\mu$ to carry out operations of the second type. We define $P_j$ to be extracted from the category after the :, and $\Lambda$ is a straightforward node-by-node isomorphism from Lean combinators (<|>, seq, literals) to PEG combinators (prioritised choice, sequencing, terminals). This preserves tree structure, and so is valid.

Type Signatures

For unary_expressions, an example of the ambiguity is

(choice
 («unary_expressionSizeof(_)»
  "sizeof"
  "("
  (type_name__ (specifier_qualifier_list_ (specifier_qualifier_ (type_specifierChar "char"))) [])
  ")")
 (unary_expressionSizeof_
  "sizeof"
  (unary_expression_
   (postfix_expression_
    («primary_expression(_)»
     "("
     («expression_,,»
      [(assignment_expression_
        (conditional_expression_
         (logical_or_expression_
          (logical_and_expression_
           (inclusive_or_expression_
            (exclusive_or_expression_
             (and_expression_
              (equality_expression_
               (relational_expression_
                (shift_expression_
                 (additive_expression_
                  (multiplicative_expression_
                   (cast_expression_
                    (unary_expression_ (postfix_expression_ (primary_expression__4 "char"))))))))))))))))])
     ")")))))

for the expression sizeof(char).

For cast_expressions, an example is

(choice
 (cast_expression_
  (unary_expression_
   («postfix_expression_(_)»
    (postfix_expression_
     («primary_expression(_)»
      "("
      («expression_,,»
       [(assignment_expression_
         (conditional_expression_
          (logical_or_expression_
           (logical_and_expression_
            (inclusive_or_expression_
             (exclusive_or_expression_
              (and_expression_
               (equality_expression_
                (relational_expression_
                 (shift_expression_
                  (additive_expression_
                   (multiplicative_expression_
                    (cast_expression_
                     (unary_expression_
                      (postfix_expression_
                       (primary_expression__1 (type_name_token__uint16_t "__uint16_t")))))))))))))))))])
      ")"))
    "("
    («argument_expression_list_,,»
     [(assignment_expression_
       (conditional_expression_
        (logical_or_expression_
         (logical_and_expression_
          («inclusive_or_expression_|_»
           (inclusive_or_expression_
            (exclusive_or_expression_
             (and_expression_
              (equality_expression_
               (relational_expression_
                (shift_expression_
                 (additive_expression_
                  (multiplicative_expression_
                   (cast_expression_
                    (unary_expression_
                     (postfix_expression_
                      («primary_expression(_)»
                       "("
                       («expression_,,»
                        [(assignment_expression_
                          (conditional_expression_
                           (logical_or_expression_
                            (logical_and_expression_
                             (inclusive_or_expression_
                              (exclusive_or_expression_
                               («and_expression_&_»
                                (and_expression_
                                 (equality_expression_
                                  (relational_expression_
                                   (shift_expression_
                                    (additive_expression_
                                     (multiplicative_expression_
                                      (cast_expression_
                                       (unary_expression_
                                        (postfix_expression_
                                         («primary_expression(_)»
                                          "("
                                          («expression_,,»
                                           [(assignment_expression_
                                             (conditional_expression_
                                              (logical_or_expression_
                                               (logical_and_expression_
                                                (inclusive_or_expression_
                                                 (exclusive_or_expression_
                                                  (and_expression_
                                                   (equality_expression_
                                                    (relational_expression_
                                                     («shift_expression_>>_»
                                                      (shift_expression_
                                                       (additive_expression_
                                                        (multiplicative_expression_
                                                         (cast_expression_
                                                          (unary_expression_
                                                           (postfix_expression_
                                                            («primary_expression(_)»
                                                             "("
                                                             («expression_,,»
                                                              [(assignment_expression_
                                                                (conditional_expression_
                                                                 (logical_or_expression_
                                                                  (logical_and_expression_
                                                                   (inclusive_or_expression_
                                                                    (exclusive_or_expression_
                                                                     (and_expression_
                                                                      (equality_expression_
                                                                       (relational_expression_
                                                                        (shift_expression_
                                                                         (additive_expression_
                                                                          (multiplicative_expression_
                                                                           (cast_expression_
                                                                            (unary_expression_
                                                                             (postfix_expression_
                                                                              (primary_expression_
                                                                               `__bsx))))))))))))))))])
                                                             ")")))))))
                                                      ">>"
                                                      (additive_expression_
                                                       (multiplicative_expression_
                                                        (cast_expression_
                                                         (unary_expression_
                                                          (postfix_expression_
                                                           (primary_expression__2
                                                            (extended_num___
                                                             (num "8")
                                                             [(arith_type_specs "")])))))))))))))))))])
                                          ")"))))))))))
                                "&"
                                (equality_expression_
                                 (relational_expression_
                                  (shift_expression_
                                   (additive_expression_
                                    (multiplicative_expression_
                                     (cast_expression_
                                      (unary_expression_
                                       (postfix_expression_
                                        (primary_expression__2
                                         (extended_num___ (num "0xff") [(arith_type_specs "")])))))))))))))))))])
                       ")"))))))))))))
           "|"
           (exclusive_or_expression_
            (and_expression_
             (equality_expression_
              (relational_expression_
               (shift_expression_
                (additive_expression_
                 (multiplicative_expression_
                  (cast_expression_
                   (unary_expression_
                    (postfix_expression_
                     («primary_expression(_)»
                      "("
                      («expression_,,»
                       [(assignment_expression_
                         (conditional_expression_
                          (logical_or_expression_
                           (logical_and_expression_
                            (inclusive_or_expression_
                             (exclusive_or_expression_
                              (and_expression_
                               (equality_expression_
                                (relational_expression_
                                 («shift_expression_<<_»
                                  (shift_expression_
                                   (additive_expression_
                                    (multiplicative_expression_
                                     (cast_expression_
                                      (unary_expression_
                                       (postfix_expression_
                                        («primary_expression(_)»
                                         "("
                                         («expression_,,»
                                          [(assignment_expression_
                                            (conditional_expression_
                                             (logical_or_expression_
                                              (logical_and_expression_
                                               (inclusive_or_expression_
                                                (exclusive_or_expression_
                                                 («and_expression_&_»
                                                  (and_expression_
                                                   (equality_expression_
                                                    (relational_expression_
                                                     (shift_expression_
                                                      (additive_expression_
                                                       (multiplicative_expression_
                                                        (cast_expression_
                                                         (unary_expression_
                                                          (postfix_expression_
                                                           («primary_expression(_)»
                                                            "("
                                                            («expression_,,»
                                                             [(assignment_expression_
                                                               (conditional_expression_
                                                                (logical_or_expression_
                                                                 (logical_and_expression_
                                                                  (inclusive_or_expression_
                                                                   (exclusive_or_expression_
                                                                    (and_expression_
                                                                     (equality_expression_
                                                                      (relational_expression_
                                                                       (shift_expression_
                                                                        (additive_expression_
                                                                         (multiplicative_expression_
                                                                          (cast_expression_
                                                                           (unary_expression_
                                                                            (postfix_expression_
                                                                             (primary_expression_
                                                                              `__bsx))))))))))))))))])
                                                            ")"))))))))))
                                                  "&"
                                                  (equality_expression_
                                                   (relational_expression_
                                                    (shift_expression_
                                                     (additive_expression_
                                                      (multiplicative_expression_
                                                       (cast_expression_
                                                        (unary_expression_
                                                         (postfix_expression_
                                                          (primary_expression__2
                                                           (extended_num___
                                                            (num "0xff")
                                                            [(arith_type_specs "")])))))))))))))))))])
                                         ")")))))))
                                  "<<"
                                  (additive_expression_
                                   (multiplicative_expression_
                                    (cast_expression_
                                     (unary_expression_
                                      (postfix_expression_
                                       (primary_expression__2
                                        (extended_num___ (num "8") [(arith_type_specs "")])))))))))))))))))])
                      ")"))))))))))))))))])
    ")")))
 («cast_expression(_)_»
  "("
  (type_name__
   (specifier_qualifier_list_ (specifier_qualifier_ (type_specifier__2 (type_name_token__uint16_t "__uint16_t"))))
   [])
  ")"
  (cast_expression_
   (unary_expression_
    (postfix_expression_
     («primary_expression(_)»
      "("
      («expression_,,»
       [(assignment_expression_
         (conditional_expression_
          (logical_or_expression_
           (logical_and_expression_
            («inclusive_or_expression_|_»
             (inclusive_or_expression_
              (exclusive_or_expression_
               (and_expression_
                (equality_expression_
                 (relational_expression_
                  (shift_expression_
                   (additive_expression_
                    (multiplicative_expression_
                     (cast_expression_
                      (unary_expression_
                       (postfix_expression_
                        («primary_expression(_)»
                         "("
                         («expression_,,»
                          [(assignment_expression_
                            (conditional_expression_
                             (logical_or_expression_
                              (logical_and_expression_
                               (inclusive_or_expression_
                                (exclusive_or_expression_
                                 («and_expression_&_»
                                  (and_expression_
                                   (equality_expression_
                                    (relational_expression_
                                     (shift_expression_
                                      (additive_expression_
                                       (multiplicative_expression_
                                        (cast_expression_
                                         (unary_expression_
                                          (postfix_expression_
                                           («primary_expression(_)»
                                            "("
                                            («expression_,,»
                                             [(assignment_expression_
                                               (conditional_expression_
                                                (logical_or_expression_
                                                 (logical_and_expression_
                                                  (inclusive_or_expression_
                                                   (exclusive_or_expression_
                                                    (and_expression_
                                                     (equality_expression_
                                                      (relational_expression_
                                                       («shift_expression_>>_»
                                                        (shift_expression_
                                                         (additive_expression_
                                                          (multiplicative_expression_
                                                           (cast_expression_
                                                            (unary_expression_
                                                             (postfix_expression_
                                                              («primary_expression(_)»
                                                               "("
                                                               («expression_,,»
                                                                [(assignment_expression_
                                                                  (conditional_expression_
                                                                   (logical_or_expression_
                                                                    (logical_and_expression_
                                                                     (inclusive_or_expression_
                                                                      (exclusive_or_expression_
                                                                       (and_expression_
                                                                        (equality_expression_
                                                                         (relational_expression_
                                                                          (shift_expression_
                                                                           (additive_expression_
                                                                            (multiplicative_expression_
                                                                             (cast_expression_
                                                                              (unary_expression_
                                                                               (postfix_expression_
                                                                                (primary_expression_
                                                                                 `__bsx))))))))))))))))])
                                                               ")")))))))
                                                        ">>"
                                                        (additive_expression_
                                                         (multiplicative_expression_
                                                          (cast_expression_
                                                           (unary_expression_
                                                            (postfix_expression_
                                                             (primary_expression__2
                                                              (extended_num___
                                                               (num "8")
                                                               [(arith_type_specs "")])))))))))))))))))])
                                            ")"))))))))))
                                  "&"
                                  (equality_expression_
                                   (relational_expression_
                                    (shift_expression_
                                     (additive_expression_
                                      (multiplicative_expression_
                                       (cast_expression_
                                        (unary_expression_
                                         (postfix_expression_
                                          (primary_expression__2
                                           (extended_num___ (num "0xff") [(arith_type_specs "")])))))))))))))))))])
                         ")"))))))))))))
             "|"
             (exclusive_or_expression_
              (and_expression_
               (equality_expression_
                (relational_expression_
                 (shift_expression_
                  (additive_expression_
                   (multiplicative_expression_
                    (cast_expression_
                     (unary_expression_
                      (postfix_expression_
                       («primary_expression(_)»
                        "("
                        («expression_,,»
                         [(assignment_expression_
                           (conditional_expression_
                            (logical_or_expression_
                             (logical_and_expression_
                              (inclusive_or_expression_
                               (exclusive_or_expression_
                                (and_expression_
                                 (equality_expression_
                                  (relational_expression_
                                   («shift_expression_<<_»
                                    (shift_expression_
                                     (additive_expression_
                                      (multiplicative_expression_
                                       (cast_expression_
                                        (unary_expression_
                                         (postfix_expression_
                                          («primary_expression(_)»
                                           "("
                                           («expression_,,»
                                            [(assignment_expression_
                                              (conditional_expression_
                                               (logical_or_expression_
                                                (logical_and_expression_
                                                 (inclusive_or_expression_
                                                  (exclusive_or_expression_
                                                   («and_expression_&_»
                                                    (and_expression_
                                                     (equality_expression_
                                                      (relational_expression_
                                                       (shift_expression_
                                                        (additive_expression_
                                                         (multiplicative_expression_
                                                          (cast_expression_
                                                           (unary_expression_
                                                            (postfix_expression_
                                                             («primary_expression(_)»
                                                              "("
                                                              («expression_,,»
                                                               [(assignment_expression_
                                                                 (conditional_expression_
                                                                  (logical_or_expression_
                                                                   (logical_and_expression_
                                                                    (inclusive_or_expression_
                                                                     (exclusive_or_expression_
                                                                      (and_expression_
                                                                       (equality_expression_
                                                                        (relational_expression_
                                                                         (shift_expression_
                                                                          (additive_expression_
                                                                           (multiplicative_expression_
                                                                            (cast_expression_
                                                                             (unary_expression_
                                                                              (postfix_expression_
                                                                               (primary_expression_
                                                                                `__bsx))))))))))))))))])
                                                              ")"))))))))))
                                                    "&"
                                                    (equality_expression_
                                                     (relational_expression_
                                                      (shift_expression_
                                                       (additive_expression_
                                                        (multiplicative_expression_
                                                         (cast_expression_
                                                          (unary_expression_
                                                           (postfix_expression_
                                                            (primary_expression__2
                                                             (extended_num___
                                                              (num "0xff")
                                                              [(arith_type_specs "")])))))))))))))))))])
                                           ")")))))))
                                    "<<"
                                    (additive_expression_
                                     (multiplicative_expression_
                                      (cast_expression_
                                       (unary_expression_
                                        (postfix_expression_
                                         (primary_expression__2
                                          (extended_num___ (num "8") [(arith_type_specs "")])))))))))))))))))])
                        ")"))))))))))))))))])
      ")"))))))

for the expression ((__uint16_t) ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8))).

For compound_statements, an example is

(choice
 («compound_statement{__}»
  "{"
  (declaration_list_
   («declaration__;»
    (declaration_specifiers__1 (type_specifier__2 (type_name_tokenSqlite3_mutex "sqlite3_mutex")))
    [(«init_declarator_list_,,»
      [(«init_declarator_=_» (declarator__ [(«pointer*__» "*" [] [])] (direct_declarator_ `pMutex)) [])])]
    ";"))
  (statement_list__
   (statement__2 («expression_statement_;» [(«expression_,,» [])] ";"))
   (statement_list__
    (statement__3
     («selection_statementIf(_)_Else_»
      "if"
      "("
      («expression_,,»
       [(assignment_expression_
         (conditional_expression_
          («logical_or_expression_||_»
           (logical_or_expression_
            (logical_and_expression_
             (inclusive_or_expression_
              (exclusive_or_expression_
               (and_expression_
                (equality_expression_
                 («relational_expression_<_»
                  (relational_expression_
                   (shift_expression_
                    (additive_expression_
                     (multiplicative_expression_
                      (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `op))))))))
                  "<"
                  (shift_expression_
                   (additive_expression_
                    (multiplicative_expression_
                     (cast_expression_
                      (unary_expression_
                       (postfix_expression_ (primary_expression__2 (extended_num___ (num "0") [])))))))))))))))
           "||"
           (logical_and_expression_
            (inclusive_or_expression_
             (exclusive_or_expression_
              (and_expression_
               (equality_expression_
                («relational_expression_>=_»
                 (relational_expression_
                  (shift_expression_
                   (additive_expression_
                    (multiplicative_expression_
                     (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `op))))))))
                 ">="
                 (shift_expression_
                  (additive_expression_
                   (multiplicative_expression_
                    (cast_expression_
                     (unary_expression_
                      (postfix_expression_
                       («primary_expression(_)»
                        "("
                        («expression_,,»
                         [(assignment_expression_
                           (conditional_expression_
                            (logical_or_expression_
                             (logical_and_expression_
                              (inclusive_or_expression_
                               (exclusive_or_expression_
                                (and_expression_
                                 (equality_expression_
                                  (relational_expression_
                                   (shift_expression_
                                    (additive_expression_
                                     (multiplicative_expression_
                                      («cast_expression(_)_»
                                       "("
                                       (type_name__
                                        (specifier_qualifier_list_ (specifier_qualifier_ (type_specifierInt "int")))
                                        [])
                                       ")"
                                       (cast_expression_
                                        (unary_expression_
                                         (postfix_expression_
                                          («primary_expression(_)»
                                           "("
                                           («expression_,,»
                                            [(assignment_expression_
                                              (conditional_expression_
                                               (logical_or_expression_
                                                (logical_and_expression_
                                                 (inclusive_or_expression_
                                                  (exclusive_or_expression_
                                                   (and_expression_
                                                    (equality_expression_
                                                     (relational_expression_
                                                      (shift_expression_
                                                       (additive_expression_
                                                        («multiplicative_expression_/_»
                                                         (multiplicative_expression_
                                                          (cast_expression_
                                                           (unary_expressionSizeof_
                                                            "sizeof"
                                                            (unary_expression_
                                                             (postfix_expression_
                                                              («primary_expression(_)»
                                                               "("
                                                               («expression_,,»
                                                                [(assignment_expression_
                                                                  (conditional_expression_
                                                                   (logical_or_expression_
                                                                    (logical_and_expression_
                                                                     (inclusive_or_expression_
                                                                      (exclusive_or_expression_
                                                                       (and_expression_
                                                                        (equality_expression_
                                                                         (relational_expression_
                                                                          (shift_expression_
                                                                           (additive_expression_
                                                                            (multiplicative_expression_
                                                                             (cast_expression_
                                                                              (unary_expression_
                                                                               (postfix_expression_
                                                                                (primary_expression_
                                                                                 `sqlite3Stat.nowValue))))))))))))))))])
                                                               ")"))))))
                                                         "/"
                                                         (cast_expression_
                                                          (unary_expressionSizeof_
                                                           "sizeof"
                                                           (unary_expression_
                                                            (postfix_expression_
                                                             («primary_expression(_)»
                                                              "("
                                                              («expression_,,»
                                                               [(assignment_expression_
                                                                 (conditional_expression_
                                                                  (logical_or_expression_
                                                                   (logical_and_expression_
                                                                    (inclusive_or_expression_
                                                                     (exclusive_or_expression_
                                                                      (and_expression_
                                                                       (equality_expression_
                                                                        (relational_expression_
                                                                         (shift_expression_
                                                                          (additive_expression_
                                                                           (multiplicative_expression_
                                                                            (cast_expression_
                                                                             (unary_expression_
                                                                              («postfix_expression_[_]»
                                                                               (postfix_expression_
                                                                                (primary_expression_
                                                                                 `sqlite3Stat.nowValue))
                                                                               "["
                                                                               («expression_,,»
                                                                                [(assignment_expression_
                                                                                  (conditional_expression_
                                                                                   (logical_or_expression_
                                                                                    (logical_and_expression_
                                                                                     (inclusive_or_expression_
                                                                                      (exclusive_or_expression_
                                                                                       (and_expression_
                                                                                        (equality_expression_
                                                                                         (relational_expression_
                                                                                          (shift_expression_
                                                                                           (additive_expression_
                                                                                            (multiplicative_expression_
                                                                                             (cast_expression_
                                                                                              (unary_expression_
                                                                                               (postfix_expression_
                                                                                                (primary_expression__2
                                                                                                 (extended_num___
                                                                                                  (num "0")
                                                                                                  [(arith_type_specs
                                                                                                    "")])))))))))))))))))])
                                                                               "]")))))))))))))))])
                                                              ")")))))))))))))))))])
                                           ")")))))))))))))))))])
                        ")"))))))))))))))))])
      ")"
      (statement__1
       («compound_statement{_}»
        "{"
        (statement_list_
         (statement__5
          («jump_statementReturn_;»
           "return"
           («expression_,,»
            [(assignment_expression_
              (conditional_expression_
               (logical_or_expression_
                (logical_and_expression_
                 (inclusive_or_expression_
                  (exclusive_or_expression_
                   (and_expression_
                    (equality_expression_
                     (relational_expression_
                      (shift_expression_
                       (additive_expression_
                        (multiplicative_expression_
                         (cast_expression_
                          (unary_expression_
                           («postfix_expression_(_)»
                            (postfix_expression_ (primary_expression_ `sqlite3MisuseError))
                            "("
                            («argument_expression_list_,,»
                             [(assignment_expression_
                               (conditional_expression_
                                (logical_or_expression_
                                 (logical_and_expression_
                                  (inclusive_or_expression_
                                   (exclusive_or_expression_
                                    (and_expression_
                                     (equality_expression_
                                      (relational_expression_
                                       (shift_expression_
                                        (additive_expression_
                                         (multiplicative_expression_
                                          (cast_expression_
                                           (unary_expression_
                                            (postfix_expression_
                                             (primary_expression__2
                                              (extended_num___ (num "23373") [(arith_type_specs "")])))))))))))))))))])
                            ")")))))))))))))))])
           ";")))
        "}"))
      []))
    (statement_list__
     (statement__2
      («expression_statement_;»
       [(«expression_,,»
         [(assignment_expression___
           (unary_expression_ (postfix_expression_ (primary_expression_ `pMutex)))
           («assignment_operator=» "=")
           (assignment_expression_
            («conditional_expression_?_:_»
             (logical_or_expression_
              (logical_and_expression_
               (inclusive_or_expression_
                (exclusive_or_expression_
                 (and_expression_
                  (equality_expression_
                   (relational_expression_
                    (shift_expression_
                     (additive_expression_
                      (multiplicative_expression_
                       (cast_expression_
                        (unary_expression_
                         («postfix_expression_[_]»
                          (postfix_expression_ (primary_expression_ `statMutex))
                          "["
                          («expression_,,»
                           [(assignment_expression_
                             (conditional_expression_
                              (logical_or_expression_
                               (logical_and_expression_
                                (inclusive_or_expression_
                                 (exclusive_or_expression_
                                  (and_expression_
                                   (equality_expression_
                                    (relational_expression_
                                     (shift_expression_
                                      (additive_expression_
                                       (multiplicative_expression_
                                        (cast_expression_
                                         (unary_expression_
                                          (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                          "]")))))))))))))
             "?"
             («expression_,,»
              [(assignment_expression_
                (conditional_expression_
                 (logical_or_expression_
                  (logical_and_expression_
                   (inclusive_or_expression_
                    (exclusive_or_expression_
                     (and_expression_
                      (equality_expression_
                       (relational_expression_
                        (shift_expression_
                         (additive_expression_
                          (multiplicative_expression_
                           (cast_expression_
                            (unary_expression_
                             (choice
                              («postfix_expression_(_)»
                               (postfix_expression_ (primary_expression_ `sqlite3Pcache1Mutex))
                               "("
                               («argument_expression_list_,,» [])
                               ")")
                              («postfix_expression_()»
                               (postfix_expression_ (primary_expression_ `sqlite3Pcache1Mutex))
                               "("
                               ")"))))))))))))))))])
             ":"
             (conditional_expression_
              (logical_or_expression_
               (logical_and_expression_
                (inclusive_or_expression_
                 (exclusive_or_expression_
                  (and_expression_
                   (equality_expression_
                    (relational_expression_
                     (shift_expression_
                      (additive_expression_
                       (multiplicative_expression_
                        (cast_expression_
                         (unary_expression_
                          (choice
                           («postfix_expression_(_)»
                            (postfix_expression_ (primary_expression_ `sqlite3MallocMutex))
                            "("
                            («argument_expression_list_,,» [])
                            ")")
                           («postfix_expression_()»
                            (postfix_expression_ (primary_expression_ `sqlite3MallocMutex))
                            "("
                            ")"))))))))))))))))))])]
       ";"))
     (statement_list__
      (statement__2
       («expression_statement_;»
        [(«expression_,,»
          [(assignment_expression_
            (conditional_expression_
             (logical_or_expression_
              (logical_and_expression_
               (inclusive_or_expression_
                (exclusive_or_expression_
                 (and_expression_
                  (equality_expression_
                   (relational_expression_
                    (shift_expression_
                     (additive_expression_
                      (multiplicative_expression_
                       (cast_expression_
                        (unary_expression_
                         («postfix_expression_(_)»
                          (postfix_expression_ (primary_expression_ `sqlite3_mutex_enter))
                          "("
                          («argument_expression_list_,,»
                           [(assignment_expression_
                             (conditional_expression_
                              (logical_or_expression_
                               (logical_and_expression_
                                (inclusive_or_expression_
                                 (exclusive_or_expression_
                                  (and_expression_
                                   (equality_expression_
                                    (relational_expression_
                                     (shift_expression_
                                      (additive_expression_
                                       (multiplicative_expression_
                                        (cast_expression_
                                         (unary_expression_
                                          (postfix_expression_ (primary_expression_ `pMutex))))))))))))))))])
                          ")")))))))))))))))])]
        ";"))
      (statement_list__
       (statement__2
        («expression_statement_;»
         [(«expression_,,»
           [(assignment_expression___
             (unary_expression___1
              («unary_operator*» "*")
              (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `pCurrent)))))
             («assignment_operator=» "=")
             (assignment_expression_
              (conditional_expression_
               (logical_or_expression_
                (logical_and_expression_
                 (inclusive_or_expression_
                  (exclusive_or_expression_
                   (and_expression_
                    (equality_expression_
                     (relational_expression_
                      (shift_expression_
                       (additive_expression_
                        (multiplicative_expression_
                         (cast_expression_
                          (unary_expression_
                           («postfix_expression_[_]»
                            (postfix_expression_ (primary_expression_ `sqlite3Stat.nowValue))
                            "["
                            («expression_,,»
                             [(assignment_expression_
                               (conditional_expression_
                                (logical_or_expression_
                                 (logical_and_expression_
                                  (inclusive_or_expression_
                                   (exclusive_or_expression_
                                    (and_expression_
                                     (equality_expression_
                                      (relational_expression_
                                       (shift_expression_
                                        (additive_expression_
                                         (multiplicative_expression_
                                          (cast_expression_
                                           (unary_expression_
                                            (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                            "]"))))))))))))))))])]
         ";"))
       (statement_list__
        (statement__2
         («expression_statement_;»
          [(«expression_,,»
            [(assignment_expression___
              (unary_expression___1
               («unary_operator*» "*")
               (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `pHighwater)))))
              («assignment_operator=» "=")
              (assignment_expression_
               (conditional_expression_
                (logical_or_expression_
                 (logical_and_expression_
                  (inclusive_or_expression_
                   (exclusive_or_expression_
                    (and_expression_
                     (equality_expression_
                      (relational_expression_
                       (shift_expression_
                        (additive_expression_
                         (multiplicative_expression_
                          (cast_expression_
                           (unary_expression_
                            («postfix_expression_[_]»
                             (postfix_expression_ (primary_expression_ `sqlite3Stat.mxValue))
                             "["
                             («expression_,,»
                              [(assignment_expression_
                                (conditional_expression_
                                 (logical_or_expression_
                                  (logical_and_expression_
                                   (inclusive_or_expression_
                                    (exclusive_or_expression_
                                     (and_expression_
                                      (equality_expression_
                                       (relational_expression_
                                        (shift_expression_
                                         (additive_expression_
                                          (multiplicative_expression_
                                           (cast_expression_
                                            (unary_expression_
                                             (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                             "]"))))))))))))))))])]
          ";"))
        (statement_list__
         (statement__3
          («selection_statementIf(_)_Else_»
           "if"
           "("
           («expression_,,»
            [(assignment_expression_
              (conditional_expression_
               (logical_or_expression_
                (logical_and_expression_
                 (inclusive_or_expression_
                  (exclusive_or_expression_
                   (and_expression_
                    (equality_expression_
                     (relational_expression_
                      (shift_expression_
                       (additive_expression_
                        (multiplicative_expression_
                         (cast_expression_
                          (unary_expression_ (postfix_expression_ (primary_expression_ `resetFlag))))))))))))))))])
           ")"
           (statement__1
            («compound_statement{_}»
             "{"
             (statement_list_
              (statement__2
               («expression_statement_;»
                [(«expression_,,»
                  [(assignment_expression___
                    (unary_expression_
                     («postfix_expression_[_]»
                      (postfix_expression_ (primary_expression_ `sqlite3Stat.mxValue))
                      "["
                      («expression_,,»
                       [(assignment_expression_
                         (conditional_expression_
                          (logical_or_expression_
                           (logical_and_expression_
                            (inclusive_or_expression_
                             (exclusive_or_expression_
                              (and_expression_
                               (equality_expression_
                                (relational_expression_
                                 (shift_expression_
                                  (additive_expression_
                                   (multiplicative_expression_
                                    (cast_expression_
                                     (unary_expression_ (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                      "]"))
                    («assignment_operator=» "=")
                    (assignment_expression_
                     (conditional_expression_
                      (logical_or_expression_
                       (logical_and_expression_
                        (inclusive_or_expression_
                         (exclusive_or_expression_
                          (and_expression_
                           (equality_expression_
                            (relational_expression_
                             (shift_expression_
                              (additive_expression_
                               (multiplicative_expression_
                                (cast_expression_
                                 (unary_expression_
                                  («postfix_expression_[_]»
                                   (postfix_expression_ (primary_expression_ `sqlite3Stat.nowValue))
                                   "["
                                   («expression_,,»
                                    [(assignment_expression_
                                      (conditional_expression_
                                       (logical_or_expression_
                                        (logical_and_expression_
                                         (inclusive_or_expression_
                                          (exclusive_or_expression_
                                           (and_expression_
                                            (equality_expression_
                                             (relational_expression_
                                              (shift_expression_
                                               (additive_expression_
                                                (multiplicative_expression_
                                                 (cast_expression_
                                                  (unary_expression_
                                                   (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                                   "]"))))))))))))))))])]
                ";")))
             "}"))
           []))
         (statement_list__
          (statement__2
           («expression_statement_;»
            [(«expression_,,»
              [(assignment_expression_
                (conditional_expression_
                 (logical_or_expression_
                  (logical_and_expression_
                   (inclusive_or_expression_
                    (exclusive_or_expression_
                     (and_expression_
                      (equality_expression_
                       (relational_expression_
                        (shift_expression_
                         (additive_expression_
                          (multiplicative_expression_
                           (cast_expression_
                            (unary_expression_
                             («postfix_expression_(_)»
                              (postfix_expression_ (primary_expression_ `sqlite3_mutex_leave))
                              "("
                              («argument_expression_list_,,»
                               [(assignment_expression_
                                 (conditional_expression_
                                  (logical_or_expression_
                                   (logical_and_expression_
                                    (inclusive_or_expression_
                                     (exclusive_or_expression_
                                      (and_expression_
                                       (equality_expression_
                                        (relational_expression_
                                         (shift_expression_
                                          (additive_expression_
                                           (multiplicative_expression_
                                            (cast_expression_
                                             (unary_expression_
                                              (postfix_expression_ (primary_expression_ `pMutex))))))))))))))))])
                              ")")))))))))))))))])]
            ";"))
          (statement_list__
           (statement__2
            («expression_statement_;»
             [(«expression_,,»
               [(assignment_expression_
                 (conditional_expression_
                  (logical_or_expression_
                   (logical_and_expression_
                    (inclusive_or_expression_
                     (exclusive_or_expression_
                      (and_expression_
                       (equality_expression_
                        (relational_expression_
                         (shift_expression_
                          (additive_expression_
                           (multiplicative_expression_
                            («cast_expression(_)_»
                             "("
                             (type_name__
                              (specifier_qualifier_list_ (specifier_qualifier_ (type_specifierVoid "void")))
                              [])
                             ")"
                             (cast_expression_
                              (unary_expression_ (postfix_expression_ (primary_expression_ `pMutex)))))))))))))))))])]
             ";"))
           (statement_list_
            (statement__5
             («jump_statementReturn_;»
              "return"
              («expression_,,»
               [(assignment_expression_
                 (conditional_expression_
                  (logical_or_expression_
                   (logical_and_expression_
                    (inclusive_or_expression_
                     (exclusive_or_expression_
                      (and_expression_
                       (equality_expression_
                        (relational_expression_
                         (shift_expression_
                          (additive_expression_
                           (multiplicative_expression_
                            (cast_expression_
                             (unary_expression_
                              (postfix_expression_
                               (primary_expression__2
                                (extended_num___ (num "0") [(arith_type_specs "")])))))))))))))))))])
              ";"))))))))))))
  "}")
 («compound_statement{_}»
  "{"
  (statement_list__
   (statement__2
    («expression_statement_;»
     [(«expression_,,»
       [(assignment_expression_
         (conditional_expression_
          (logical_or_expression_
           (logical_and_expression_
            (inclusive_or_expression_
             (exclusive_or_expression_
              (and_expression_
               (equality_expression_
                (relational_expression_
                 (shift_expression_
                  (additive_expression_
                   («multiplicative_expression_*_»
                    (multiplicative_expression_
                     (cast_expression_
                      (unary_expression_
                       (postfix_expression_ (primary_expression__1 (type_name_tokenSqlite3_mutex "sqlite3_mutex"))))))
                    "*"
                    (cast_expression_
                     (unary_expression_ (postfix_expression_ (primary_expression_ `pMutex))))))))))))))))])]
     ";"))
   (statement_list__
    (statement__2 («expression_statement_;» [(«expression_,,» [])] ";"))
    (statement_list__
     (statement__3
      («selection_statementIf(_)_Else_»
       "if"
       "("
       («expression_,,»
        [(assignment_expression_
          (conditional_expression_
           («logical_or_expression_||_»
            (logical_or_expression_
             (logical_and_expression_
              (inclusive_or_expression_
               (exclusive_or_expression_
                (and_expression_
                 (equality_expression_
                  («relational_expression_<_»
                   (relational_expression_
                    (shift_expression_
                     (additive_expression_
                      (multiplicative_expression_
                       (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `op))))))))
                   "<"
                   (shift_expression_
                    (additive_expression_
                     (multiplicative_expression_
                      (cast_expression_
                       (unary_expression_
                        (postfix_expression_ (primary_expression__2 (extended_num___ (num "0") [])))))))))))))))
            "||"
            (logical_and_expression_
             (inclusive_or_expression_
              (exclusive_or_expression_
               (and_expression_
                (equality_expression_
                 («relational_expression_>=_»
                  (relational_expression_
                   (shift_expression_
                    (additive_expression_
                     (multiplicative_expression_
                      (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `op))))))))
                  ">="
                  (shift_expression_
                   (additive_expression_
                    (multiplicative_expression_
                     (cast_expression_
                      (unary_expression_
                       (postfix_expression_
                        («primary_expression(_)»
                         "("
                         («expression_,,»
                          [(assignment_expression_
                            (conditional_expression_
                             (logical_or_expression_
                              (logical_and_expression_
                               (inclusive_or_expression_
                                (exclusive_or_expression_
                                 (and_expression_
                                  (equality_expression_
                                   (relational_expression_
                                    (shift_expression_
                                     (additive_expression_
                                      (multiplicative_expression_
                                       («cast_expression(_)_»
                                        "("
                                        (type_name__
                                         (specifier_qualifier_list_ (specifier_qualifier_ (type_specifierInt "int")))
                                         [])
                                        ")"
                                        (cast_expression_
                                         (unary_expression_
                                          (postfix_expression_
                                           («primary_expression(_)»
                                            "("
                                            («expression_,,»
                                             [(assignment_expression_
                                               (conditional_expression_
                                                (logical_or_expression_
                                                 (logical_and_expression_
                                                  (inclusive_or_expression_
                                                   (exclusive_or_expression_
                                                    (and_expression_
                                                     (equality_expression_
                                                      (relational_expression_
                                                       (shift_expression_
                                                        (additive_expression_
                                                         («multiplicative_expression_/_»
                                                          (multiplicative_expression_
                                                           (cast_expression_
                                                            (unary_expressionSizeof_
                                                             "sizeof"
                                                             (unary_expression_
                                                              (postfix_expression_
                                                               («primary_expression(_)»
                                                                "("
                                                                («expression_,,»
                                                                 [(assignment_expression_
                                                                   (conditional_expression_
                                                                    (logical_or_expression_
                                                                     (logical_and_expression_
                                                                      (inclusive_or_expression_
                                                                       (exclusive_or_expression_
                                                                        (and_expression_
                                                                         (equality_expression_
                                                                          (relational_expression_
                                                                           (shift_expression_
                                                                            (additive_expression_
                                                                             (multiplicative_expression_
                                                                              (cast_expression_
                                                                               (unary_expression_
                                                                                (postfix_expression_
                                                                                 (primary_expression_
                                                                                  `sqlite3Stat.nowValue))))))))))))))))])
                                                                ")"))))))
                                                          "/"
                                                          (cast_expression_
                                                           (unary_expressionSizeof_
                                                            "sizeof"
                                                            (unary_expression_
                                                             (postfix_expression_
                                                              («primary_expression(_)»
                                                               "("
                                                               («expression_,,»
                                                                [(assignment_expression_
                                                                  (conditional_expression_
                                                                   (logical_or_expression_
                                                                    (logical_and_expression_
                                                                     (inclusive_or_expression_
                                                                      (exclusive_or_expression_
                                                                       (and_expression_
                                                                        (equality_expression_
                                                                         (relational_expression_
                                                                          (shift_expression_
                                                                           (additive_expression_
                                                                            (multiplicative_expression_
                                                                             (cast_expression_
                                                                              (unary_expression_
                                                                               («postfix_expression_[_]»
                                                                                (postfix_expression_
                                                                                 (primary_expression_
                                                                                  `sqlite3Stat.nowValue))
                                                                                "["
                                                                                («expression_,,»
                                                                                 [(assignment_expression_
                                                                                   (conditional_expression_
                                                                                    (logical_or_expression_
                                                                                     (logical_and_expression_
                                                                                      (inclusive_or_expression_
                                                                                       (exclusive_or_expression_
                                                                                        (and_expression_
                                                                                         (equality_expression_
                                                                                          (relational_expression_
                                                                                           (shift_expression_
                                                                                            (additive_expression_
                                                                                             (multiplicative_expression_
                                                                                              (cast_expression_
                                                                                               (unary_expression_
                                                                                                (postfix_expression_
                                                                                                 (primary_expression__2
                                                                                                  (extended_num___
                                                                                                   (num "0")
                                                                                                   [(arith_type_specs
                                                                                                     "")])))))))))))))))))])
                                                                                "]")))))))))))))))])
                                                               ")")))))))))))))))))])
                                            ")")))))))))))))))))])
                         ")"))))))))))))))))])
       ")"
       (statement__1
        («compound_statement{_}»
         "{"
         (statement_list_
          (statement__5
           («jump_statementReturn_;»
            "return"
            («expression_,,»
             [(assignment_expression_
               (conditional_expression_
                (logical_or_expression_
                 (logical_and_expression_
                  (inclusive_or_expression_
                   (exclusive_or_expression_
                    (and_expression_
                     (equality_expression_
                      (relational_expression_
                       (shift_expression_
                        (additive_expression_
                         (multiplicative_expression_
                          (cast_expression_
                           (unary_expression_
                            («postfix_expression_(_)»
                             (postfix_expression_ (primary_expression_ `sqlite3MisuseError))
                             "("
                             («argument_expression_list_,,»
                              [(assignment_expression_
                                (conditional_expression_
                                 (logical_or_expression_
                                  (logical_and_expression_
                                   (inclusive_or_expression_
                                    (exclusive_or_expression_
                                     (and_expression_
                                      (equality_expression_
                                       (relational_expression_
                                        (shift_expression_
                                         (additive_expression_
                                          (multiplicative_expression_
                                           (cast_expression_
                                            (unary_expression_
                                             (postfix_expression_
                                              (primary_expression__2
                                               (extended_num___ (num "23373") [(arith_type_specs "")])))))))))))))))))])
                             ")")))))))))))))))])
            ";")))
         "}"))
       []))
     (statement_list__
      (statement__2
       («expression_statement_;»
        [(«expression_,,»
          [(assignment_expression___
            (unary_expression_ (postfix_expression_ (primary_expression_ `pMutex)))
            («assignment_operator=» "=")
            (assignment_expression_
             («conditional_expression_?_:_»
              (logical_or_expression_
               (logical_and_expression_
                (inclusive_or_expression_
                 (exclusive_or_expression_
                  (and_expression_
                   (equality_expression_
                    (relational_expression_
                     (shift_expression_
                      (additive_expression_
                       (multiplicative_expression_
                        (cast_expression_
                         (unary_expression_
                          («postfix_expression_[_]»
                           (postfix_expression_ (primary_expression_ `statMutex))
                           "["
                           («expression_,,»
                            [(assignment_expression_
                              (conditional_expression_
                               (logical_or_expression_
                                (logical_and_expression_
                                 (inclusive_or_expression_
                                  (exclusive_or_expression_
                                   (and_expression_
                                    (equality_expression_
                                     (relational_expression_
                                      (shift_expression_
                                       (additive_expression_
                                        (multiplicative_expression_
                                         (cast_expression_
                                          (unary_expression_
                                           (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                           "]")))))))))))))
              "?"
              («expression_,,»
               [(assignment_expression_
                 (conditional_expression_
                  (logical_or_expression_
                   (logical_and_expression_
                    (inclusive_or_expression_
                     (exclusive_or_expression_
                      (and_expression_
                       (equality_expression_
                        (relational_expression_
                         (shift_expression_
                          (additive_expression_
                           (multiplicative_expression_
                            (cast_expression_
                             (unary_expression_
                              (choice
                               («postfix_expression_(_)»
                                (postfix_expression_ (primary_expression_ `sqlite3Pcache1Mutex))
                                "("
                                («argument_expression_list_,,» [])
                                ")")
                               («postfix_expression_()»
                                (postfix_expression_ (primary_expression_ `sqlite3Pcache1Mutex))
                                "("
                                ")"))))))))))))))))])
              ":"
              (conditional_expression_
               (logical_or_expression_
                (logical_and_expression_
                 (inclusive_or_expression_
                  (exclusive_or_expression_
                   (and_expression_
                    (equality_expression_
                     (relational_expression_
                      (shift_expression_
                       (additive_expression_
                        (multiplicative_expression_
                         (cast_expression_
                          (unary_expression_
                           (choice
                            («postfix_expression_(_)»
                             (postfix_expression_ (primary_expression_ `sqlite3MallocMutex))
                             "("
                             («argument_expression_list_,,» [])
                             ")")
                            («postfix_expression_()»
                             (postfix_expression_ (primary_expression_ `sqlite3MallocMutex))
                             "("
                             ")"))))))))))))))))))])]
        ";"))
      (statement_list__
       (statement__2
        («expression_statement_;»
         [(«expression_,,»
           [(assignment_expression_
             (conditional_expression_
              (logical_or_expression_
               (logical_and_expression_
                (inclusive_or_expression_
                 (exclusive_or_expression_
                  (and_expression_
                   (equality_expression_
                    (relational_expression_
                     (shift_expression_
                      (additive_expression_
                       (multiplicative_expression_
                        (cast_expression_
                         (unary_expression_
                          («postfix_expression_(_)»
                           (postfix_expression_ (primary_expression_ `sqlite3_mutex_enter))
                           "("
                           («argument_expression_list_,,»
                            [(assignment_expression_
                              (conditional_expression_
                               (logical_or_expression_
                                (logical_and_expression_
                                 (inclusive_or_expression_
                                  (exclusive_or_expression_
                                   (and_expression_
                                    (equality_expression_
                                     (relational_expression_
                                      (shift_expression_
                                       (additive_expression_
                                        (multiplicative_expression_
                                         (cast_expression_
                                          (unary_expression_
                                           (postfix_expression_ (primary_expression_ `pMutex))))))))))))))))])
                           ")")))))))))))))))])]
         ";"))
       (statement_list__
        (statement__2
         («expression_statement_;»
          [(«expression_,,»
            [(assignment_expression___
              (unary_expression___1
               («unary_operator*» "*")
               (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `pCurrent)))))
              («assignment_operator=» "=")
              (assignment_expression_
               (conditional_expression_
                (logical_or_expression_
                 (logical_and_expression_
                  (inclusive_or_expression_
                   (exclusive_or_expression_
                    (and_expression_
                     (equality_expression_
                      (relational_expression_
                       (shift_expression_
                        (additive_expression_
                         (multiplicative_expression_
                          (cast_expression_
                           (unary_expression_
                            («postfix_expression_[_]»
                             (postfix_expression_ (primary_expression_ `sqlite3Stat.nowValue))
                             "["
                             («expression_,,»
                              [(assignment_expression_
                                (conditional_expression_
                                 (logical_or_expression_
                                  (logical_and_expression_
                                   (inclusive_or_expression_
                                    (exclusive_or_expression_
                                     (and_expression_
                                      (equality_expression_
                                       (relational_expression_
                                        (shift_expression_
                                         (additive_expression_
                                          (multiplicative_expression_
                                           (cast_expression_
                                            (unary_expression_
                                             (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                             "]"))))))))))))))))])]
          ";"))
        (statement_list__
         (statement__2
          («expression_statement_;»
           [(«expression_,,»
             [(assignment_expression___
               (unary_expression___1
                («unary_operator*» "*")
                (cast_expression_ (unary_expression_ (postfix_expression_ (primary_expression_ `pHighwater)))))
               («assignment_operator=» "=")
               (assignment_expression_
                (conditional_expression_
                 (logical_or_expression_
                  (logical_and_expression_
                   (inclusive_or_expression_
                    (exclusive_or_expression_
                     (and_expression_
                      (equality_expression_
                       (relational_expression_
                        (shift_expression_
                         (additive_expression_
                          (multiplicative_expression_
                           (cast_expression_
                            (unary_expression_
                             («postfix_expression_[_]»
                              (postfix_expression_ (primary_expression_ `sqlite3Stat.mxValue))
                              "["
                              («expression_,,»
                               [(assignment_expression_
                                 (conditional_expression_
                                  (logical_or_expression_
                                   (logical_and_expression_
                                    (inclusive_or_expression_
                                     (exclusive_or_expression_
                                      (and_expression_
                                       (equality_expression_
                                        (relational_expression_
                                         (shift_expression_
                                          (additive_expression_
                                           (multiplicative_expression_
                                            (cast_expression_
                                             (unary_expression_
                                              (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                              "]"))))))))))))))))])]
           ";"))
         (statement_list__
          (statement__3
           («selection_statementIf(_)_Else_»
            "if"
            "("
            («expression_,,»
             [(assignment_expression_
               (conditional_expression_
                (logical_or_expression_
                 (logical_and_expression_
                  (inclusive_or_expression_
                   (exclusive_or_expression_
                    (and_expression_
                     (equality_expression_
                      (relational_expression_
                       (shift_expression_
                        (additive_expression_
                         (multiplicative_expression_
                          (cast_expression_
                           (unary_expression_ (postfix_expression_ (primary_expression_ `resetFlag))))))))))))))))])
            ")"
            (statement__1
             («compound_statement{_}»
              "{"
              (statement_list_
               (statement__2
                («expression_statement_;»
                 [(«expression_,,»
                   [(assignment_expression___
                     (unary_expression_
                      («postfix_expression_[_]»
                       (postfix_expression_ (primary_expression_ `sqlite3Stat.mxValue))
                       "["
                       («expression_,,»
                        [(assignment_expression_
                          (conditional_expression_
                           (logical_or_expression_
                            (logical_and_expression_
                             (inclusive_or_expression_
                              (exclusive_or_expression_
                               (and_expression_
                                (equality_expression_
                                 (relational_expression_
                                  (shift_expression_
                                   (additive_expression_
                                    (multiplicative_expression_
                                     (cast_expression_
                                      (unary_expression_ (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                       "]"))
                     («assignment_operator=» "=")
                     (assignment_expression_
                      (conditional_expression_
                       (logical_or_expression_
                        (logical_and_expression_
                         (inclusive_or_expression_
                          (exclusive_or_expression_
                           (and_expression_
                            (equality_expression_
                             (relational_expression_
                              (shift_expression_
                               (additive_expression_
                                (multiplicative_expression_
                                 (cast_expression_
                                  (unary_expression_
                                   («postfix_expression_[_]»
                                    (postfix_expression_ (primary_expression_ `sqlite3Stat.nowValue))
                                    "["
                                    («expression_,,»
                                     [(assignment_expression_
                                       (conditional_expression_
                                        (logical_or_expression_
                                         (logical_and_expression_
                                          (inclusive_or_expression_
                                           (exclusive_or_expression_
                                            (and_expression_
                                             (equality_expression_
                                              (relational_expression_
                                               (shift_expression_
                                                (additive_expression_
                                                 (multiplicative_expression_
                                                  (cast_expression_
                                                   (unary_expression_
                                                    (postfix_expression_ (primary_expression_ `op))))))))))))))))])
                                    "]"))))))))))))))))])]
                 ";")))
              "}"))
            []))
          (statement_list__
           (statement__2
            («expression_statement_;»
             [(«expression_,,»
               [(assignment_expression_
                 (conditional_expression_
                  (logical_or_expression_
                   (logical_and_expression_
                    (inclusive_or_expression_
                     (exclusive_or_expression_
                      (and_expression_
                       (equality_expression_
                        (relational_expression_
                         (shift_expression_
                          (additive_expression_
                           (multiplicative_expression_
                            (cast_expression_
                             (unary_expression_
                              («postfix_expression_(_)»
                               (postfix_expression_ (primary_expression_ `sqlite3_mutex_leave))
                               "("
                               («argument_expression_list_,,»
                                [(assignment_expression_
                                  (conditional_expression_
                                   (logical_or_expression_
                                    (logical_and_expression_
                                     (inclusive_or_expression_
                                      (exclusive_or_expression_
                                       (and_expression_
                                        (equality_expression_
                                         (relational_expression_
                                          (shift_expression_
                                           (additive_expression_
                                            (multiplicative_expression_
                                             (cast_expression_
                                              (unary_expression_
                                               (postfix_expression_ (primary_expression_ `pMutex))))))))))))))))])
                               ")")))))))))))))))])]
             ";"))
           (statement_list__
            (statement__2
             («expression_statement_;»
              [(«expression_,,»
                [(assignment_expression_
                  (conditional_expression_
                   (logical_or_expression_
                    (logical_and_expression_
                     (inclusive_or_expression_
                      (exclusive_or_expression_
                       (and_expression_
                        (equality_expression_
                         (relational_expression_
                          (shift_expression_
                           (additive_expression_
                            (multiplicative_expression_
                             («cast_expression(_)_»
                              "("
                              (type_name__
                               (specifier_qualifier_list_ (specifier_qualifier_ (type_specifierVoid "void")))
                               [])
                              ")"
                              (cast_expression_
                               (unary_expression_ (postfix_expression_ (primary_expression_ `pMutex)))))))))))))))))])]
              ";"))
            (statement_list_
             (statement__5
              («jump_statementReturn_;»
               "return"
               («expression_,,»
                [(assignment_expression_
                  (conditional_expression_
                   (logical_or_expression_
                    (logical_and_expression_
                     (inclusive_or_expression_
                      (exclusive_or_expression_
                       (and_expression_
                        (equality_expression_
                         (relational_expression_
                          (shift_expression_
                           (additive_expression_
                            (multiplicative_expression_
                             (cast_expression_
                              (unary_expression_
                               (postfix_expression_
                                (primary_expression__2
                                 (extended_num___ (num "0") [(arith_type_specs "")])))))))))))))))))])
               ";")))))))))))))
  "}"))

for the expression

{
  sqlite3_mutex *pMutex;
             ;
  if( op<0 || op>=((int)(sizeof(sqlite3Stat.nowValue)/sizeof(sqlite3Stat.nowValue[0]))) ){
    return sqlite3MisuseError(23373);
  }



  pMutex = statMutex[op] ? sqlite3Pcache1Mutex() : sqlite3MallocMutex();
  sqlite3_mutex_enter(pMutex);
  *pCurrent = sqlite3Stat.nowValue[op];
  *pHighwater = sqlite3Stat.mxValue[op];
  if( resetFlag ){
    sqlite3Stat.mxValue[op] = sqlite3Stat.nowValue[op];
  }
  sqlite3_mutex_leave(pMutex);
  (void)pMutex;
  return 0;
}