diff options
Diffstat (limited to 'cparser/handcrafted.messages')
-rw-r--r-- | cparser/handcrafted.messages | 4700 |
1 files changed, 4700 insertions, 0 deletions
diff --git a/cparser/handcrafted.messages b/cparser/handcrafted.messages new file mode 100644 index 00000000..5a3fbd71 --- /dev/null +++ b/cparser/handcrafted.messages @@ -0,0 +1,4700 @@ +####################################################################### +# # +# The Compcert verified compiler # +# # +# François Pottier, INRIA Paris-Rocquencourt # +# Jacques-Henri Jourdan, INRIA Paris-Rocquencourt # +# # +# Copyright Institut National de Recherche en Informatique et en # +# Automatique. All rights reserved. This file is distributed # +# under the terms of the INRIA Non-Commercial License Agreement. # +# # +####################################################################### + +# This file contains a complete list of sentences that cause the pre_parser to +# detect an error. + +# ------------------------------------------------------------------------------ + +# WORKFLOW: + +# The workflow (when and how this file should be modified; which tools exist +# to maintain it; etc.) is documented in GNUmakefile in this directory. + +# ------------------------------------------------------------------------------ + +# FILE FORMAT: + +# Each sentence is followed with a hand-written error message, which must be +# preceded and followed by a blank line. + +# If several sentences should share a single error message, they can be grouped, +# with no whitespace between them. + +# Hand-written comments, which begin with a single hash character, like this, are +# preserved when this file is updated by Menhir. Auto-generated comments, which +# begin with two hash characters, are re-generated by Menhir. + +# An error message is basically free-form text. It cannot contain a blank line. +# Occurrences of the special form $i, where i is a number (an index into the +# parser's stack), will be replaced by the fragment of the source text that +# corresponds to this stack entry. It is the user's responsibility to ensure +# that the index i is within range, i.e., falls into the known suffix of the +# stack. Note that this index is 0-based and counts from right to left, i.e., +# $0 refers to the RIGHTMOST stack cell. + +# The replacement text for $i can be quite long (up to one line, basically) +# so one should avoid using several $i on a single line, unless one knows +# a smaller bound on their length. + +# ------------------------------------------------------------------------------ + +# CONVENTIONS ABOUT THE FORM AND STYLE OF ERROR MESSAGES: + +# If possible, start with "Ill-formed foo", where "foo" is the thing that we +# are trying to recognize, i.e., the left-hand side of our items. This is not +# always possible, as we do not always know with certainty what we are trying +# to rcognize. + +# If possible, say "Up to this point, a bar has been recognized", and show it, +# by using $i. + +# If the current state was reached via spurious reductions, print a hypothesis, +# of the form "If this bar is complete, then". + +# Show a list of the permitted continuations: "at this point, one of the +# following is expected:". The list should be complete, although unlikely +# continuations can be omitted. A continuation can be just one symbol, or +# a sequence of symbols. + +# ------------------------------------------------------------------------------ + +# NOTE ON THE CONTEXT OF AN EXPRESSION: + +# A C expression occurs in many contexts. + +# Although we could distinguish between these contexts statically, by adding a +# phantom parameter to all of the nonterminal symbols that encode expressions, +# that would be quite heavy: the number of states in the automaton would grow +# quite dramatically. + +# Instead, we prefer to dynamically distinguish between these contexts. We do +# so in a very simple way: we give %on_error_reduce declarations to Menhir (in +# pre_parser.mly) so as to replace certain error actions with reduction actions. +# Thus, when Menhir finds an error and whatever is on the stack can be reduced +# to an expression, the automaton will reduce it to an expression. By carrying +# out this extra (spurious) reduction, the automaton ends up in a state where +# sufficient static context is available to tell what should follow. Thus, +# without doing anything special beyond giving these directives, we are able +# to sidestep the issue of the context of expressions. + +# Of course, we must be careful to say (in our error messages) "IF this +# expression (or list of expressions) is complete, THEN the following +# continuations are expected". The weakness of this approach is that if the +# expression is NOT complete (in the user's mind), then we do not help the user +# understand how the expression should be completed. Our error message exhibits +# a bias towards ending expressions. + +# OTHER USES OF %on_error_reduce: + +# We apply this technique also to attribute_specifier_list and declarator. This +# means, intuitively, that when we find an error at a position where an +# attribute specifier list and/or a declarator could be complete, but could also +# be continued, we implicitly assume it is complete. Again, this must be taken +# into account in messages where an attribute_specifier_list or a declarator has +# just been recognized. + +# ABOUT STRICT VERSUS LAX INTERPRETATIONS OF %on_error_reduce: + +# There are two ways in which Menhir could implement %on_error_reduce. In the +# strict interpretation, an extra reduction takes place only if this is the +# only reduction that can take place in this state. (Thus, we do not choose +# between two interpretations of the past.) In the lax interpretation, an extra +# reduction can take place even if some other reduction is enabled. (In a +# situation where two extra reductions compete, neither takes place.) + +# Adopting the lax interpretation adds more extra reductions, causing some +# error states to disappear. For instance, this state, where we have a read +# a VAR_NAME which could be either the beginning of an expression or the +# beginning of a labeled statement: + +# general_identifier -> PRE_NAME VAR_NAME . [ COLON ] +# primary_expression -> PRE_NAME VAR_NAME . [ <lots of tokens> ] + +# In the strict interpretation, no extra reduction is permitted here, because +# two reductions are enabled. In the lax interpretation, because we have +# declared %on_error_reduce primary_expression, the second production is +# reduced. Hence, we implicitly assume that this name forms an expression +# (as opposed to a label). This is slightly inaccurate (we lose completeness) +# but removes an error state that is rather unpleasant. + +# Even though it may sound "bad" to arbitrarily force one reduction among +# several possible reductions, one should keep in mind that an arbitrary +# choice is already made for us by the user when he "chooses" the incorrect +# token. Indeed, depending on which incorrect token is used, we may fall +# within or outside of a lookahead set, so we may make different reduction +# choices, and give different error messages. So, we shouldn't feel too bad +# about forcing a few more arbitrary choices. This is actually more regular, +# in a sense. + +# In another instance of this phenomemon, there is a rather tricky state, +# where we have read "int f" at the toplevel, and we do not know whether this +# will be a variable definition (declarator) or a function definition +# (direct_declarator). In the lax interpretation, because we have declared +# %on_error_reduce declarator, we implicitly assume this must be the +# beginning of a declarator. Again, we lose completeness (we will not suggest +# that an opening parenthesis would have been accepted) but this makes our +# life easier, and does not sound too bad. + +# Another instance is a state where we have read "enum foo". This could be a +# complete enum_specifier, or it could be continued with an opening brace. If it +# is complete, though, we lack static context to tell what should come after it. +# Using lax %on_error_reduce enum_specifier allows us to force a reduction, +# (thus forgetting that an opening brace would have been permitted) and to move +# to another state where more contextual information is available. As noted +# above, this reduction can already take place naturally, depending on the +# lookahead token, so we are only adding more cases where it takes place. + +# The lax %on_error_reduce is used also to deal with a family of error states +# where we have recognized a complete statement which could be continued with an +# ELSE branch. These error states are difficult to explain: although we can +# definitely say that ELSE is permitted, we have difficulty telling what else is +# permitted, by lack of static context. We could recover this static information +# by introducing a phantom parameter on statements, but that would be heavy. We +# just cut a corner and use %on_error_reduce to view this as a complete +# statement. Thus, we abandon the possibility that the statement could be +# continued with ELSE: our error message will not mention it. Again, this makes +# our life easier, and does not sound too bad. + +# We also apply %on_error_reduce to specifier_qualifier_list and +# option(abstract_declarator(type_name)). This allows us to recognize +# a valid type name, even when this type name could be continued. This +# allows us to go back to a state where we see the opening parenthesis +# before the type name (there is always one), which allows us to +# explain why we request a closing parenthesis. This is a bit costly, +# as there are quite a few similar error states to deal with here. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN INT XOR_ASSIGN +## +## Ends in an error in state: 299. +## +## attribute_specifier -> ALIGNAS LPAREN type_name . RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ALIGNAS LPAREN type_name +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 152, spurious reduction of production specifier_qualifier_list(type_name) -> type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) +## In state 301, spurious reduction of production option(abstract_declarator(type_name)) -> +## In state 307, spurious reduction of production type_name -> specifier_qualifier_list(type_name) option(abstract_declarator(type_name)) +## + +# Maybe the type name was not complete, but we have reduced anyway +# and assume it is complete. Thus, we expect a closing parenthesis. +# This example comes in several variants, because there are several +# places in the grammar where LPAREN type_name RPAREN appears. + +# gcc, clang: like us, expect a closing parenthesis. + +Ill-formed _Alignas qualifier. +Up to this point, a type name has been recognized: + $0 +If this type name is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ ALIGNOF LPAREN VOID XOR_ASSIGN +## +## Ends in an error in state: 311. +## +## postfix_expression -> LPAREN type_name . RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## unary_expression -> ALIGNOF LPAREN type_name . RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## ALIGNOF LPAREN type_name +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 152, spurious reduction of production specifier_qualifier_list(type_name) -> type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) +## In state 301, spurious reduction of production option(abstract_declarator(type_name)) -> +## In state 307, spurious reduction of production type_name -> specifier_qualifier_list(type_name) option(abstract_declarator(type_name)) +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ SIZEOF LPAREN VOID XOR_ASSIGN +## +## Ends in an error in state: 378. +## +## postfix_expression -> LPAREN type_name . RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## unary_expression -> SIZEOF LPAREN type_name . RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## SIZEOF LPAREN type_name +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 152, spurious reduction of production specifier_qualifier_list(type_name) -> type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) +## In state 301, spurious reduction of production option(abstract_declarator(type_name)) -> +## In state 307, spurious reduction of production type_name -> specifier_qualifier_list(type_name) option(abstract_declarator(type_name)) +## + +Ill-formed use of $2. +Up to this point, a type name has been recognized: + $0 +If this type name is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ BUILTIN_VA_ARG LPAREN PRE_NAME VAR_NAME COMMA VOID XOR_ASSIGN +## +## Ends in an error in state: 342. +## +## postfix_expression -> BUILTIN_VA_ARG LPAREN assignment_expression COMMA type_name . RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## BUILTIN_VA_ARG LPAREN assignment_expression COMMA type_name +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 152, spurious reduction of production specifier_qualifier_list(type_name) -> type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) +## In state 301, spurious reduction of production option(abstract_declarator(type_name)) -> +## In state 307, spurious reduction of production type_name -> specifier_qualifier_list(type_name) option(abstract_declarator(type_name)) +## + +Ill-formed use of __builtin_va_arg. +Up to this point, a type name has been recognized: + $0 +If this type name is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ INC LPAREN VOID XOR_ASSIGN +## +## Ends in an error in state: 372. +## +## postfix_expression -> LPAREN type_name . RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN type_name +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 152, spurious reduction of production specifier_qualifier_list(type_name) -> type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) +## In state 301, spurious reduction of production option(abstract_declarator(type_name)) -> +## In state 307, spurious reduction of production type_name -> specifier_qualifier_list(type_name) option(abstract_declarator(type_name)) +## + +# gcc simply says it expects a closing parenthesis, +# but clang says it expects a closing parenthesis and an opening brace. + +Ill-formed compound literal. +Up to this point, a type name has been recognized: + $0 +If this type name is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LPAREN VOID XOR_ASSIGN +## +## Ends in an error in state: 375. +## +## cast_expression -> LPAREN type_name . RPAREN cast_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## postfix_expression -> LPAREN type_name . RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN type_name +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 152, spurious reduction of production specifier_qualifier_list(type_name) -> type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) +## In state 301, spurious reduction of production option(abstract_declarator(type_name)) -> +## In state 307, spurious reduction of production type_name -> specifier_qualifier_list(type_name) option(abstract_declarator(type_name)) +## + +# gcc and clang say they expect a closing parenthesis. + +Up to this point, a type name has been recognized: + $0 +If this type name is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 309. +## +## argument_expression_list -> argument_expression_list . COMMA assignment_expression [ RPAREN COMMA ] +## attribute_specifier -> ALIGNAS LPAREN argument_expression_list . RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ALIGNAS LPAREN argument_expression_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 133, spurious reduction of production argument_expression_list -> assignment_expression +## + +# We are trying to recognize an alignas specifier. +# We have already recognized at least one argument_expression. +# We expect either "COMMA assignment_expression" or RPAREN. +# But, in CompCert, only one expression is allowed as part of ALIGNAS (see Elab.ml). +# So we say we expect RPAREN. + +# And we say we have recognized "an expression", instead of "a list of expressions". +# Not sure whether this is a good idea. + +# gcc, clang: like us, expect a closing parenthesis. + +Ill-formed _Alignas qualifier. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN INT LBRACK RPAREN +## +## Ends in an error in state: 235. +## +## direct_abstract_declarator -> option(direct_abstract_declarator) LBRACK option(type_qualifier_list) . optional(assignment_expression,RBRACK) [ RPAREN LPAREN LBRACK COMMA ] +## type_qualifier_list -> option(type_qualifier_list) . type_qualifier_noattr [ VOLATILE TILDE STRING_LITERAL STAR SIZEOF RESTRICT RBRACK PRE_NAME PLUS PACKED MINUS LPAREN INC DEC CONSTANT CONST BUILTIN_VA_ARG BANG ATTRIBUTE AND ALIGNOF ALIGNAS ] +## type_qualifier_list -> option(type_qualifier_list) . attribute_specifier [ VOLATILE TILDE STRING_LITERAL STAR SIZEOF RESTRICT RBRACK PRE_NAME PLUS PACKED MINUS LPAREN INC DEC CONSTANT CONST BUILTIN_VA_ARG BANG ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## option(direct_abstract_declarator) LBRACK option(type_qualifier_list) +## +translation_unit_file: INT PRE_NAME VAR_NAME LBRACK RPAREN +## +## Ends in an error in state: 252. +## +## direct_declarator -> direct_declarator LBRACK option(type_qualifier_list) . optional(assignment_expression,RBRACK) [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## type_qualifier_list -> option(type_qualifier_list) . type_qualifier_noattr [ VOLATILE TILDE STRING_LITERAL STAR SIZEOF RESTRICT RBRACK PRE_NAME PLUS PACKED MINUS LPAREN INC DEC CONSTANT CONST BUILTIN_VA_ARG BANG ATTRIBUTE AND ALIGNOF ALIGNAS ] +## type_qualifier_list -> option(type_qualifier_list) . attribute_specifier [ VOLATILE TILDE STRING_LITERAL STAR SIZEOF RESTRICT RBRACK PRE_NAME PLUS PACKED MINUS LPAREN INC DEC CONSTANT CONST BUILTIN_VA_ARG BANG ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## direct_declarator LBRACK option(type_qualifier_list) +## + +# We are trying to recognize an array declarator. +# We have seen the opening bracket and (maybe) some type qualifiers. +# We are expecting more type qualifiers, or an expression, or a closing bracket. + +# gcc, clang: both say they expect an expression (and nothing else). +# Yet, they do accept a closing bracket. + +# If in the first sentence we replace the invalid token with a type qualifier, such as CONST, +# gcc and clang both say: +# error: type qualifier used in array declarator outside of function prototype +# On the other hand, in the second sentence, they accept a qualifier. + +# We choose not to mention the possibility of a type qualifier (which may be +# illegal here anyway). + +Ill-formed array declarator. +At this point, one of the following is expected: + an expression, followed with a closing bracket ']'; or + a closing bracket ']'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN INT LPAREN INT COMMA ELLIPSIS XOR_ASSIGN +## +## Ends in an error in state: 263. +## +## direct_abstract_declarator -> LPAREN option(context_parameter_type_list) . RPAREN [ RPAREN LPAREN LBRACK COMMA ] +## +## The known suffix of the stack is as follows: +## LPAREN option(context_parameter_type_list) +## +translation_unit_file: ALIGNAS LPAREN INT LBRACK RBRACK LPAREN INT COMMA ELLIPSIS XOR_ASSIGN +## +## Ends in an error in state: 246. +## +## direct_abstract_declarator -> direct_abstract_declarator LPAREN option(context_parameter_type_list) . RPAREN [ RPAREN LPAREN LBRACK COMMA ] +## +## The known suffix of the stack is as follows: +## direct_abstract_declarator LPAREN option(context_parameter_type_list) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT COMMA ELLIPSIS XOR_ASSIGN +## +## Ends in an error in state: 280. +## +## direct_declarator -> direct_declarator LPAREN context_parameter_type_list . RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## direct_declarator LPAREN context_parameter_type_list +## + +# Unlikely error, since only the ELLIPSIS allows us to tell that +# the parameter list is finished. + +At this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN INT LPAREN LPAREN RPAREN COMMA +## +## Ends in an error in state: 261. +## +## direct_abstract_declarator -> LPAREN save_context abstract_declarator(type_name) . RPAREN [ RPAREN LPAREN LBRACK COMMA ] +## +## The known suffix of the stack is as follows: +## LPAREN save_context abstract_declarator(type_name) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 254, spurious reduction of production abstract_declarator(type_name) -> direct_abstract_declarator +## +# +# The first LPAREN in this example must be the beginning of an abstract_declarator. +# It leads us into a state where we do not yet know the meaning of the opening parenthesis: +# direct_abstract_declarator -> LPAREN . abstract_declarator RPAREN [ RPAREN LPAREN LBRACK ] +# direct_abstract_declarator -> LPAREN . in_context(option(parameter_type_list)) RPAREN [ RPAREN LPAREN LBRACK ] +# i.e. (a) this could be the opening parenthesis in a pair of parentheses, +# or (d) this could be the opening parenthesis in a function type. +# The second LPAREN takes us again into the same state. +# The RPAREN allows us to recognize that we have a function type of no parameters (d). +# Hence, LPAREN RPAREN forms a direct_abstract_declarator. +# At this point, the status of the first LPAREN is still undetermined (regular paren, +# or beginning of a function type?) but that is not a problem for us. +# +# This case is simplified by giving a phantom context parameter to abstract_declarator. +# Here, we know we are in the context of a type_name or direct_abstract_declarator, +# so RPAREN is allowed next. +# If we were in the context of a parameter_declaration, COMMA would be allowed next. +# + +# gcc and clang simply request a closing parenthesis. + +Up to this point, an abstract declarator has been recognized: + $0 +At this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN INT LPAREN XOR_ASSIGN +## +## Ends in an error in state: 302. +## +## direct_abstract_declarator -> LPAREN . save_context abstract_declarator(type_name) RPAREN [ RPAREN LPAREN LBRACK ] +## direct_abstract_declarator -> LPAREN . option(context_parameter_type_list) RPAREN [ RPAREN LPAREN LBRACK ] +## +## The known suffix of the stack is as follows: +## LPAREN +## + +# gcc and clang both say they want a closing parenthesis. +# This seems a bit extreme. + +An opening parenthesis '(' has been recognized. +At this point, one of the following is expected: + an abstract declarator, + if this parenthesis is a delimiter; or + a list of parameter declarations, + if this parenthesis is the beginning of a function declarator. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT LPAREN XOR_ASSIGN +## +## Ends in an error in state: 229. +## +## direct_abstract_declarator -> LPAREN . save_context abstract_declarator(type_name) RPAREN [ RPAREN LPAREN LBRACK COMMA ] +## direct_abstract_declarator -> LPAREN . option(context_parameter_type_list) RPAREN [ RPAREN LPAREN LBRACK COMMA ] +## direct_declarator -> LPAREN . save_context declarator RPAREN [ RPAREN PACKED LPAREN LBRACK COMMA ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## LPAREN +## + +# Analogous to the above, but has a third item. + +An opening parenthesis '(' has been recognized. +At this point, one of the following is expected: + an abstract declarator or a declarator, + if this parenthesis is a delimiter; or + a list of parameter declarations, + if this parenthesis is the beginning of a function declarator. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN VOLATILE ADD_ASSIGN +## +## Ends in an error in state: 294. +## +## option(type_qualifier_list) -> type_qualifier_list . [ VOLATILE RESTRICT PACKED CONST ATTRIBUTE ALIGNAS ] +## specifier_qualifier_list(type_name) -> type_qualifier_list . typedef_name option(type_qualifier_list) [ STAR RPAREN LPAREN LBRACK ] +## specifier_qualifier_list(type_name) -> type_qualifier_list . type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) [ STAR RPAREN LPAREN LBRACK ] +## +## The known suffix of the stack is as follows: +## type_qualifier_list +## + +# We are trying to recognize a specifier-qualifier-list, and have not yet seen +# a type specifier, which is why we know the list is not finished. + +# clang says it expects a type. +# gcc says the missing type defaults to int, and expects a closing parenthesis. + +Ill-formed type name. +At this point, one of the following is expected: + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN XOR_ASSIGN +## +## Ends in an error in state: 150. +## +## attribute_specifier -> ALIGNAS LPAREN . argument_expression_list RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## attribute_specifier -> ALIGNAS LPAREN . type_name RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ALIGNAS LPAREN +## + +# This one seems easy. We have recognized ALIGNAS LPAREN, and nothing that makes sense beyond that. + +# clang and gcc say they expect an expression. + +Ill-formed _Alignas qualifier. +At this point, one of the following is expected: + an expression; or + a type name. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS XOR_ASSIGN +## +## Ends in an error in state: 149. +## +## attribute_specifier -> ALIGNAS . LPAREN argument_expression_list RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## attribute_specifier -> ALIGNAS . LPAREN type_name RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ALIGNAS +## + +# Fingers in the nose. + +Ill-formed _Alignas qualifier. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN COMMA XOR_ASSIGN +## +## Ends in an error in state: 354. +## +## gcc_attribute_list -> gcc_attribute_list COMMA . gcc_attribute [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## gcc_attribute_list COMMA +## + +# We are expecting a gcc_attribute. This symbol is nullable, so +# RPAREN and COMMA are permitted too, but we can ignore this +# possibility in the error message (why would someone use an +# empty attribute?). + +# clang and gcc say they expect a closing parenthesis. + +Ill-formed attribute specifier. +At this point, a gcc attribute is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN RPAREN XOR_ASSIGN +## +## Ends in an error in state: 352. +## +## attribute_specifier -> ATTRIBUTE LPAREN LPAREN gcc_attribute_list RPAREN . RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ATTRIBUTE LPAREN LPAREN gcc_attribute_list RPAREN +## + +Ill-formed attribute specifier. +At this point, a second closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN PRE_NAME VAR_NAME LPAREN RPAREN XOR_ASSIGN +## +## Ends in an error in state: 351. +## +## attribute_specifier -> ATTRIBUTE LPAREN LPAREN gcc_attribute_list . RPAREN RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## gcc_attribute_list -> gcc_attribute_list . COMMA gcc_attribute [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## ATTRIBUTE LPAREN LPAREN gcc_attribute_list +## + +# We have a seen a (non-empty) attribute list, so we expect either +# a COMMA or a closing LPAREN LPAREN. + +# gcc/clang say they expect a closing parenthesis. + +Ill-formed attribute specifier. +At this point, one of the following is expected: + a comma ',', followed with a gcc attribute; or + two closing parentheses '))'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN PRE_NAME VAR_NAME LPAREN PRE_NAME TYPEDEF_NAME COMMA PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 347. +## +## argument_expression_list -> argument_expression_list . COMMA assignment_expression [ RPAREN COMMA ] +## gcc_attribute -> gcc_attribute_word LPAREN typedef_name COMMA argument_expression_list . RPAREN [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## gcc_attribute_word LPAREN typedef_name COMMA argument_expression_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 133, spurious reduction of production argument_expression_list -> assignment_expression +## + +# We know for sure that we are parsing a gcc attribute. +# A (non-empty) list of expressions has been read. + +# gcc/clang say they want a closing parenthesis. + +Ill-formed gcc attribute. +Up to this point, a list of expressions has been recognized: + $0 +If this list is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN PRE_NAME VAR_NAME LPAREN PRE_NAME TYPEDEF_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 346. +## +## gcc_attribute -> gcc_attribute_word LPAREN typedef_name COMMA . argument_expression_list RPAREN [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## gcc_attribute_word LPAREN typedef_name COMMA +## + +# gcc/clang agree. + +Ill-formed gcc attribute. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN PRE_NAME VAR_NAME LPAREN PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 345. +## +## gcc_attribute -> gcc_attribute_word LPAREN typedef_name . COMMA argument_expression_list RPAREN [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## gcc_attribute_word LPAREN typedef_name +## + +# gcc and clang complain about the TYPEDEF_NAME, not sure why. + +Ill-formed gcc attribute. +At this point, a comma ',' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN PRE_NAME VAR_NAME LPAREN XOR_ASSIGN +## +## Ends in an error in state: 45. +## +## gcc_attribute -> gcc_attribute_word LPAREN . option(argument_expression_list) RPAREN [ RPAREN COMMA ] +## gcc_attribute -> gcc_attribute_word LPAREN . typedef_name COMMA argument_expression_list RPAREN [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## gcc_attribute_word LPAREN +## + +# gcc and clang just say they expect an expression. +# There is kind of hack in the pre_parser, here. +# Without going into the details, we should just say we expect a list of attribute arguments. + +Ill-formed gcc attribute. +At this point, a list of expressions is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 44. +## +## gcc_attribute -> gcc_attribute_word . [ RPAREN COMMA ] +## gcc_attribute -> gcc_attribute_word . LPAREN option(argument_expression_list) RPAREN [ RPAREN COMMA ] +## gcc_attribute -> gcc_attribute_word . LPAREN typedef_name COMMA argument_expression_list RPAREN [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## gcc_attribute_word +## + +# gcc and clang say they expect a closing parenthesis (as usual). + +Ill-formed gcc attribute specifier. +Up to this point, an attribute has been recognized: + $0 +At this point, one of the following is expected: + an opening parenthesis '(', + followed with a list of parameters for this attribute; or + a comma ',', + followed with another attribute; or + a closing parenthesis ')'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN LPAREN XOR_ASSIGN +## +## Ends in an error in state: 37. +## +## attribute_specifier -> ATTRIBUTE LPAREN LPAREN . gcc_attribute_list RPAREN RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ATTRIBUTE LPAREN LPAREN +## + +# A non-empty attribute list is expected. +# Hence, an attribute is expected. +# (The gcc documentation says a list of attributes can be empty, but +# since an attribute can be empty too, this creates a conflict.) + +# clang and gcc want a closing parenthesis, as usual (sigh)... + +Ill-formed gcc attribute specifier. +At this point, a gcc attribute is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE LPAREN XOR_ASSIGN +## +## Ends in an error in state: 36. +## +## attribute_specifier -> ATTRIBUTE LPAREN . LPAREN gcc_attribute_list RPAREN RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ATTRIBUTE LPAREN +## + +Ill-formed gcc attribute specifier. +At this point, a second opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ATTRIBUTE XOR_ASSIGN +## +## Ends in an error in state: 35. +## +## attribute_specifier -> ATTRIBUTE . LPAREN LPAREN gcc_attribute_list RPAREN RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ATTRIBUTE +## + +Ill-formed gcc attribute specifier. +At this point, two opening parentheses '((' are expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ENUM LBRACE PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 362. +## +## enumerator_list -> enumerator_list COMMA . declare_varname(enumerator) [ RBRACE COMMA ] +## option(COMMA) -> COMMA . [ RBRACE ] +## +## The known suffix of the stack is as follows: +## enumerator_list COMMA +## + +# We omit the possibility of a closing brace. + +# gcc and clang say they want an identifier. +# Indeed, an enumerator must begin with an identifier. + +Ill-formed enumeration specifier. +At this point, an enumerator is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ENUM LBRACE PRE_NAME VAR_NAME EQ CONSTANT SEMICOLON +## +## Ends in an error in state: 361. +## +## enum_specifier -> ENUM attribute_specifier_list option(other_identifier) LBRACE enumerator_list . option(COMMA) RBRACE [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## enumerator_list -> enumerator_list . COMMA declare_varname(enumerator) [ RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## ENUM attribute_specifier_list option(other_identifier) LBRACE enumerator_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 57, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 366, spurious reduction of production enumerator -> enumeration_constant EQ conditional_expression +## In state 363, spurious reduction of production declare_varname(enumerator) -> enumerator +## In state 370, spurious reduction of production enumerator_list -> declare_varname(enumerator) +## +# +# At first sight, it seems that the last enumerator that we have recognized +# could be of the form either "enumeration_constant" or +# "enumeration_constant EQ constant_expression". +# +# However, a moment's thought reveals that it cannot be of the first form, +# otherwise the syntax error would have been detected in this state: +# enumerator -> enumeration_constant . [ RBRACE COMMA ] +# enumerator -> enumeration_constant . EQ constant_expression [ RBRACE COMMA ] +# To see this, try the sentence ENUM LBRACE VAR_NAME XOR_ASSIGN. +# +# So, the last enumerator must be of the second form, which means it would be safe +# for us to say "an expression has just been recognized". +# +# On the other hand, we cannot show the expression that has just been recognized; +# we can only show the enumerator list $0. +# +# We omit the fact that a comma is allowed just before the closing brace. + +Ill-formed enumeration specifier. +Up to this point, a list of enumerators has been recognized: + $0 +If this list is complete, +then at this point, a closing brace '}' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ENUM LBRACE PRE_NAME VAR_NAME EQ XOR_ASSIGN +## +## Ends in an error in state: 365. +## +## enumerator -> enumeration_constant EQ . conditional_expression [ RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## enumeration_constant EQ +## + +Ill-formed enumeration specifier. +At this point, a constant expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ENUM LBRACE PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 364. +## +## enumerator -> enumeration_constant . [ RBRACE COMMA ] +## enumerator -> enumeration_constant . EQ conditional_expression [ RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## enumeration_constant +## + +# Here, both clang and gcc give an incomplete diagnostic message. + +Ill-formed enumeration specifier. +At this point, one of the following is expected: + an equals sign '=', followed with a constant expression; or + a comma ',', followed with an enumerator; or + a closing brace '}'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ENUM LBRACE XOR_ASSIGN +## +## Ends in an error in state: 359. +## +## enum_specifier -> ENUM attribute_specifier_list option(other_identifier) LBRACE . enumerator_list option(COMMA) RBRACE [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ENUM attribute_specifier_list option(other_identifier) LBRACE +## + +# gcc says it expects an identifier. +# clang says it expects a closing brace (which seems incorrect). + +Ill-formed enumeration specifier. +At this point, an enumerator is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ENUM XOR_ASSIGN +## +## Ends in an error in state: 357. +## +## enum_specifier -> ENUM attribute_specifier_list . option(other_identifier) LBRACE enumerator_list option(COMMA) RBRACE [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## enum_specifier -> ENUM attribute_specifier_list . general_identifier [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ENUM attribute_specifier_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 34, spurious reduction of production attribute_specifier_list -> +## + +# Here, both clang and gcc give an incomplete diagnostic message. + +Ill-formed enumeration specifier. +At this point, one of the following is expected: + an attribute specifier; or + an identifier; or + an opening brace '{'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ ALIGNOF LPAREN XOR_ASSIGN +## +## Ends in an error in state: 53. +## +## postfix_expression -> LPAREN . type_name RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## primary_expression -> LPAREN . expression RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## unary_expression -> ALIGNOF LPAREN . type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## ALIGNOF LPAREN +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ SIZEOF LPAREN XOR_ASSIGN +## +## Ends in an error in state: 26. +## +## postfix_expression -> LPAREN . type_name RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## primary_expression -> LPAREN . expression RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## unary_expression -> SIZEOF LPAREN . type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## SIZEOF LPAREN +## + +# Tricky because we could be looking at the beginning of a compound +# literal, in which case we expect a type name! But that would be a +# use of SIZEOF or ALIGNOF without parentheses, which is very unlikely. +# So, we omit this possibility. + +# gcc/clang do the same. + +Ill-formed use of $1. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ ALIGNOF XOR_ASSIGN +## +## Ends in an error in state: 52. +## +## unary_expression -> ALIGNOF . unary_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## unary_expression -> ALIGNOF . LPAREN type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## ALIGNOF +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ SIZEOF XOR_ASSIGN +## +## Ends in an error in state: 21. +## +## unary_expression -> SIZEOF . unary_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## unary_expression -> SIZEOF . LPAREN type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## SIZEOF +## + +# Let's not reveal that _Alignof and sizeof can be used without parentheses. + +# gcc and clang say they expect an expression, which seems both surprising +# (they don't request a parenthesis) and incomplete (they don't allow a type name). + +Ill-formed use of $0. +At this point, an opening parenthesis '(' is expected, +followed with an expression or a type name. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ BUILTIN_VA_ARG LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 340. +## +## postfix_expression -> BUILTIN_VA_ARG LPAREN assignment_expression . COMMA type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## BUILTIN_VA_ARG LPAREN assignment_expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## + +Ill-formed use of $2. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a comma ',' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ BUILTIN_VA_ARG LPAREN PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 341. +## +## postfix_expression -> BUILTIN_VA_ARG LPAREN assignment_expression COMMA . type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## BUILTIN_VA_ARG LPAREN assignment_expression COMMA +## + +Ill-formed use of $3. +At this point, a type name is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ BUILTIN_VA_ARG LPAREN XOR_ASSIGN +## +## Ends in an error in state: 49. +## +## postfix_expression -> BUILTIN_VA_ARG LPAREN . assignment_expression COMMA type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## BUILTIN_VA_ARG LPAREN +## + +Ill-formed use of $1. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ BUILTIN_VA_ARG XOR_ASSIGN +## +## Ends in an error in state: 48. +## +## postfix_expression -> BUILTIN_VA_ARG . LPAREN assignment_expression COMMA type_name RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## BUILTIN_VA_ARG +## + +Ill-formed use of $0. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ DEC XOR_ASSIGN +## +## Ends in an error in state: 46. +## +## unary_expression -> DEC . unary_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## DEC +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ INC XOR_ASSIGN +## +## Ends in an error in state: 31. +## +## unary_expression -> INC . unary_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## INC +## + +Ill-formed expression. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ INC LPAREN INT RPAREN XOR_ASSIGN +## +## Ends in an error in state: 373. +## +## postfix_expression -> LPAREN type_name RPAREN . LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN type_name RPAREN +## + +# Here, we seem to be certain that this must be the beginning of a +# compound literal, so an opening brace is expected. +# However, it is quite likely that the user does not even know about +# compound literals, so the error took place earlier. +# Maybe the user intended to write a cast expression, and he forgot +# to open one more parenthesis before the one we see here. +# Or maybe the name that we classified as a type was intended to be a variable. + +# gcc says an expression is expected, which seems incorrect. +# clang says "expected '{' in compound literal". + +Ill-formed expression. +Up to this point, a type name in parentheses has been recognized: + $2 $1 $0 +If this is the beginning of a compound literal, + then at this point, an opening brace '{' is expected. +If this is intended to be the beginning of a cast expression, + then perhaps an opening parenthesis '(' was forgotten earlier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ INC LPAREN XOR_ASSIGN +## +## Ends in an error in state: 32. +## +## postfix_expression -> LPAREN . type_name RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## primary_expression -> LPAREN . expression RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN +## + +# gcc and clang expect an expression. +# We could choose to omit the first possibility, too. + +Ill-formed expression. +At this point, one of the following is expected: + a type name (if this is the beginning of a compound literal); or + an expression. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 337. +## +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## primary_expression -> LPAREN expression . RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +# Since we are saying "if this expression is complete", +# there seems to be no need to say that this expression +# can be continued with a comma and another expression. +# So, let's just say a closing parenthesis is expected. + +Up to this point, a parenthesis '(' and an expression have been recognized: + $1 $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LPAREN INT RPAREN LBRACE PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 334. +## +## initializer_list -> initializer_list . COMMA option(designation) c_initializer [ RBRACE COMMA ] +## postfix_expression -> LPAREN type_name RPAREN LBRACE initializer_list . option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN type_name RPAREN LBRACE initializer_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 327, spurious reduction of production c_initializer -> assignment_expression +## In state 333, spurious reduction of production initializer_list -> option(designation) c_initializer +## + +# Let's ignore the fact that a comma can precede a closing brace. + +Ill-formed compound literal. +Up to this point, a list of initializers has been recognized: + $0 +If this list is complete, +then at this point, a closing brace '}' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LPAREN INT RPAREN LBRACE XOR_ASSIGN +## +## Ends in an error in state: 313. +## +## postfix_expression -> LPAREN type_name RPAREN LBRACE . initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN type_name RPAREN LBRACE +## + +# gcc and clang say an expression is expected, which is incomplete. + +Ill-formed compound literal. +At this point, an initializer is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LPAREN INT RPAREN XOR_ASSIGN +## +## Ends in an error in state: 376. +## +## cast_expression -> LPAREN type_name RPAREN . cast_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## postfix_expression -> LPAREN type_name RPAREN . LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN type_name RPAREN +## + +# clang and gcc expect an expression. + +Ill-formed expression. +Up to this point, a type name in parentheses has been recognized: + $2 $1 $0 +At this point, one of the following is expected: + an expression, if this is a type cast; or + an opening brace '{', if this is a compound literal. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LPAREN XOR_ASSIGN +## +## Ends in an error in state: 28. +## +## cast_expression -> LPAREN . type_name RPAREN cast_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## postfix_expression -> LPAREN . type_name RPAREN LBRACE initializer_list option(COMMA) RBRACE [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## primary_expression -> LPAREN . expression RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## LPAREN +## + +# clang and gcc expect an expression. + +Ill-formed expression. +An opening parenthesis '(' has just been recognized. +At this point, one of the following is expected: + a type name, if this is a type cast or a compound literal; or + an expression, if this is a parenthesized expression. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ TILDE XOR_ASSIGN +## +## Ends in an error in state: 56. +## +## unary_expression -> unary_operator . cast_expression [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LEQ LEFT_ASSIGN LEFT HAT GT GEQ EQEQ EQ DIV_ASSIGN COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## unary_operator +## + +# clang and gcc expect an expression. + +Ill-formed use of the unary operator $0. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME AND XOR_ASSIGN +## +## Ends in an error in state: 116. +## +## and_expression -> and_expression AND . equality_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION HAT COMMA COLON BARBAR BAR ANDAND AND ] +## +## The known suffix of the stack is as follows: +## and_expression AND +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME ANDAND XOR_ASSIGN +## +## Ends in an error in state: 105. +## +## logical_and_expression -> logical_and_expression ANDAND . inclusive_or_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION COMMA COLON BARBAR ANDAND ] +## +## The known suffix of the stack is as follows: +## logical_and_expression ANDAND +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME BAR XOR_ASSIGN +## +## Ends in an error in state: 107. +## +## inclusive_or_expression -> inclusive_or_expression BAR . exclusive_or_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION COMMA COLON BARBAR BAR ANDAND ] +## +## The known suffix of the stack is as follows: +## inclusive_or_expression BAR +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME BARBAR XOR_ASSIGN +## +## Ends in an error in state: 128. +## +## logical_or_expression -> logical_or_expression BARBAR . logical_and_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION COMMA COLON BARBAR ] +## +## The known suffix of the stack is as follows: +## logical_or_expression BARBAR +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME HAT XOR_ASSIGN +## +## Ends in an error in state: 109. +## +## exclusive_or_expression -> exclusive_or_expression HAT . and_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION HAT COMMA COLON BARBAR BAR ANDAND ] +## +## The known suffix of the stack is as follows: +## exclusive_or_expression HAT +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME LT XOR_ASSIGN +## +## Ends in an error in state: 99. +## +## relational_expression -> relational_expression relational_operator . shift_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION NEQ LT LEQ HAT GT GEQ EQEQ COMMA COLON BARBAR BAR ANDAND AND ] +## +## The known suffix of the stack is as follows: +## relational_expression relational_operator +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME NEQ XOR_ASSIGN +## +## Ends in an error in state: 113. +## +## equality_expression -> equality_expression equality_operator . relational_expression [ SEMICOLON RPAREN RBRACK RBRACE QUESTION NEQ HAT EQEQ COMMA COLON BARBAR BAR ANDAND AND ] +## +## The known suffix of the stack is as follows: +## equality_expression equality_operator +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME PLUS XOR_ASSIGN +## +## Ends in an error in state: 92. +## +## additive_expression -> additive_expression additive_operator . multiplicative_expression [ SEMICOLON RPAREN RIGHT RBRACK RBRACE QUESTION PLUS NEQ MINUS LT LEQ LEFT HAT GT GEQ EQEQ COMMA COLON BARBAR BAR ANDAND AND ] +## +## The known suffix of the stack is as follows: +## additive_expression additive_operator +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME RIGHT XOR_ASSIGN +## +## Ends in an error in state: 81. +## +## shift_expression -> shift_expression shift_operator . additive_expression [ SEMICOLON RPAREN RIGHT RBRACK RBRACE QUESTION NEQ LT LEQ LEFT HAT GT GEQ EQEQ COMMA COLON BARBAR BAR ANDAND AND ] +## +## The known suffix of the stack is as follows: +## shift_expression shift_operator +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME STAR XOR_ASSIGN +## +## Ends in an error in state: 86. +## +## multiplicative_expression -> multiplicative_expression multiplicative_operator . cast_expression [ STAR SLASH SEMICOLON RPAREN RIGHT RBRACK RBRACE QUESTION PLUS PERCENT NEQ MINUS LT LEQ LEFT HAT GT GEQ EQEQ COMMA COLON BARBAR BAR ANDAND AND ] +## +## The known suffix of the stack is as follows: +## multiplicative_expression multiplicative_operator +## + +# clang and gcc expect an expression. + +Ill-formed use of the binary operator $0. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME XOR_ASSIGN XOR_ASSIGN +## +## Ends in an error in state: 77. +## +## assignment_expression -> unary_expression assignment_operator . assignment_expression [ SEMICOLON RPAREN RBRACK RBRACE COMMA COLON ] +## +## The known suffix of the stack is as follows: +## unary_expression assignment_operator +## + +# clang and gcc expect an expression. + +Ill-formed use of the assignment operator $0. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 135. +## +## argument_expression_list -> argument_expression_list COMMA . assignment_expression [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## argument_expression_list COMMA +## + +# Here, we could say more about the context if we parameterized +# argument_expression_list with a context. For the moment, let +# us just say that an expression is expected at this point. + +# clang and gcc expect an expression. + +Ill-formed list of expressions. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME DOT XOR_ASSIGN +## +## Ends in an error in state: 141. +## +## postfix_expression -> postfix_expression DOT . general_identifier [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## postfix_expression DOT +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME PTR XOR_ASSIGN +## +## Ends in an error in state: 62. +## +## postfix_expression -> postfix_expression PTR . general_identifier [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## postfix_expression PTR +## + +# clang and gcc expect an identifier. + +Ill-formed use of the dereferencing operator $0. +At this point, the name of a struct or union member is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME LBRACK PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 138. +## +## expression -> expression . COMMA assignment_expression [ RBRACK COMMA ] +## postfix_expression -> postfix_expression LBRACK expression . RBRACK [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## postfix_expression LBRACK expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +# We know for sure that an array subscript expression has begun, and +# a closing bracket is expected (if the expression is complete). +# The expression could also be completed with a COMMA, but there is +# no reason to mention that -- it can be viewed as part of the +# hypothesis "if the expression is complete". + +Ill-formed expression. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing bracket ']' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME LBRACK XOR_ASSIGN +## +## Ends in an error in state: 137. +## +## postfix_expression -> postfix_expression LBRACK . expression RBRACK [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## postfix_expression LBRACK +## + +Ill-formed expression. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 134. +## +## argument_expression_list -> argument_expression_list . COMMA assignment_expression [ RPAREN COMMA ] +## option(argument_expression_list) -> argument_expression_list . [ RPAREN ] +## +## The known suffix of the stack is as follows: +## argument_expression_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 133, spurious reduction of production argument_expression_list -> assignment_expression +## + +Up to this point, a list of expressions has been recognized: + $0 +If this list is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME LPAREN XOR_ASSIGN +## +## Ends in an error in state: 64. +## +## postfix_expression -> postfix_expression LPAREN . option(argument_expression_list) RPAREN [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## postfix_expression LPAREN +## + +# gcc and clang expect an expression: this is incomplete. + +Ill-formed expression. +At this point, a list of expressions, +followed with a closing parenthesis ')', is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME QUESTION PRE_NAME VAR_NAME COLON XOR_ASSIGN +## +## Ends in an error in state: 125. +## +## conditional_expression -> logical_or_expression QUESTION expression COLON . conditional_expression [ SEMICOLON RPAREN RBRACK RBRACE COMMA COLON ] +## +## The known suffix of the stack is as follows: +## logical_or_expression QUESTION expression COLON +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME QUESTION XOR_ASSIGN +## +## Ends in an error in state: 103. +## +## conditional_expression -> logical_or_expression QUESTION . expression COLON conditional_expression [ SEMICOLON RPAREN RBRACK RBRACE COMMA COLON ] +## +## The known suffix of the stack is as follows: +## logical_or_expression QUESTION +## + +Ill-formed conditional expression. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME VAR_NAME QUESTION PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 121. +## +## conditional_expression -> logical_or_expression QUESTION expression . COLON conditional_expression [ SEMICOLON RPAREN RBRACK RBRACE COMMA COLON ] +## expression -> expression . COMMA assignment_expression [ COMMA COLON ] +## +## The known suffix of the stack is as follows: +## logical_or_expression QUESTION expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +# gcc and clang simply expect a colon. + +Ill-formed conditional expression. +Up to this point, an expression, '?', and an expression have been recognized: + $2 + $1 + $0 +If the last expression is complete, +then at this point, a colon ':' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: PACKED LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 381. +## +## argument_expression_list -> argument_expression_list . COMMA assignment_expression [ RPAREN COMMA ] +## attribute_specifier -> PACKED LPAREN argument_expression_list . RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PACKED LPAREN argument_expression_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 133, spurious reduction of production argument_expression_list -> assignment_expression +## + +Ill-formed $2 attribute. +Up to this point, a list of expressions has been recognized: + $0 +If this list is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: PACKED LPAREN XOR_ASSIGN +## +## Ends in an error in state: 17. +## +## attribute_specifier -> PACKED LPAREN . argument_expression_list RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PACKED LPAREN +## + +# clang expects a "parameter declarator" (?). +# gcc expects "declaration specifiers or ‘...’". +# Which is incorrect, since an ellipsis is rejected here. + +Ill-formed $1 attribute. +At this point, a list of expressions is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 22. +## +## primary_expression -> PRE_NAME . VAR_NAME [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RBRACK RBRACE QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA COLON BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## + +Ill-formed expression. +The following identifier is used as a variable, but has been defined as a type: + $0 + +# ------------------------------------------------------------------------------ + +translation_unit_file: PACKED XOR_ASSIGN +## +## Ends in an error in state: 16. +## +## attribute_specifier -> PACKED . LPAREN argument_expression_list RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER RBRACK PRE_NAME PLUS PACKED MINUS LPAREN LONG LBRACK LBRACE INT INLINE INC FLOAT EXTERN EQ ENUM DOUBLE DEC CONSTANT CONST COMMA COLON CHAR BUILTIN_VA_ARG BANG AUTO ATTRIBUTE AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PACKED +## + +# This one seems important, since CompCert currently does not support __packed__ +# without an argument. + +Ill-formed $0 attribute. +At this point, an opening parenthesis '(', +followed with a possibly empty list of expressions, +is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: SEMICOLON XOR_ASSIGN +## +## Ends in an error in state: 399. +## +## translation_unit -> translation_unit . external_declaration [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PRAGMA PACKED LONG INT INLINE FLOAT EXTERN EOF ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## translation_unit -> translation_unit . SEMICOLON [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PRAGMA PACKED LONG INT INLINE FLOAT EXTERN EOF ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## translation_unit_file -> translation_unit . EOF [ # ] +## +## The known suffix of the stack is as follows: +## translation_unit +## +translation_unit_file: XOR_ASSIGN +## +## Ends in an error in state: 0. +## +## translation_unit_file' -> . translation_unit_file [ # ] +## +## The known suffix of the stack is as follows: +## +## +# The king of all syntax errors: an error in the initial state. + +# Anyway, we are at the toplevel. + +# clang and gcc want an identifier or an opening parenthesis, which is way incomplete. + +At this point, one of the following is expected: + a function definition; or + a declaration; or + a pragma; or + the end of the file. + +# ------------------------------------------------------------------------------ + +translation_unit_file: TYPEDEF PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 384. +## +## declaration_specifiers_typedef -> TYPEDEF list(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## TYPEDEF list(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: PRE_NAME TYPEDEF_NAME TYPEDEF XOR_ASSIGN +## +## Ends in an error in state: 393. +## +## declaration_specifiers_typedef -> typedef_name list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## typedef_name list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) +## +translation_unit_file: VOLATILE TYPEDEF PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 406. +## +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: VOLATILE PRE_NAME TYPEDEF_NAME TYPEDEF XOR_ASSIGN +## +## Ends in an error in state: 412. +## +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) +## +translation_unit_file: TYPEDEF INT XOR_ASSIGN +## +## Ends in an error in state: 386. +## +## declaration_specifiers_typedef -> TYPEDEF list(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## TYPEDEF list(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: INT TYPEDEF XOR_ASSIGN +## +## Ends in an error in state: 397. +## +## declaration_specifiers_typedef -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) TYPEDEF list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) TYPEDEF list(declaration_specifier_no_typedef_name) +## +translation_unit_file: VOLATILE TYPEDEF INT XOR_ASSIGN +## +## Ends in an error in state: 408. +## +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: VOLATILE INT TYPEDEF XOR_ASSIGN +## +## Ends in an error in state: 416. +## +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) TYPEDEF list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) TYPEDEF list(declaration_specifier_no_typedef_name) +## + +# We have begun a type definition (a.k.a. declaration_specifiers_typedef). +# To complete this type definition, +# we expect a possibly-empty list declaration_specifiers_no_type?, +# or declaration_specifiers_no_typedef_name?, +# (depending on which example sentence one looks at) +# which (in all cases) means a list of: +# storage class specifiers, +# type qualifiers, +# function specifiers (i.e., INLINE, but I suspect this is illegal here). +# and (in the second case) also includes: +# type_specifier_no_typedef_name (e.g., INT, etc.). +# After this type definition, +# we expect typedef_declarator_list? SEMICOLON. + +# We omit the possibility of giving another type specifier, such as INT. + +# We could omit the possibility of a storage class specifier and a type qualifier. + +# gcc and clang expect identifier or '(', which is correct but incomplete (and too low-level). + +Ill-formed type definition. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a list of declarators, followed with a semicolon ';'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: TYPEDEF XOR_ASSIGN +## +## Ends in an error in state: 7. +## +## declaration_specifiers_typedef -> TYPEDEF list(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> TYPEDEF list(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## TYPEDEF list(declaration_specifier_no_type) +## +translation_unit_file: VOLATILE TYPEDEF XOR_ASSIGN +## +## Ends in an error in state: 404. +## +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) +## + +# We have seen the TYPEDEF keyword, and possibly some declaration_specifiers_no_type. +# We expect: +# possibly more declaration_specifiers_no_type?, +# which means a list of: +# storage class specifiers, +# type qualifiers, +# function specifiers (i.e., INLINE, but I suspect this is illegal here). +# followed with a type specifier. + +# gcc and clang expect identifier or '('. + +Ill-formed type definition. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN VOLATILE XOR_ASSIGN +## +## Ends in an error in state: 217. +## +## declaration_specifiers(parameter_declaration) -> rlist(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) [ STAR RPAREN PRE_NAME LPAREN LBRACK COMMA ] +## declaration_specifiers(parameter_declaration) -> rlist(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR RPAREN PRE_NAME LPAREN LBRACK COMMA ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 209, spurious reduction of production rlist(declaration_specifier_no_type) -> type_qualifier_noattr +## + +# Analogous to the above, except we are in the context of a parameter declaration, +# and (obviously) have not seen a TYPEDEF keyword. +# We expect possibly more declaration_specifiers_no_type? +# followed with a type specifier. +# I think it is OK to forbid INLINE here. + +# (At this point, our declaration_specifiers will be complete, and the +# continuation would be declarator, abstract_declarator, or nothing, +# which implies COMMA or RPAREN. Let's not mention that, and describe +# things only up to the (required) type specifier.) + +Ill-formed parameter declaration. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 391. +## +## declaration_specifiers(declaration(external_declaration)) -> typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> typedef_name list(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: VOLATILE PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 410. +## +## declaration_specifiers(declaration(external_declaration)) -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: INT XOR_ASSIGN +## +## Ends in an error in state: 395. +## +## declaration_specifiers(declaration(external_declaration)) -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . TYPEDEF list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: VOLATILE INT XOR_ASSIGN +## +## Ends in an error in state: 414. +## +## declaration_specifiers(declaration(external_declaration)) -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . TYPEDEF list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## + +# We have seen a TYPEDEF_NAME or a primitive type specifier, +# and possibly some declaration_specifiers_no_type. +# We expect: +# possibly more declaration_specifier_no_type or declaration_specifier_no_typedef_name, +# which means a list of: +# storage class specifiers, +# type qualifiers, +# function specifiers, +# possibly type specifiers, +# possibly followed with a TYPEDEF keyword. + +# Note that we can get here via spurious reductions (e.g. "enum foo" can +# be considered a complete enum_specifier, hence a complete type_specifier). +# Thus, the list of permitted continuations below can be slightly incomplete: +# an opening brace could be used to continue "enum foo". + +# Let's NOT mention the possibility of placing TYPEDEF somewhere in the middle. +# This means we pretend to be definitely in a declaration_specifiers(declaration). +# In other words, we are in the beginning of a declaration of function definition +# (we do not know which, yet). + +# Let's also ignore the possibility of writing INLINE *after* the result type, +# which sounds awkward. + +# If this declaration_specifiers is complete, +# then we expect: +# init_declarator_list? SEMICOLON if this is a declaration; +# declarator if this is a function definition. +# (followed with a function body) + +# gcc and clang expect identifier or '(', which is very low-level. + +# We simplify "a list of init declarators" to "an init declarator". + +# Our message is probably too elaborate; we could omit certain elements, +# or try to simplify our description in the case of a function definition. + +Ill-formed declaration or function definition. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + an init declarator, + if this is a declaration; or + a declarator, + followed with a function body, + if this is a function definition. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 196. +## +## declaration_specifiers(parameter_declaration) -> typedef_name list(declaration_specifier_no_type) . [ STAR RPAREN PRE_NAME LPAREN LBRACK COMMA ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN VOLATILE PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 219. +## +## declaration_specifiers(parameter_declaration) -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . [ STAR RPAREN PRE_NAME LPAREN LBRACK COMMA ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT XOR_ASSIGN +## +## Ends in an error in state: 202. +## +## declaration_specifiers(parameter_declaration) -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR RPAREN PRE_NAME LPAREN LBRACK COMMA ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN VOLATILE INT XOR_ASSIGN +## +## Ends in an error in state: 221. +## +## declaration_specifiers(parameter_declaration) -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR RPAREN PRE_NAME LPAREN LBRACK COMMA ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## + +# Analogous to the above situation, except this time, we are in the +# context of a parameter declaration (as opposed to a declaration or +# function definition). This rules out 'typedef' and 'inline', for real, +# I think. Also, this changes the continuation. + +# We have seen a type specifier, +# and possibly some declaration_specifiers_no_type. +# We expect: +# possibly more declaration_specifier_no_type or declaration_specifier_no_typedef_name, +# which means a list of: +# storage class specifiers, +# type qualifiers. +# (omitting the possibility of another type specifier) + +# If this declaration_specifiers(parameter_declaration) is complete, +# then we expect: +# declarator +# abstract_declarator +# or neither, which means that the parameter_declaration is over, +# which means we expect COMMA or RPAREN. + +# We could say that $1 has been interpreted as a type specifier, +# although I don't know if that would help. + +# clang expects ')'. +# gcc expects ‘;’, ‘,’ or ‘)’. The semicolon seems incorrect. + +Ill-formed parameter declaration. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a declarator; or + an abstract declarator; or + a comma ',', followed with a parameter declaration; or + a closing parenthesis ')'. + +# # ------------------------------------------------------------------------------ + +translation_unit_file: VOLATILE XOR_ASSIGN +## +## Ends in an error in state: 402. +## +## declaration_specifiers(declaration(external_declaration)) -> rlist(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers(declaration(external_declaration)) -> rlist(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) TYPEDEF list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 209, spurious reduction of production rlist(declaration_specifier_no_type) -> type_qualifier_noattr +## + +# We have seen some specifiers or qualifiers. We have probably seen at least +# one of them, otherwise we would be at the top level of the file, and the +# error would be signaled in another state, I think. + +# This could be the beginning of a declaration or function definition. + +# It could in theory be the beginning of a type definition, but only +# if the TYPEDEF keyword is not in front, which sounds awkward, so +# let's ignore that. + +# Again, we ignore the possibility of INLINE when not in front, as it +# is awkward. + +# We have not yet seen a type specifier, so we must see it, regardless +# of whether this is a declaration or function definition. + +Ill-formed declaration or function definition. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE VOLATILE XOR_ASSIGN +## +## Ends in an error in state: 512. +## +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) TYPEDEF list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 209, spurious reduction of production rlist(declaration_specifier_no_type) -> type_qualifier_noattr +## +# Identical to the previous one, except we are not at the top level, +# so we know this cannot be the beginning of a function definition. + +Ill-formed declaration. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE PRE_NAME TYPEDEF_NAME VOLATILE XOR_ASSIGN +## +## Ends in an error in state: 509. +## +## declaration_specifiers(declaration(block_item)) -> typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> typedef_name list(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE VOLATILE PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 514. +## +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE INT XOR_ASSIGN +## +## Ends in an error in state: 511. +## +## declaration_specifiers(declaration(block_item)) -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . TYPEDEF list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE VOLATILE INT XOR_ASSIGN +## +## Ends in an error in state: 516. +## +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . TYPEDEF list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## + +# This is analogous to the error sentence TYPEDEF_NAME VOLATILE XOR_ASSIGN, +# except we are inside a block, instead of at the top level, so we +# know that this cannot be the beginning of a function definition. + +# This is an interesting situation where, by using phantom parameters, +# we have forced a distinction between two states that would NOT be +# distinguished in a canonical automaton. Indeed, the lookahead sets +# are the same: the states would be the same if the phantom parameters +# were erased. + +# Assuming that the list of init declarators is nonempty, we say that +# we expect an init declarator, instead of saying that we expect a +# possibly empty, comma-separated list of init declarators, followed +# with a semicolon. + +# We do not distinguish the case where we have seen a primitive type +# specifier, so another primitive type specifier would be OK. + +# gcc and clang expect identifier or '(', which is incomplete and low-level. + +Ill-formed declaration. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + an init declarator. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 177. +## +## struct_declaration -> specifier_qualifier_list(struct_declaration) . option(struct_declarator_list) SEMICOLON [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT SIGNED SHORT RESTRICT RBRACE PRE_NAME PACKED LONG INT FLOAT ENUM DOUBLE CONST CHAR ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## specifier_qualifier_list(struct_declaration) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 163, spurious reduction of production specifier_qualifier_list(struct_declaration) -> typedef_name option(type_qualifier_list) +## + +# We have (spuriously) recognized a specifier_qualifier_list, +# part of a struct_declaration. +# Thus, we expect: +# more type qualifiers or specifiers (part of the specifier_qualifier_list), or +# a struct declarator, or +# a semicolon. + +# The nonterminal symbol is officially called struct-declaration. +# But this means struct *or union*, +# and it is a declaration of a struct or union *member*. + +# It seems good to show the type specifier that we have just read (if +# there is one), as it could be a variable name that has been +# mis-classified as a type name, I suppose. + +# clang's message is analogous to ours. +# gcc expects identifier or '('. + +Ill-formed struct declaration. +Up to this point, +a list of type qualifiers and type specifiers has been recognized: + $0 +If this list is complete, then +at this point, one of the following is expected: + a struct declarator; or + a semicolon ';'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE LONG COLON CONSTANT RPAREN +## +## Ends in an error in state: 282. +## +## option(struct_declarator_list) -> struct_declarator_list . [ SEMICOLON ] +## struct_declarator_list -> struct_declarator_list . COMMA struct_declarator [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## struct_declarator_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 57, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 287, spurious reduction of production struct_declarator -> option(declarator) COLON conditional_expression +## In state 289, spurious reduction of production struct_declarator_list -> struct_declarator +## + +# We have seen a non-empty struct_declarator_list. + +# clang expects a semicolon, like us. +# gcc expects too many things (incorrect). + +Ill-formed struct declaration. +Up to this point, a list of struct declarators has been recognized: + $0 +If this list is complete, +then at this point, a semicolon ';' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE INT COLON XOR_ASSIGN +## +## Ends in an error in state: 286. +## +## struct_declarator -> option(declarator) COLON . conditional_expression [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## option(declarator) COLON +## + +Ill-formed struct declarator. +At this point, a constant expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE INT PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 283. +## +## struct_declarator_list -> struct_declarator_list COMMA . struct_declarator [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## struct_declarator_list COMMA +## + +Ill-formed struct declaration. +At this point, a struct declarator is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE INT PRE_NAME VAR_NAME RPAREN +## +## Ends in an error in state: 288. +## +## option(declarator) -> declarator . [ COLON ] +## struct_declarator -> declarator . [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## declarator +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 250, spurious reduction of production declarator_noattrend -> direct_declarator +## In state 255, spurious reduction of production attribute_specifier_list -> +## In state 256, spurious reduction of production declarator -> declarator_noattrend attribute_specifier_list +## + +# Assuming the declarator so far is complete, we expect +# either COLON constant_expression (part of this struct_declarator) +# or something that follows this struct_declarator. + +# clang expects ';'. +# gcc expects many things, including '}', which seems incorrect. + +Ill-formed struct declaration. +Up to this point, a declarator has been recognized: + $0 +If this declarator is complete, +then at this point, one of the following is expected: + a colon ':', followed with a constant expression; or + a comma ',', followed with a struct declarator; or + a semicolon ';'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE VOLATILE ADD_ASSIGN +## +## Ends in an error in state: 171. +## +## option(type_qualifier_list) -> type_qualifier_list . [ VOLATILE RESTRICT PACKED CONST ATTRIBUTE ALIGNAS ] +## specifier_qualifier_list(struct_declaration) -> type_qualifier_list . typedef_name option(type_qualifier_list) [ STAR SEMICOLON PRE_NAME LPAREN COLON ] +## specifier_qualifier_list(struct_declaration) -> type_qualifier_list . type_specifier_no_typedef_name list(specifier_qualifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN COLON ] +## +## The known suffix of the stack is as follows: +## type_qualifier_list +## + +# A list of qualifiers has been read. +# (Probably a nonempty list, otherwise we would be in a different state.) +# We expect a type specifier, or one more qualifier. + +Ill-formed struct declaration. +At this point, one of the following is expected: + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION LBRACE XOR_ASSIGN +## +## Ends in an error in state: 160. +## +## struct_declaration_list -> struct_declaration_list . struct_declaration [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT SIGNED SHORT RESTRICT RBRACE PRE_NAME PACKED LONG INT FLOAT ENUM DOUBLE CONST CHAR ATTRIBUTE ALIGNAS ] +## struct_or_union_specifier -> struct_or_union attribute_specifier_list option(other_identifier) LBRACE struct_declaration_list . RBRACE [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## struct_or_union attribute_specifier_list option(other_identifier) LBRACE struct_declaration_list +## + +# gcc and clang do not seem prepared to accept a struct or union with +# zero members, so they request a type specifier or qualifier. + +At this point, one of the following is expected: + a struct declaration; or + a closing brace '}'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: UNION XOR_ASSIGN +## +## Ends in an error in state: 157. +## +## struct_or_union_specifier -> struct_or_union attribute_specifier_list . option(other_identifier) LBRACE struct_declaration_list RBRACE [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## struct_or_union_specifier -> struct_or_union attribute_specifier_list . general_identifier [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF STRUCT STATIC STAR SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK INT INLINE FLOAT EXTERN ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## struct_or_union attribute_specifier_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 156, spurious reduction of production attribute_specifier_list -> +## + +# gcc expects '{'. +# clang gives a mysterious message: "declaration of anonymous union must be a definition". +# Adding TYPEDEF in front does not help. + +Ill-formed struct or union specifier. +At this point, one of the following is expected: + an attribute specifier; or + an identifier; or + an opening brace '{', followed with a list of members. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 259. +## +## direct_declarator -> LPAREN save_context declarator . RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## LPAREN save_context declarator +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 250, spurious reduction of production declarator_noattrend -> direct_declarator +## In state 255, spurious reduction of production attribute_specifier_list -> +## In state 256, spurious reduction of production declarator -> declarator_noattrend attribute_specifier_list +## + +Up to this point, an opening parenthesis and a declarator have been recognized: + $1 $0 +If this declarator is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT LPAREN XOR_ASSIGN +## +## Ends in an error in state: 183. +## +## direct_declarator -> LPAREN save_context . declarator RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## LPAREN save_context +## + +# clang and gcc expect identifier or '(', as usual. + +Ill-formed direct declarator. +At this point, a declarator is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 276. +## +## identifier_list -> identifier_list . COMMA PRE_NAME VAR_NAME [ RPAREN COMMA ] +## option(identifier_list) -> identifier_list . [ RPAREN ] +## +## The known suffix of the stack is as follows: +## identifier_list +## + +Ill-formed K&R function definition. +Up to this point, a list of identifiers has been recognized: + $0 +If this list is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN XOR_ASSIGN +## +## Ends in an error in state: 189. +## +## context_parameter_type_list -> save_context . parameter_type_list save_context [ RPAREN ] +## direct_declarator -> direct_declarator LPAREN save_context . option(identifier_list) RPAREN [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## direct_declarator LPAREN save_context +## + +# Ignore K&R syntax, just request ANSI syntax. + +# Ignore the distinction between parameter-type-list and parameter-list. + +# clang expects a parameter declarator (which is incomplete). +# gcc expects declaration specifiers or ‘...’ (which is incorrect). + +Ill-formed function definition. +At this point, a list of parameter declarations, +followed with a closing parenthesis ')', is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT STAR RPAREN +## +## Ends in an error in state: 186. +## +## declarator_noattrend -> list(pointer1) STAR option(type_qualifier_list) . direct_declarator [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LONG LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## list(pointer1) -> list(pointer1) STAR option(type_qualifier_list) . [ STAR ] +## type_qualifier_list -> option(type_qualifier_list) . type_qualifier_noattr [ VOLATILE STAR RESTRICT PRE_NAME PACKED LPAREN CONST ATTRIBUTE ALIGNAS ] +## type_qualifier_list -> option(type_qualifier_list) . attribute_specifier [ VOLATILE STAR RESTRICT PRE_NAME PACKED LPAREN CONST ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## list(pointer1) STAR option(type_qualifier_list) +## + +# If the pointer isn't finished, we expect +# one more type qualifier; or +# one more '*', possibly followed with type qualifiers. +# If the pointer is finished, then we expect a direct declarator. + +# If may seem tempting to declare %on_error_reduce "list(pointer1)", but +# that would clash with %on_error_reduce "abstract_declarator(type_name)". +# There are states where both reductions are enabled, and Menhir currently +# refuses to choose between them. + +# clang and gcc expect identifier or '(', as usual. + +Ill-formed declarator. +At this point, one of the following is expected: + a type qualifier; or + a star '*', possibly followed with type qualifiers; or + a direct declarator. + +# ------------------------------------------------------------------------------ + +translation_unit_file: TYPEDEF INT PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 528. +## +## option(typedef_declarator_list) -> typedef_declarator_list . [ SEMICOLON ] +## typedef_declarator_list -> typedef_declarator_list . COMMA typedef_declarator [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## typedef_declarator_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 250, spurious reduction of production declarator_noattrend -> direct_declarator +## In state 255, spurious reduction of production attribute_specifier_list -> +## In state 256, spurious reduction of production declarator -> declarator_noattrend attribute_specifier_list +## In state 532, spurious reduction of production declare_typename(declarator) -> declarator +## In state 531, spurious reduction of production typedef_declarator -> declare_typename(declarator) +## In state 533, spurious reduction of production typedef_declarator_list -> typedef_declarator +## + +# Because attribute_specifier_list, declarator and declarator_noattrend have been marked +# %on_error_reduce, we perform several spurious reductions and end up here. +# Which is good, because the context is clear. + +# If the attribute_specifier_list or declarator was not finished, then we could have accepted: +# an attribute specifier. +# a opening bracket '['. +# an opening parenthesis '('. + +# As far as the C grammar is concerned, typedef_declarator is just declarator. + +# clang says "invalid token after top level declarator", which seems vague. +# gcc expects a list of many things... + +Up to this point, a list of declarators has been recognized: + $0 +If this list is complete, +then at this point, a semicolon ';' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: TYPEDEF INT PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 529. +## +## typedef_declarator_list -> typedef_declarator_list COMMA . typedef_declarator [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## typedef_declarator_list COMMA +## + +At this point, a declarator is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN INT LPAREN RPAREN LPAREN XOR_ASSIGN +## +## Ends in an error in state: 244. +## +## direct_abstract_declarator -> direct_abstract_declarator LPAREN . option(context_parameter_type_list) RPAREN [ RPAREN LPAREN LBRACK COMMA ] +## +## The known suffix of the stack is as follows: +## direct_abstract_declarator LPAREN +## + +At this point, a list of parameter declarations, +followed with a closing parenthesis ')', is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM CONST XOR_ASSIGN +## +## Ends in an error in state: 444. +## +## asm_attributes -> CONST . asm_attributes [ LPAREN ] +## +## The known suffix of the stack is as follows: +## CONST +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM VOLATILE XOR_ASSIGN +## +## Ends in an error in state: 443. +## +## asm_attributes -> VOLATILE . asm_attributes [ LPAREN ] +## +## The known suffix of the stack is as follows: +## VOLATILE +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM XOR_ASSIGN +## +## Ends in an error in state: 442. +## +## asm_statement -> ASM . asm_attributes LPAREN string_literals_list asm_arguments RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ASM +## + +Ill-formed assembly statement. +At this point, one of the following is expected: + an assembly attribute, such as 'volatile'; or + an opening parenthesis '('. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON COLON COLON STRING_LITERAL COMMA XOR_ASSIGN +## +## Ends in an error in state: 468. +## +## asm_flags -> asm_flags COMMA . string_literals_list [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## asm_flags COMMA +## +# We are in the clobber list. +# We have seen a comma, so we expect a string literal. +# first(asm_flags) = STRING_LITERAL +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON COLON COLON XOR_ASSIGN +## +## Ends in an error in state: 465. +## +## asm_arguments -> COLON asm_operands COLON asm_operands COLON . asm_flags [ RPAREN ] +## +## The known suffix of the stack is as follows: +## COLON asm_operands COLON asm_operands COLON +## +# We are at the beginning of the clobber list. +# first(asm_flags) = STRING_LITERAL + +Ill-formed assembly statement. +At this point, a clobbered resource is expected. +Examples of clobbered resources: + "memory" + "eax" + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON COLON COLON STRING_LITERAL XOR_ASSIGN +## +## Ends in an error in state: 467. +## +## asm_arguments -> COLON asm_operands COLON asm_operands COLON asm_flags . [ RPAREN ] +## asm_flags -> asm_flags . COMMA string_literals_list [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## COLON asm_operands COLON asm_operands COLON asm_flags +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 466, spurious reduction of production asm_flags -> string_literals_list +## + +# Let's ignore the possibility of concatenating string literals. +# We are in the clobber list (asm_flags). +# Either we extend it, or we terminate it with RPAREN. + +Ill-formed assembly statement. +Up to this point, a list of clobbered resources has been recognized: + $0 +If this list is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON STRING_LITERAL LPAREN CONSTANT RPAREN XOR_ASSIGN +## +## Ends in an error in state: 462. +## +## asm_arguments -> COLON asm_operands . [ RPAREN ] +## asm_arguments -> COLON asm_operands . COLON asm_operands [ RPAREN ] +## asm_arguments -> COLON asm_operands . COLON asm_operands COLON asm_flags [ RPAREN ] +## +## The known suffix of the stack is as follows: +## COLON asm_operands +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 454, spurious reduction of production asm_operands -> asm_operands_ne +## + +# We have seen one COLON, hence the outputs. (The list of outputs may be empty.) + +Ill-formed assembly statement. +Up to this point, a list of outputs has been recognized: + $0 +If this list is complete, +then at this point, one of the following is expected: + a colon ':', followed with a list of inputs; or + a closing parenthesis ')'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON COLON XOR_ASSIGN +## +## Ends in an error in state: 464. +## +## asm_arguments -> COLON asm_operands COLON asm_operands . [ RPAREN ] +## asm_arguments -> COLON asm_operands COLON asm_operands . COLON asm_flags [ RPAREN ] +## +## The known suffix of the stack is as follows: +## COLON asm_operands COLON asm_operands +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 463, spurious reduction of production asm_operands -> +## + +# We have seen two COLONs, hence the outputs and inputs. (The list of inputs may be empty.) + +# clang requests a closing parenthesis. gcc requests a string literal. + +Ill-formed assembly statement. +Up to this point, a list of outputs and a list of inputs have been recognized: + $2 + $0 +If the latter list is complete, +then at this point, one of the following is expected: + a colon ':', followed with a list of clobbered resources; or + a closing parenthesis ')'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON LBRACK PRE_NAME VAR_NAME RBRACK XOR_ASSIGN +## +## Ends in an error in state: 457. +## +## asm_operand -> asm_op_name . string_literals_list LPAREN expression RPAREN [ RPAREN COMMA COLON ] +## +## The known suffix of the stack is as follows: +## asm_op_name +## + +# Example of asm_operand: [oldval]"=r"(res) +# We have seen an asm_op_name, we now expect a string literal list. +# "=r" is an example of a constraint. + +Ill-formed assembly operand. +At this point, a string literal, representing a constraint, is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON LBRACK PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 452. +## +## asm_op_name -> LBRACK general_identifier . RBRACK [ STRING_LITERAL ] +## +## The known suffix of the stack is as follows: +## LBRACK general_identifier +## + +Ill-formed assembly operand. +At this point, a closing bracket ']' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON LBRACK XOR_ASSIGN +## +## Ends in an error in state: 451. +## +## asm_op_name -> LBRACK . general_identifier RBRACK [ STRING_LITERAL ] +## +## The known suffix of the stack is as follows: +## LBRACK +## + +Ill-formed assembly operand. +At this point, an identifier is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON STRING_LITERAL LPAREN CONSTANT RPAREN COMMA XOR_ASSIGN +## +## Ends in an error in state: 455. +## +## asm_operands_ne -> asm_operands_ne COMMA . asm_operand [ RPAREN COMMA COLON ] +## +## The known suffix of the stack is as follows: +## asm_operands_ne COMMA +## + +# clang and gcc request a string literal (which is incomplete). + +Ill-formed assembly statement. +At this point, an assembly operand is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON STRING_LITERAL LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 460. +## +## asm_operand -> asm_op_name string_literals_list LPAREN expression . RPAREN [ RPAREN COMMA COLON ] +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## asm_op_name string_literals_list LPAREN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +Ill-formed assembly operand. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON STRING_LITERAL LPAREN XOR_ASSIGN +## +## Ends in an error in state: 459. +## +## asm_operand -> asm_op_name string_literals_list LPAREN . expression RPAREN [ RPAREN COMMA COLON ] +## +## The known suffix of the stack is as follows: +## asm_op_name string_literals_list LPAREN +## + +Ill-formed assembly operand. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL COLON STRING_LITERAL XOR_ASSIGN +## +## Ends in an error in state: 458. +## +## asm_operand -> asm_op_name string_literals_list . LPAREN expression RPAREN [ RPAREN COMMA COLON ] +## string_literals_list -> string_literals_list . STRING_LITERAL [ STRING_LITERAL LPAREN ] +## +## The known suffix of the stack is as follows: +## asm_op_name string_literals_list +## + +# If we disregard the concatenation of string literals, then +# at this point, we expect LPAREN. + +Ill-formed assembly operand. +At this point, an opening parenthesis '(', +followed with an expression and a closing parenthesis ')', is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL XOR_ASSIGN +## +## Ends in an error in state: 449. +## +## asm_statement -> ASM asm_attributes LPAREN string_literals_list . asm_arguments RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## string_literals_list -> string_literals_list . STRING_LITERAL [ STRING_LITERAL RPAREN COLON ] +## +## The known suffix of the stack is as follows: +## ASM asm_attributes LPAREN string_literals_list +## +# Expecting either one more string literal, or COLON, or RPAREN. + +# clang requests ')'. gcc requests ':' or ')'. + +Ill-formed assembly statement. +At this point, one of the following is expected: + a string literal, representing one more instruction; or + a colon ':', followed with a list of outputs; or + a closing parenthesis ')'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN XOR_ASSIGN +## +## Ends in an error in state: 448. +## +## asm_statement -> ASM asm_attributes LPAREN . string_literals_list asm_arguments RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ASM asm_attributes LPAREN +## + +Ill-formed assembly statement. +At this point, a string literal, representing an instruction, is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE BREAK XOR_ASSIGN +## +## Ends in an error in state: 440. +## +## jump_statement -> BREAK . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## BREAK +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE CONTINUE XOR_ASSIGN +## +## Ends in an error in state: 435. +## +## jump_statement -> CONTINUE . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## CONTINUE +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO SEMICOLON WHILE LPAREN PRE_NAME VAR_NAME RPAREN XOR_ASSIGN +## +## Ends in an error in state: 559. +## +## iteration_statement -> save_context do_statement1 WHILE LPAREN expression RPAREN . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context do_statement1 WHILE LPAREN expression RPAREN +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE GOTO PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 431. +## +## jump_statement -> GOTO general_identifier . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## GOTO general_identifier +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE ASM LPAREN STRING_LITERAL RPAREN XOR_ASSIGN +## +## Ends in an error in state: 472. +## +## asm_statement -> ASM asm_attributes LPAREN string_literals_list asm_arguments RPAREN . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## ASM asm_attributes LPAREN string_literals_list asm_arguments RPAREN +## + +Ill-formed statement. +At this point, a semicolon ';' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE CASE CONSTANT COLON XOR_ASSIGN +## +## Ends in an error in state: 439. +## +## labeled_statement -> CASE conditional_expression COLON . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## CASE conditional_expression COLON +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DEFAULT COLON XOR_ASSIGN +## +## Ends in an error in state: 434. +## +## labeled_statement -> DEFAULT COLON . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## DEFAULT COLON +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE PRE_NAME VAR_NAME COLON XOR_ASSIGN +## +## Ends in an error in state: 486. +## +## labeled_statement -> general_identifier COLON . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## general_identifier COLON +## + +# gcc and clang request an expression, which seems misleading (incomplete). + +Ill-formed labeled statement. +At this point, a statement is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE CASE CONSTANT SEMICOLON +## +## Ends in an error in state: 438. +## +## labeled_statement -> CASE conditional_expression . COLON statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## CASE conditional_expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 57, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## + +Ill-formed labeled statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a colon ':' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE CASE XOR_ASSIGN +## +## Ends in an error in state: 437. +## +## labeled_statement -> CASE . conditional_expression COLON statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## CASE +## + +Ill-formed labeled statement. +At this point, a constant expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DEFAULT XOR_ASSIGN +## +## Ends in an error in state: 433. +## +## labeled_statement -> DEFAULT . COLON statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## DEFAULT +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 485. +## +## labeled_statement -> general_identifier . COLON statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## general_identifier +## + +# gcc and clang apparently do not allow a TYPEDEF_NAME to be reclassified as a label. + +Ill-formed labeled statement. +At this point, a colon ':' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO SEMICOLON WHILE LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 558. +## +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## iteration_statement -> save_context do_statement1 WHILE LPAREN expression . RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context do_statement1 WHILE LPAREN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +Ill-formed 'do' ... 'while' statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' and a semicolon ';' are expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO SEMICOLON WHILE LPAREN XOR_ASSIGN +## +## Ends in an error in state: 557. +## +## iteration_statement -> save_context do_statement1 WHILE LPAREN . expression RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context do_statement1 WHILE LPAREN +## + +Ill-formed 'do' ... 'while' statement. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO SEMICOLON WHILE XOR_ASSIGN +## +## Ends in an error in state: 556. +## +## iteration_statement -> save_context do_statement1 WHILE . LPAREN expression RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context do_statement1 WHILE +## + +Ill-formed 'do' ... 'while' statement. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO SEMICOLON XOR_ASSIGN +## +## Ends in an error in state: 555. +## +## iteration_statement -> save_context do_statement1 . WHILE LPAREN expression RPAREN SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context do_statement1 +## + +# Quite nicely, in this case, there is no doubt that the statement is +# finished. This is not true in general, I think (the statement could +# be an if/then, and we don't know whether it should have an ELSE +# branch) but is true sometimes (e.g. it is not a conditional +# statement, or it is one and we just saw the ELSE branch). + +Ill-formed 'do' ... 'while' statement. +At this point, a 'while' keyword is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO XOR_ASSIGN +## +## Ends in an error in state: 551. +## +## do_statement1 -> save_context DO . statement [ WHILE ] +## +## The known suffix of the stack is as follows: +## save_context DO +## + +# gcc and clang expect an expression. + +Ill-formed 'do' ... 'while' statement. +At this point, a statement (the loop body) is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR LPAREN SEMICOLON SEMICOLON RPAREN XOR_ASSIGN +## +## Ends in an error in state: 521. +## +## iteration_statement -> save_context FOR LPAREN for_statement_header optional(expression,SEMICOLON) optional(expression,RPAREN) . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context FOR LPAREN for_statement_header optional(expression,SEMICOLON) optional(expression,RPAREN) +## + +Ill-formed 'for' statement. +At this point, a statement (the loop body) is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR LPAREN SEMICOLON SEMICOLON PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 523. +## +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## optional(expression,RPAREN) -> expression . RPAREN [ WHILE TILDE SWITCH STRING_LITERAL STAR SIZEOF SEMICOLON RETURN PRE_NAME PLUS MINUS LPAREN LBRACE INC IF GOTO FOR DO DEFAULT DEC CONTINUE CONSTANT CASE BUILTIN_VA_ARG BREAK BANG ASM AND ALIGNOF ] +## +## The known suffix of the stack is as follows: +## expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +# The use of optional(expression,RPAREN) tells us that we are in a FOR statement. +# Relying on this is a bit fragile, though. + +Ill-formed 'for' statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR LPAREN SEMICOLON SEMICOLON XOR_ASSIGN +## +## Ends in an error in state: 519. +## +## iteration_statement -> save_context FOR LPAREN for_statement_header optional(expression,SEMICOLON) . optional(expression,RPAREN) statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context FOR LPAREN for_statement_header optional(expression,SEMICOLON) +## + +# Expecting the third part of the loop header -- the expression +# that tells what happens after each iteration. + +Ill-formed 'for' statement. +At this point, an optional expression + (evaluated after each execution of the loop body), +followed with a closing parenthesis ')', is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR LPAREN SEMICOLON XOR_ASSIGN +## +## Ends in an error in state: 518. +## +## iteration_statement -> save_context FOR LPAREN for_statement_header . optional(expression,SEMICOLON) optional(expression,RPAREN) statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context FOR LPAREN for_statement_header +## + +# Expecting the second part of the loop header -- the controlling expression. + +Ill-formed 'for' statement. +At this point, an optional expression + (evaluated before each execution of the loop body), +followed with a semicolon ';', is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR LPAREN PRE_NAME VAR_NAME RPAREN +## +## Ends in an error in state: 525. +## +## expression -> expression . COMMA assignment_expression [ SEMICOLON COMMA ] +## optional(expression,SEMICOLON) -> expression . SEMICOLON [ TILDE STRING_LITERAL STAR SIZEOF SEMICOLON RPAREN PRE_NAME PLUS MINUS LPAREN INC DEC CONSTANT BUILTIN_VA_ARG BANG AND ALIGNOF ] +## +## The known suffix of the stack is as follows: +## expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +# At the time of writing, optional(expression,SEMICOLON) is used only in FOR +# loops, but it could be used elsewhere in the future. This is a bit fragile. + +Ill-formed 'for' statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a semicolon ';' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR LPAREN XOR_ASSIGN +## +## Ends in an error in state: 506. +## +## iteration_statement -> save_context FOR LPAREN . for_statement_header optional(expression,SEMICOLON) optional(expression,RPAREN) statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context FOR LPAREN +## + +# gcc and clang say they expect an expression, which is incomplete. + +Ill-formed 'for' statement. +At this point, one of the following is expected: + an optional expression + (evaluated once at the beginning), + followed with a semicolon ';'; or + a declaration. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE FOR XOR_ASSIGN +## +## Ends in an error in state: 505. +## +## iteration_statement -> save_context FOR . LPAREN for_statement_header optional(expression,SEMICOLON) optional(expression,RPAREN) statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context FOR +## + +Ill-formed 'for' statement. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE GOTO XOR_ASSIGN +## +## Ends in an error in state: 430. +## +## jump_statement -> GOTO . general_identifier SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## GOTO +## + +Ill-formed 'goto' statement. +At this point, an identifier (a 'goto' label) is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE DO IF LPAREN CONSTANT RPAREN SEMICOLON ELSE XOR_ASSIGN +## +## Ends in an error in state: 553. +## +## selection_statement -> save_context ifelse_statement1 . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context ifelse_statement1 +## + +Ill-formed 'if' ... 'else' statement. +At this point, a statement is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE IF LPAREN PRE_NAME VAR_NAME RPAREN XOR_ASSIGN +## +## Ends in an error in state: 502. +## +## ifelse_statement1 -> IF LPAREN expression RPAREN save_context . statement ELSE [ WHILE TILDE SWITCH STRING_LITERAL STAR SIZEOF SEMICOLON RETURN PRE_NAME PLUS MINUS LPAREN LBRACE INC IF GOTO FOR DO DEFAULT DEC CONTINUE CONSTANT CASE BUILTIN_VA_ARG BREAK BANG ASM AND ALIGNOF ] +## selection_statement -> save_context IF LPAREN expression RPAREN save_context . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context IF LPAREN expression RPAREN save_context +## + +Ill-formed 'if' statement. +At this point, a statement is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE IF LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 500. +## +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## ifelse_statement1 -> IF LPAREN expression . RPAREN save_context statement ELSE [ WHILE TILDE SWITCH STRING_LITERAL STAR SIZEOF SEMICOLON RETURN PRE_NAME PLUS MINUS LPAREN LBRACE INC IF GOTO FOR DO DEFAULT DEC CONTINUE CONSTANT CASE BUILTIN_VA_ARG BREAK BANG ASM AND ALIGNOF ] +## selection_statement -> save_context IF LPAREN expression . RPAREN save_context statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context IF LPAREN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +Ill-formed 'if' statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE IF LPAREN XOR_ASSIGN +## +## Ends in an error in state: 499. +## +## ifelse_statement1 -> IF LPAREN . expression RPAREN save_context statement ELSE [ WHILE TILDE SWITCH STRING_LITERAL STAR SIZEOF SEMICOLON RETURN PRE_NAME PLUS MINUS LPAREN LBRACE INC IF GOTO FOR DO DEFAULT DEC CONTINUE CONSTANT CASE BUILTIN_VA_ARG BREAK BANG ASM AND ALIGNOF ] +## selection_statement -> save_context IF LPAREN . expression RPAREN save_context statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context IF LPAREN +## + +Ill-formed 'if' statement. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE IF XOR_ASSIGN +## +## Ends in an error in state: 498. +## +## ifelse_statement1 -> IF . LPAREN expression RPAREN save_context statement ELSE [ WHILE TILDE SWITCH STRING_LITERAL STAR SIZEOF SEMICOLON RETURN PRE_NAME PLUS MINUS LPAREN LBRACE INC IF GOTO FOR DO DEFAULT DEC CONTINUE CONSTANT CASE BUILTIN_VA_ARG BREAK BANG ASM AND ALIGNOF ] +## selection_statement -> save_context IF . LPAREN expression RPAREN save_context statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context IF +## + +Ill-formed 'if' statement. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE SWITCH LPAREN PRE_NAME VAR_NAME RPAREN XOR_ASSIGN +## +## Ends in an error in state: 496. +## +## selection_statement -> save_context SWITCH LPAREN expression RPAREN . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context SWITCH LPAREN expression RPAREN +## + + +# Technically, the body of a 'switch' statement is just a statement, +# but in practice, it should be a list of labeled statements, +# enclosed in braces. (Unless someone is writing a Duff loop...) + +# gcc and clang again request an expression... + +Ill-formed 'switch' statement. +At this point, a statement is expected. +It usually takes the form of a series of labeled statements, +enclosed within braces '{' and '}'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE SWITCH LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 495. +## +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## selection_statement -> save_context SWITCH LPAREN expression . RPAREN statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context SWITCH LPAREN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +Ill-formed 'switch' statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE SWITCH LPAREN XOR_ASSIGN +## +## Ends in an error in state: 494. +## +## selection_statement -> save_context SWITCH LPAREN . expression RPAREN statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context SWITCH LPAREN +## + +Ill-formed 'switch' statement. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE SWITCH XOR_ASSIGN +## +## Ends in an error in state: 493. +## +## selection_statement -> save_context SWITCH . LPAREN expression RPAREN statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context SWITCH +## + +Ill-formed 'switch' statement. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE WHILE LPAREN PRE_NAME VAR_NAME RPAREN XOR_ASSIGN +## +## Ends in an error in state: 480. +## +## iteration_statement -> save_context WHILE LPAREN expression RPAREN . statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context WHILE LPAREN expression RPAREN +## + +Ill-formed 'while' statement. +At this point, a statement (the loop body) is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE WHILE LPAREN PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 479. +## +## expression -> expression . COMMA assignment_expression [ RPAREN COMMA ] +## iteration_statement -> save_context WHILE LPAREN expression . RPAREN statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context WHILE LPAREN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +Ill-formed 'while' statement. +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE WHILE LPAREN XOR_ASSIGN +## +## Ends in an error in state: 478. +## +## iteration_statement -> save_context WHILE LPAREN . expression RPAREN statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context WHILE LPAREN +## + +Ill-formed 'while' statement. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE WHILE XOR_ASSIGN +## +## Ends in an error in state: 477. +## +## iteration_statement -> save_context WHILE . LPAREN expression RPAREN statement [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context WHILE +## + +Ill-formed 'while' statement. +At this point, an opening parenthesis '(' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE XOR_ASSIGN +## +## Ends in an error in state: 420. +## +## block_item_list -> option(block_item_list) . block_item [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## compound_statement -> save_context LBRACE option(block_item_list) . RBRACE [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN EOF ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## save_context LBRACE option(block_item_list) +## +# We are possibly at the end of a block. +# +# Note that, because we have used %on_error_reduce to consider some statements +# as complete even when they could be continued ELSE, we may end up here even +# though ELSE is permitted. There is nothing we can do about it. We just omit +# this permitted continuation in our message. + +# clang and gcc say an expression is expected. + +At this point, one of the following is expected: + a declaration; or + a statement; or + a pragma; or + a closing brace '}'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE RETURN XOR_ASSIGN +## +## Ends in an error in state: 422. +## +## jump_statement -> RETURN . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## jump_statement -> RETURN . expression SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## RETURN +## + +# clang and gcc expect an expression. + +Ill-formed 'return' statement. +At this point, one of the following is expected: + an expression; or + a semicolon ';'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE STRING_LITERAL RPAREN +## +## Ends in an error in state: 489. +## +## expression -> expression . COMMA assignment_expression [ SEMICOLON COMMA ] +## expression_statement -> expression . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 58, spurious reduction of production primary_expression -> string_literals_list +## In state 60, spurious reduction of production postfix_expression -> primary_expression +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## +translation_unit_file: VOID PRE_NAME TYPEDEF_NAME LBRACE RETURN STRING_LITERAL WHILE +## +## Ends in an error in state: 424. +## +## expression -> expression . COMMA assignment_expression [ SEMICOLON COMMA ] +## jump_statement -> RETURN expression . SEMICOLON [ WHILE VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF TILDE SWITCH STRUCT STRING_LITERAL STATIC STAR SIZEOF SIGNED SHORT SEMICOLON RETURN RESTRICT REGISTER RBRACE PRE_NAME PRAGMA PLUS PACKED MINUS LPAREN LONG LBRACE INT INLINE INC IF GOTO FOR FLOAT EXTERN ENUM ELSE DOUBLE DO DEFAULT DEC CONTINUE CONSTANT CONST CHAR CASE BUILTIN_VA_ARG BREAK BANG AUTO ATTRIBUTE ASM AND ALIGNOF ALIGNAS ] +## +## The known suffix of the stack is as follows: +## RETURN expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 58, spurious reduction of production primary_expression -> string_literals_list +## In state 60, spurious reduction of production postfix_expression -> primary_expression +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 127, spurious reduction of production expression -> assignment_expression +## + +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a semicolon ';' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 562. +## +## declaration_specifiers(declaration(block_item)) -> typedef_name . list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers_typedef -> typedef_name . list(declaration_specifier_no_type) TYPEDEF list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## general_identifier -> typedef_name . [ COLON ] +## +## The known suffix of the stack is as follows: +## typedef_name +## + +# We see a type name "foo" at the beginning of a block_item, it seems. +# This could be the beginning of a declaration, "foo x". +# In that case, we expect a possibly-empty list declaration_specifiers_no_type?, +# which means a list of: +# storage class specifiers, +# type qualifiers, +# function specifiers (i.e., INLINE, but I suspect this is illegal here). +# After this list, we expect init_declarator_list? SEMICOLON. +# The second form, where this could be a typedef, is very exotic; ignore it. +# This could also be a labeled statement, in which case we expect a colon. +# This case sounds rather unlikely. Let's omit it. + +# We simplify "a list of init declarators" to "an init declarator". + +A type identifier has been recognized. +Assuming this is the beginning of a declaration, +at this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + an init declarator, followed with a semicolon ';'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME RPAREN LBRACE PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 122. +## +## expression -> expression COMMA . assignment_expression [ SEMICOLON RPAREN RBRACK COMMA COLON ] +## +## The known suffix of the stack is as follows: +## expression COMMA +## + +Ill-formed use of the sequencing operator ','. +At this point, an expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME COMMA PRE_NAME VAR_NAME RPAREN +## +## Ends in an error in state: 539. +## +## init_declarator_list -> init_declarator_list . COMMA init_declarator [ SEMICOLON COMMA ] +## option(init_declarator_list) -> init_declarator_list . [ SEMICOLON ] +## +## The known suffix of the stack is as follows: +## init_declarator_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 250, spurious reduction of production declarator_noattrend -> direct_declarator +## In state 547, spurious reduction of production declare_varname(declarator_noattrend) -> declarator_noattrend +## In state 542, spurious reduction of production save_context -> +## In state 543, spurious reduction of production attribute_specifier_list -> +## In state 544, spurious reduction of production init_declarator -> declare_varname(declarator_noattrend) save_context attribute_specifier_list +## In state 541, spurious reduction of production init_declarator_list -> init_declarator_list COMMA init_declarator +## + +Up to this point, a list of declarators has been recognized: + $0 +If this list is complete, +then at this point, a semicolon ';' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 540. +## +## init_declarator_list -> init_declarator_list COMMA . init_declarator [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## init_declarator_list COMMA +## + +Ill-formed declaration. +At this point, an init declarator is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE DOT PRE_NAME VAR_NAME EQ ALIGNAS +## +## Ends in an error in state: 321. +## +## initializer_list -> option(designation) . c_initializer [ RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## option(designation) +## +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE PRE_NAME VAR_NAME COMMA DOT PRE_NAME VAR_NAME EQ ALIGNAS +## +## Ends in an error in state: 325. +## +## initializer_list -> initializer_list COMMA option(designation) . c_initializer [ RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## initializer_list COMMA option(designation) +## + +Ill-formed initializer list. +At this point, an initializer is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE DOT PRE_NAME VAR_NAME XOR_ASSIGN +## +## Ends in an error in state: 328. +## +## designation -> designator_list . EQ [ TILDE STRING_LITERAL STAR SIZEOF PRE_NAME PLUS MINUS LPAREN LBRACE INC DEC CONSTANT BUILTIN_VA_ARG BANG AND ALIGNOF ] +## option(designator_list) -> designator_list . [ LBRACK DOT ] +## +## The known suffix of the stack is as follows: +## designator_list +## + +# We are expecting either one more designator, +# or an EQ sign (which marks the end of the designation). + +Ill-formed designation. +Up to this point, a list of designators has been recognized: + $0 +If this list is complete, +then at this point, an equals sign '=' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE DOT XOR_ASSIGN +## +## Ends in an error in state: 318. +## +## designator -> DOT . general_identifier [ LBRACK EQ DOT ] +## +## The known suffix of the stack is as follows: +## DOT +## + +# clang gives examples of designators. + +Ill-formed designator. +At this point, the name of a struct or union member is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE LBRACK PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 316. +## +## designator -> LBRACK conditional_expression . RBRACK [ LBRACK EQ DOT ] +## +## The known suffix of the stack is as follows: +## LBRACK conditional_expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 57, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## + +Ill-formed designator. +Up to this point, an opening bracket and an expression have been recognized: + $1 $0 +If this expression is complete, +then at this point, a closing bracket ']' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE LBRACK XOR_ASSIGN +## +## Ends in an error in state: 315. +## +## designator -> LBRACK . conditional_expression RBRACK [ LBRACK EQ DOT ] +## +## The known suffix of the stack is as follows: +## LBRACK +## + +Ill-formed designator. +At this point, a constant expression is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 324. +## +## initializer_list -> initializer_list COMMA . option(designation) c_initializer [ RBRACE COMMA ] +## option(COMMA) -> COMMA . [ RBRACE ] +## +## The known suffix of the stack is as follows: +## initializer_list COMMA +## + +# This could be a trailing comma, in which case a closing brace is legal. +# Or, this comma could announce a new option(designation) c_initializer. + +Ill-formed initializer list. +At this point, one of the following is expected: + an optional designation, followed with an initializer; or + a closing brace '}'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE CONSTANT SEMICOLON +## +## Ends in an error in state: 323. +## +## c_initializer -> LBRACE initializer_list . option(COMMA) RBRACE [ SEMICOLON RBRACE COMMA ] +## initializer_list -> initializer_list . COMMA option(designation) c_initializer [ RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## LBRACE initializer_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## In state 327, spurious reduction of production c_initializer -> assignment_expression +## In state 333, spurious reduction of production initializer_list -> option(designation) c_initializer +## + +# Omitting the fact that the closing brace can be preceded with a comma. + +Ill-formed initializer. +Up to this point, a list of initializers has been recognized: + $0 +If this list is complete, +then at this point, a closing brace '}' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ LBRACE XOR_ASSIGN +## +## Ends in an error in state: 322. +## +## c_initializer -> LBRACE . initializer_list option(COMMA) RBRACE [ SEMICOLON RBRACE COMMA ] +## +## The known suffix of the stack is as follows: +## LBRACE +## + +# An initializer list is expected. +# Hence, an initializer is expected. + +# clang and gcc expect an expression (incomplete). + +Ill-formed initializer. +At this point, an optional designation, +followed with an initializer, is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME EQ XOR_ASSIGN +## +## Ends in an error in state: 545. +## +## init_declarator -> declare_varname(declarator_noattrend) save_context attribute_specifier_list EQ . c_initializer [ SEMICOLON COMMA ] +## +## The known suffix of the stack is as follows: +## declare_varname(declarator_noattrend) save_context attribute_specifier_list EQ +## + +# clang and gcc expect an expression (incomplete). + +Ill-formed init declarator. +At this point, an initializer is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LBRACK CONSTANT SEMICOLON +## +## Ends in an error in state: 238. +## +## optional(assignment_expression,RBRACK) -> assignment_expression . RBRACK [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## assignment_expression +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 61, spurious reduction of production unary_expression -> postfix_expression +## In state 65, spurious reduction of production cast_expression -> unary_expression +## In state 88, spurious reduction of production multiplicative_expression -> cast_expression +## In state 82, spurious reduction of production additive_expression -> multiplicative_expression +## In state 101, spurious reduction of production shift_expression -> additive_expression +## In state 78, spurious reduction of production relational_expression -> shift_expression +## In state 94, spurious reduction of production equality_expression -> relational_expression +## In state 110, spurious reduction of production and_expression -> equality_expression +## In state 118, spurious reduction of production exclusive_or_expression -> and_expression +## In state 119, spurious reduction of production inclusive_or_expression -> exclusive_or_expression +## In state 120, spurious reduction of production logical_and_expression -> inclusive_or_expression +## In state 104, spurious reduction of production logical_or_expression -> logical_and_expression +## In state 102, spurious reduction of production conditional_expression -> logical_or_expression +## In state 123, spurious reduction of production assignment_expression -> conditional_expression +## + +# At the time of writing, optional(expression,RBRACK) is used only in direct +# (possibly abstract) declarators, but it could be used elsewhere in the future. +# This is a bit fragile. + +# Ill-formed direct declarator or direct abstract declarator. + +Up to this point, an expression has been recognized: + $0 +If this expression is complete, +then at this point, a closing bracket ']' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME COMMA XOR_ASSIGN +## +## Ends in an error in state: 277. +## +## identifier_list -> identifier_list COMMA . PRE_NAME VAR_NAME [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## identifier_list COMMA +## + +# Strangely, gcc requests ')'. + +Ill-formed K&R function definition. +At this point, an identifier is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME COMMA PRE_NAME TYPEDEF_NAME +## +## Ends in an error in state: 278. +## +## identifier_list -> identifier_list COMMA PRE_NAME . VAR_NAME [ RPAREN COMMA ] +## +## The known suffix of the stack is as follows: +## identifier_list COMMA PRE_NAME +## + +Ill-formed K&R function definition. +The following type name is used as a K&R parameter name: + $0 + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME RPAREN INT XOR_ASSIGN +## +## Ends in an error in state: 581. +## +## declaration_specifiers(declaration(block_item)) -> type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME RPAREN VOLATILE INT XOR_ASSIGN +## +## Ends in an error in state: 586. +## +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_typedef_name) -> list(declaration_specifier_no_typedef_name) . declaration_specifier_no_typedef_name [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC STAR SIGNED SHORT SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME RPAREN PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 579. +## +## declaration_specifiers(declaration(block_item)) -> typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## typedef_name list(declaration_specifier_no_type) +## +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME RPAREN VOLATILE PRE_NAME TYPEDEF_NAME XOR_ASSIGN +## +## Ends in an error in state: 584. +## +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) . [ STAR SEMICOLON PRE_NAME LPAREN ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . storage_class_specifier_no_typedef [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . type_qualifier_noattr [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . function_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## list(declaration_specifier_no_type) -> list(declaration_specifier_no_type) . attribute_specifier [ VOLATILE STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) typedef_name list(declaration_specifier_no_type) +## + +# We omit the case of the empty list of declarators +# We omit the case of successive primitive type specifiers + +Ill-formed K&R parameter declaration. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a list of declarator. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME RPAREN VOLATILE XOR_ASSIGN +## +## Ends in an error in state: 582. +## +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) . typedef_name list(declaration_specifier_no_type) [ STAR SEMICOLON PRE_NAME LPAREN ] +## declaration_specifiers(declaration(block_item)) -> rlist(declaration_specifier_no_type) . type_specifier_no_typedef_name list(declaration_specifier_no_typedef_name) [ STAR SEMICOLON PRE_NAME LPAREN ] +## +## The known suffix of the stack is as follows: +## rlist(declaration_specifier_no_type) +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 209, spurious reduction of production rlist(declaration_specifier_no_type) -> type_qualifier_noattr +## + +Ill-formed K&R parameter declaration. +At this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: VOID PRE_NAME TYPEDEF_NAME PACKED LPAREN CONSTANT RPAREN XOR_ASSIGN +## +## Ends in an error in state: 595. +## +## attribute_specifier_list -> attribute_specifier . attribute_specifier_list [ SEMICOLON LBRACE EQ COMMA ] +## rlist(declaration_specifier_no_type) -> attribute_specifier . [ VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT SIGNED SHORT PRE_NAME LONG INT FLOAT ENUM DOUBLE CHAR ] +## rlist(declaration_specifier_no_type) -> attribute_specifier . rlist(declaration_specifier_no_type) [ VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT SIGNED SHORT PRE_NAME LONG INT FLOAT ENUM DOUBLE CHAR ] +## +## The known suffix of the stack is as follows: +## attribute_specifier +## + +# We have just parsed a list of attribute specifiers, but we cannot +# print it because it is not available. We do not know wether it is +# part of the declaration or whether it is part of the first K&R parameter +# declaration. + +# We omit the possibility of one more attribute specifier + +Ill-formed declaration or function definition. +Up to this point, a list of attribute specifiers has been recognized. +If this is a declaration, + then at this point, a semicolon ';' is expected. +If this is a function definition, + then at this point, an opening brace '{' is expected (for the function body). +If this is the parameter declaration of a K&R function definition, + then at this point, one of the following is expected: + a storage class specifier; or + a type qualifier; or + a type specifier. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT COMMA XOR_ASSIGN +## +## Ends in an error in state: 225. +## +## parameter_list -> parameter_list COMMA . parameter_declaration [ RPAREN COMMA ] +## parameter_type_list -> parameter_list COMMA . ELLIPSIS [ RPAREN ] +## +## The known suffix of the stack is as follows: +## parameter_list COMMA +## + +At this point, one of the following is expected: + a parameter declaration; or + an ellipsis '...'. + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN INT PRE_NAME VAR_NAME SEMICOLON +## +## Ends in an error in state: 224. +## +## parameter_list -> parameter_list . COMMA parameter_declaration [ RPAREN COMMA ] +## parameter_type_list -> parameter_list . [ RPAREN ] +## parameter_type_list -> parameter_list . COMMA ELLIPSIS [ RPAREN ] +## +## The known suffix of the stack is as follows: +## parameter_list +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 250, spurious reduction of production declarator_noattrend -> direct_declarator +## In state 255, spurious reduction of production attribute_specifier_list -> +## In state 256, spurious reduction of production declarator -> declarator_noattrend attribute_specifier_list +## In state 272, spurious reduction of production declare_varname(declarator) -> declarator +## In state 271, spurious reduction of production parameter_declaration -> declaration_specifiers(parameter_declaration) declare_varname(declarator) +## In state 232, spurious reduction of production parameter_list -> parameter_declaration +## + +# We omit the possibility of an ellipsis. +# It can be understood as part of the "if this list is complete..." hypothesis. + +# Strangely, gcc is not bothered by the last SEMICOLON, +# but complains that this is a "forward declaration" of the parameter. + +Up to this point, a list of parameter declarations has been recognized: + $0 +If this list is complete, +then at this point, a closing parenthesis ')' is expected. + +# ------------------------------------------------------------------------------ + +translation_unit_file: PRE_NAME VAR_NAME +## +## Ends in an error in state: 14. +## +## typedef_name -> PRE_NAME . TYPEDEF_NAME [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA COLON AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## + +# This can only happen in a declaration + +Ill-formed declaration. +The following identifier is not a type name, but a type specifier was expected: +$0 + +# ------------------------------------------------------------------------------ + +translation_unit_file: INT PRE_NAME VAR_NAME LPAREN PRE_NAME VAR_NAME RPAREN INT SEMICOLON XOR_ASSIGN +## +## Ends in an error in state: 591. +## +## declaration_list -> declaration_list . kr_param_declaration [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT RESTRICT REGISTER PRE_NAME PACKED LONG LBRACE INT INLINE FLOAT EXTERN ENUM DOUBLE CONST CHAR AUTO ATTRIBUTE ALIGNAS ] +## function_definition1 -> declaration_specifiers(declaration(external_declaration)) declare_varname(declarator_noattrend) save_context declaration_list . [ LBRACE ] +## +## The known suffix of the stack is as follows: +## declaration_specifiers(declaration(external_declaration)) declare_varname(declarator_noattrend) save_context declaration_list +## +# clang requests the function body; gcc requests a declaration :-) + +Ill-formed K&R function definition. +At this point, one of the following is expected: + a declaration; or + an opening brace '{' (for the function body). + +# ------------------------------------------------------------------------------ + +translation_unit_file: ALIGNAS LPAREN PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 27. +## +## primary_expression -> PRE_NAME . VAR_NAME [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RPAREN RIGHT_ASSIGN RIGHT QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## typedef_name -> PRE_NAME . TYPEDEF_NAME [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## +translation_unit_file: ALIGNAS LPAREN VOID LPAREN VOID LPAREN PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 231. +## +## declarator_identifier -> PRE_NAME . low_prec TYPEDEF_NAME [ RPAREN PACKED LPAREN LBRACK ATTRIBUTE ALIGNAS ] +## declarator_identifier -> PRE_NAME . VAR_NAME [ RPAREN PACKED LPAREN LBRACK ATTRIBUTE ALIGNAS ] +## typedef_name -> PRE_NAME . TYPEDEF_NAME [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## +translation_unit_file: UNION PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 38. +## +## general_identifier -> PRE_NAME . VAR_NAME [ XOR_ASSIGN VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF SUB_ASSIGN STRUCT STATIC STAR SLASH SIGNED SHORT SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RESTRICT REGISTER RBRACK RBRACE QUESTION PTR PRE_NAME PLUS PERCENT PACKED OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LONG LEQ LEFT_ASSIGN LEFT LBRACK LBRACE INT INLINE INC HAT GT GEQ FLOAT EXTERN EQEQ EQ ENUM DOUBLE DOT DIV_ASSIGN DEC CONST COMMA COLON CHAR BARBAR BAR AUTO ATTRIBUTE AND_ASSIGN ANDAND AND ALIGNAS ADD_ASSIGN ] +## typedef_name -> PRE_NAME . TYPEDEF_NAME [ XOR_ASSIGN VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL TYPEDEF SUB_ASSIGN STRUCT STATIC STAR SLASH SIGNED SHORT SEMICOLON RPAREN RIGHT_ASSIGN RIGHT RESTRICT REGISTER RBRACK RBRACE QUESTION PTR PRE_NAME PLUS PERCENT PACKED OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LONG LEQ LEFT_ASSIGN LEFT LBRACK LBRACE INT INLINE INC HAT GT GEQ FLOAT EXTERN EQEQ EQ ENUM DOUBLE DOT DIV_ASSIGN DEC CONST COMMA COLON CHAR BARBAR BAR AUTO ATTRIBUTE AND_ASSIGN ANDAND AND ALIGNAS ADD_ASSIGN ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## +translation_unit_file: VOID PRE_NAME TYPEDEF_NAME LBRACE PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 427. +## +## general_identifier -> PRE_NAME . VAR_NAME [ COLON ] +## primary_expression -> PRE_NAME . VAR_NAME [ XOR_ASSIGN SUB_ASSIGN STAR SLASH SEMICOLON RIGHT_ASSIGN RIGHT QUESTION PTR PLUS PERCENT OR_ASSIGN NEQ MUL_ASSIGN MOD_ASSIGN MINUS LT LPAREN LEQ LEFT_ASSIGN LEFT LBRACK INC HAT GT GEQ EQEQ EQ DOT DIV_ASSIGN DEC COMMA BARBAR BAR AND_ASSIGN ANDAND AND ADD_ASSIGN ] +## typedef_name -> PRE_NAME . TYPEDEF_NAME [ VOLATILE TYPEDEF STATIC STAR SEMICOLON RESTRICT REGISTER PRE_NAME PACKED LPAREN INLINE EXTERN CONST COLON AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## +translation_unit_file: VOID PRE_NAME TYPEDEF_NAME LPAREN PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 190. +## +## identifier_list -> PRE_NAME . VAR_NAME [ RPAREN COMMA ] +## typedef_name -> PRE_NAME . TYPEDEF_NAME [ VOLATILE STATIC STAR RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LBRACK INLINE EXTERN CONST COMMA AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## +translation_unit_file: VOID PRE_NAME XOR_ASSIGN +## +## Ends in an error in state: 178. +## +## declarator_identifier -> PRE_NAME . low_prec TYPEDEF_NAME [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## declarator_identifier -> PRE_NAME . VAR_NAME [ VOLATILE VOID UNSIGNED UNION UNDERSCORE_BOOL STRUCT STATIC SIGNED SHORT SEMICOLON RPAREN RESTRICT REGISTER PRE_NAME PACKED LPAREN LONG LBRACK LBRACE INT INLINE FLOAT EXTERN EQ ENUM DOUBLE CONST COMMA COLON CHAR AUTO ATTRIBUTE ALIGNAS ] +## +## The known suffix of the stack is as follows: +## PRE_NAME +## + +# This is not supposed to be possible, since the Lexer can only emit a +# VAR_NAME or a TYPEDEF_NAME after a PRE_NAME + +Internal error when printing a syntax error message. Please report. + +# ------------------------------------------------------------------------------ + + + +# Local Variables: +# mode: shell-script +# End: |