The struct that forms a single token of an address expression as parsed by
omp_parse_expr. These are typically held in a vec after parsing.
omp_addr_tokenizer::omp_addr_token::omp_addr_token |
( |
token_type | t, |
|
|
tree | e ) |
We scan an expression by recursive descent, and build a vector of
"omp_addr_token *" pointers representing a "parsed" version of the
expression. The grammar we use is something like this:
expr0::
expr [section-access]
expr::
structured-expr access-method
| array-base access-method
structured-expr::
structure-base component-selector
arbitrary-expr::
(anything else)
structure-base::
DECL access-method
| structured-expr access-method
| arbitrary-expr access-method
array-base::
DECL
| arbitrary-expr
access-method::
DIRECT
| REF
| POINTER
| REF_TO_POINTER
| POINTER_OFFSET
| REF_TO_POINTER_OFFSET
| INDEXED_ARRAY
| INDEXED_REF_TO_ARRAY
| index-expr
index-expr::
INDEX_EXPR access-method
component-selector::
component-selector COMPONENT_REF
| component-selector ARRAY_REF
| COMPONENT_REF
This tokenized form is then used both in parsing, for OpenMP clause
expansion (for C and C++) and in gimplify.cc for sibling-list handling
(for C, C++ and Fortran).
References expr, and type.