EBNF Syntax: C++ Preprocessor (ISO/IEC 14882:1998(E))

Syntax Productions
Variants
Terminals
Literals
Production Cross Reference
Lookahead-1 Parser First Token
Lookahead-1 Parser Ambiguities

Syntax Productions

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Start Symbol (preprocessing_file)

Name Production
additive_expression multiplicative_expression { ( '+' | '-' ) multiplicative_expression }
and_expression equality_expression { '&' equality_expression }
boolean_literal (not used)
  • 'false'
  • 'true'
c_char
c_char_sequence c_char { c_char }
character_literal
conditional_expression logical_or_expression [ '?' pp_expression ':' pp_expression ]
control_line
decimal_literal nonzero_digit { digit }
digit DIGIT
elif_group '#' 'elif' pp_expression new_line [ group ]
else_group '#' 'else' new_line [ group ]
endif_line '#' 'endif' new_line
equality_expression relational_expression { ( '==' | '!=' ) relational_expression }
escape_sequence
exclusive_or_expression and_expression { '^' and_expression }
group { group_part }
group_part
h_char ANY_CHARACTER_EXCEPT_NEWLINE_GT
h_char_sequence h_char { h_char }
header_name
hex_quad hexadecimal_digit hexadecimal_digit hexadecimal_digit hexadecimal_digit
hexadecimal_digit
  • '0'
  • '1'
  • '2'
  • '3'
  • '4'
  • '5'
  • '6'
  • '7'
  • '8'
  • '9'
  • 'a'
  • 'b'
  • 'c'
  • 'd'
  • 'e'
  • 'f'
  • 'A'
  • 'B'
  • 'C'
  • 'D'
  • 'E'
  • 'F'
hexadecimal_escape_sequence '\x' hexadecimal_digit { hexadecimal_digit }
hexadecimal_literal ( '0x' | '0X' ) hexadecimal_digit { hexadecimal_digit }
identifier nondigit { nondigit | digit }
identifier_list identifier { ',' identifier }
if_group
if_section if_group { elif_group } [ else_group ] endif_line
inclusive_or_expression exclusive_or_expression { '|' exclusive_or_expression }
integer_literal
integer_suffix
logical_and_expression inclusive_or_expression { '&&' inclusive_or_expression }
logical_or_expression logical_and_expression { '||' logical_and_expression }
long_suffix
  • 'l'
  • 'L'
lparen LEFT_PARENTHESIS_WITHOUT_LEADING_WS
multiplicative_expression unary_expression { ( '*' | '/' | '%' ) unary_expression }
new_line NEWLINE
nondigit
nonzero_digit
  • '1'
  • '2'
  • '3'
  • '4'
  • '5'
  • '6'
  • '7'
  • '8'
  • '9'
octal_digit
  • '0'
  • '1'
  • '2'
  • '3'
  • '4'
  • '5'
  • '6'
  • '7'
octal_escape_sequence '\' octal_digit [ octal_digit [ octal_digit ] ]
octal_literal '0' { octal_digit }
pp_expression conditional_expression
pp_number [ '.' ] digit { digit | nondigit | ( 'e' | 'E' ) sign | '.' }
pp_tokens { preprocessing_token }
preprocessing_file [ group ]
preprocessing_op_or_punc
  • '{'
  • '}'
  • '['
  • ']'
  • '#'
  • '##'
  • '('
  • ')'
  • '<:'
  • ':>'
  • '<%'
  • '%>'
  • '%:'
  • '%:%:'
  • ';'
  • ':'
  • '...'
  • 'new'
  • 'delete'
  • '?'
  • '::'
  • '.'
  • '.*'
  • '+'
  • '-'
  • '*'
  • '/'
  • '%'
  • '^'
  • '&'
  • '|'
  • '~'
  • '!'
  • '='
  • '<'
  • '>'
  • '+='
  • '-='
  • '*='
  • '/='
  • '%='
  • '^='
  • '&='
  • '|='
  • '<<'
  • '>>'
  • '>>='
  • '<<='
  • '=='
  • '!='
  • '<='
  • '>='
  • '&&'
  • '||'
  • '++'
  • '--'
  • ','
  • '->*'
  • '->'
  • 'and'
  • 'and_eq'
  • 'bitand'
  • 'bitor'
  • 'compl'
  • 'not'
  • 'not_eq'
  • 'or'
  • 'or_eq'
  • 'xor'
  • 'xor_eq'
preprocessing_token
primary_expression
q_char ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE
q_char_sequence q_char { q_char }
relational_expression shift_expression { ( '<' | '>' | '<=' | '>=' ) shift_expression }
replacement_list [ pp_tokens ]
s_char
s_char_sequence s_char { s_char }
shift_expression additive_expression { ( '<<' | '>>' ) additive_expression }
sign
  • '+'
  • '-'
simple_escape_sequence
  • "\'"
  • '\"'
  • '\?'
  • '\\'
  • '\a'
  • '\b'
  • '\f'
  • '\n'
  • '\r'
  • '\t'
  • '\v'
string_literal
unary_expression [ unary_operator ] primary_expression
unary_operator
  • '+'
  • '-'
  • '!'
  • '~'
universal_character_name
unsigned_suffix
  • 'u'
  • 'U'


Variants

none

Terminals

Terminal Used in
ALPHA_CHARACTER nondigit
ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE q_char
ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE_BACKSLASH s_char
ANY_CHARACTER_EXCEPT_NEWLINE_GT h_char
ANY_CHARACTER_EXCEPT_NEWLINE_SQUOTE_BACKSLASH c_char
ANY_NOT_YET_COVERED_NON_WS_CHARACTER preprocessing_token
DIGIT digit
LEFT_PARENTHESIS_WITHOUT_LEADING_WS lparen
NEWLINE new_line

Literals

Literal Used in
! preprocessing_op_or_punc / unary_operator
!= equality_expression / preprocessing_op_or_punc
" header_name / string_literal
# control_line / elif_group / else_group / endif_line / if_group / preprocessing_op_or_punc
## preprocessing_op_or_punc
% multiplicative_expression / preprocessing_op_or_punc
%: preprocessing_op_or_punc
%:%: preprocessing_op_or_punc
%= preprocessing_op_or_punc
%> preprocessing_op_or_punc
& and_expression / preprocessing_op_or_punc
&& logical_and_expression / preprocessing_op_or_punc
&= preprocessing_op_or_punc
' character_literal
( preprocessing_op_or_punc / primary_expression
) control_line / preprocessing_op_or_punc / primary_expression
* multiplicative_expression / preprocessing_op_or_punc
*= preprocessing_op_or_punc
+ additive_expression / preprocessing_op_or_punc / sign / unary_operator
++ preprocessing_op_or_punc
+= preprocessing_op_or_punc
, identifier_list / preprocessing_op_or_punc
- additive_expression / preprocessing_op_or_punc / sign / unary_operator
-- preprocessing_op_or_punc
-= preprocessing_op_or_punc
-> preprocessing_op_or_punc
->* preprocessing_op_or_punc
. pp_number / preprocessing_op_or_punc
.* preprocessing_op_or_punc
... preprocessing_op_or_punc
/ multiplicative_expression / preprocessing_op_or_punc
/= preprocessing_op_or_punc
: conditional_expression / preprocessing_op_or_punc
:: preprocessing_op_or_punc
:> preprocessing_op_or_punc
; preprocessing_op_or_punc
< header_name / preprocessing_op_or_punc / relational_expression
<% preprocessing_op_or_punc
<: preprocessing_op_or_punc
<< preprocessing_op_or_punc / shift_expression
<<= preprocessing_op_or_punc
<= preprocessing_op_or_punc / relational_expression
= preprocessing_op_or_punc
== equality_expression / preprocessing_op_or_punc
> header_name / preprocessing_op_or_punc / relational_expression
>= preprocessing_op_or_punc / relational_expression
>> preprocessing_op_or_punc / shift_expression
>>= preprocessing_op_or_punc
? conditional_expression / preprocessing_op_or_punc
[ preprocessing_op_or_punc
\ octal_escape_sequence
\" simple_escape_sequence
\' simple_escape_sequence
\? simple_escape_sequence
\U universal_character_name
\\ simple_escape_sequence
\a simple_escape_sequence
\b simple_escape_sequence
\f simple_escape_sequence
\n simple_escape_sequence
\r simple_escape_sequence
\t simple_escape_sequence
\u universal_character_name
\v simple_escape_sequence
\x hexadecimal_escape_sequence
] preprocessing_op_or_punc
^ exclusive_or_expression / preprocessing_op_or_punc
^= preprocessing_op_or_punc
_ nondigit
{ preprocessing_op_or_punc
| inclusive_or_expression / preprocessing_op_or_punc
|= preprocessing_op_or_punc
|| logical_or_expression / preprocessing_op_or_punc
} preprocessing_op_or_punc
~ preprocessing_op_or_punc / unary_operator
0 hexadecimal_digit / octal_digit / octal_literal
0X hexadecimal_literal
0x hexadecimal_literal
1 hexadecimal_digit / nonzero_digit / octal_digit
2 hexadecimal_digit / nonzero_digit / octal_digit
3 hexadecimal_digit / nonzero_digit / octal_digit
4 hexadecimal_digit / nonzero_digit / octal_digit
5 hexadecimal_digit / nonzero_digit / octal_digit
6 hexadecimal_digit / nonzero_digit / octal_digit
7 hexadecimal_digit / nonzero_digit / octal_digit
8 hexadecimal_digit / nonzero_digit
9 hexadecimal_digit / nonzero_digit
a hexadecimal_digit
A hexadecimal_digit
and preprocessing_op_or_punc
and_eq preprocessing_op_or_punc
B hexadecimal_digit
b hexadecimal_digit
bitand preprocessing_op_or_punc
bitor preprocessing_op_or_punc
c hexadecimal_digit
C hexadecimal_digit
compl preprocessing_op_or_punc
d hexadecimal_digit
D hexadecimal_digit
define control_line
delete preprocessing_op_or_punc
E hexadecimal_digit / pp_number
e hexadecimal_digit / pp_number
elif elif_group
else else_group
endif endif_line
error control_line
F hexadecimal_digit
f hexadecimal_digit
false boolean_literal
if if_group
ifdef if_group
ifndef if_group
include control_line
L long_suffix
l long_suffix
L" string_literal
L' character_literal
line control_line
new preprocessing_op_or_punc
not preprocessing_op_or_punc
not_eq preprocessing_op_or_punc
or preprocessing_op_or_punc
or_eq preprocessing_op_or_punc
pragma control_line
true boolean_literal
u unsigned_suffix
U unsigned_suffix
undef control_line
xor preprocessing_op_or_punc
xor_eq preprocessing_op_or_punc

Production Cross Reference

Production Used in
additive_expressionshift_expression
and_expressionexclusive_or_expression
c_charc_char_sequence
c_char_sequencecharacter_literal
character_literalpreprocessing_token / primary_expression
conditional_expressionpp_expression
control_linegroup_part
decimal_literalinteger_literal
digitdecimal_literal / identifier / pp_number
elif_groupif_section
else_groupif_section
endif_lineif_section
equality_expressionand_expression
escape_sequencec_char / s_char
exclusive_or_expressioninclusive_or_expression
groupelif_group / else_group / if_group / preprocessing_file
group_partgroup
h_charh_char_sequence
h_char_sequenceheader_name
header_namepreprocessing_token
hex_quaduniversal_character_name
hexadecimal_digithex_quad / hexadecimal_escape_sequence / hexadecimal_literal
hexadecimal_escape_sequenceescape_sequence
hexadecimal_literalinteger_literal
identifiercontrol_line / identifier_list / if_group / preprocessing_token / primary_expression
identifier_listcontrol_line
if_groupif_section
if_sectiongroup_part
inclusive_or_expressionlogical_and_expression
integer_literalprimary_expression
integer_suffixinteger_literal
logical_and_expressionlogical_or_expression
logical_or_expressionconditional_expression
long_suffixinteger_suffix
lparencontrol_line
multiplicative_expressionadditive_expression
new_linecontrol_line / elif_group / else_group / endif_line / group_part / if_group
nondigitidentifier / pp_number
nonzero_digitdecimal_literal
octal_digitoctal_escape_sequence / octal_literal
octal_escape_sequenceescape_sequence
octal_literalinteger_literal
pp_expressionconditional_expression / elif_group / if_group / primary_expression
pp_numberpreprocessing_token
pp_tokenscontrol_line / group_part / replacement_list
preprocessing_file
preprocessing_op_or_puncpreprocessing_token
preprocessing_tokenpp_tokens
primary_expressionunary_expression
q_charq_char_sequence
q_char_sequenceheader_name
relational_expressionequality_expression
replacement_listcontrol_line
s_chars_char_sequence
s_char_sequencestring_literal
shift_expressionrelational_expression
signpp_number
simple_escape_sequenceescape_sequence
string_literalpreprocessing_token
unary_expressionmultiplicative_expression
unary_operatorunary_expression
universal_character_namec_char / nondigit / s_char
unsigned_suffixinteger_suffix
boolean_literalNot used in any production

Lookahead-1 Parser First Token

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Start symbol = preprocessing_file

Name First Tokens
additive_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
and_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
boolean_literal 'false'
'true'
c_char "\'"
'\"'
'\'
'\?'
'\U'
'\\'
'\a'
'\b'
'\f'
'\n'
'\r'
'\t'
'\u'
'\v'
'\x'
ANY_CHARACTER_EXCEPT_NEWLINE_SQUOTE_BACKSLASH
c_char_sequence "\'"
'\"'
'\'
'\?'
'\U'
'\\'
'\a'
'\b'
'\f'
'\n'
'\r'
'\t'
'\u'
'\v'
'\x'
ANY_CHARACTER_EXCEPT_NEWLINE_SQUOTE_BACKSLASH
character_literal "'"
"L'"
conditional_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
control_line '#'
decimal_literal '1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
digit DIGIT
elif_group '#'
else_group '#'
endif_line '#'
equality_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
escape_sequence "\'"
'\"'
'\'
'\?'
'\\'
'\a'
'\b'
'\f'
'\n'
'\r'
'\t'
'\v'
'\x'
exclusive_or_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
group ø
"'"
"L'"
'!'
'!='
'"'
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'L"'
'['
'\U'
'\u'
']'
'^'
'^='
'_'
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
ALPHA_CHARACTER
ANY_NOT_YET_COVERED_NON_WS_CHARACTER
DIGIT
NEWLINE
group_part "'"
"L'"
'!'
'!='
'"'
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'L"'
'['
'\U'
'\u'
']'
'^'
'^='
'_'
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
ALPHA_CHARACTER
ANY_NOT_YET_COVERED_NON_WS_CHARACTER
DIGIT
NEWLINE
h_char ANY_CHARACTER_EXCEPT_NEWLINE_GT
h_char_sequence ANY_CHARACTER_EXCEPT_NEWLINE_GT
header_name '"'
'<'
hex_quad '0'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'A'
'B'
'C'
'D'
'E'
'F'
'a'
'b'
'c'
'd'
'e'
'f'
hexadecimal_digit '0'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'A'
'B'
'C'
'D'
'E'
'F'
'a'
'b'
'c'
'd'
'e'
'f'
hexadecimal_escape_sequence '\x'
hexadecimal_literal '0X'
'0x'
identifier '\U'
'\u'
'_'
ALPHA_CHARACTER
identifier_list '\U'
'\u'
'_'
ALPHA_CHARACTER
if_group '#'
if_section '#'
inclusive_or_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
integer_literal '0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
integer_suffix 'L'
'U'
'l'
'u'
logical_and_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
logical_or_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
long_suffix 'L'
'l'
lparen LEFT_PARENTHESIS_WITHOUT_LEADING_WS
multiplicative_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
new_line NEWLINE
nondigit '\U'
'\u'
'_'
ALPHA_CHARACTER
nonzero_digit '1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
octal_digit '0'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
octal_escape_sequence '\'
octal_literal '0'
pp_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
pp_number '.'
DIGIT
pp_tokens ø
"'"
"L'"
'!'
'!='
'"'
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'L"'
'['
'\U'
'\u'
']'
'^'
'^='
'_'
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
ALPHA_CHARACTER
ANY_NOT_YET_COVERED_NON_WS_CHARACTER
DIGIT
preprocessing_file ø
"'"
"L'"
'!'
'!='
'"'
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'L"'
'['
'\U'
'\u'
']'
'^'
'^='
'_'
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
ALPHA_CHARACTER
ANY_NOT_YET_COVERED_NON_WS_CHARACTER
DIGIT
NEWLINE
preprocessing_op_or_punc '!'
'!='
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'['
']'
'^'
'^='
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
preprocessing_token "'"
"L'"
'!'
'!='
'"'
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'L"'
'['
'\U'
'\u'
']'
'^'
'^='
'_'
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
ALPHA_CHARACTER
ANY_NOT_YET_COVERED_NON_WS_CHARACTER
DIGIT
primary_expression "'"
"L'"
'('
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
ALPHA_CHARACTER
q_char ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE
q_char_sequence ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE
relational_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
replacement_list ø
"'"
"L'"
'!'
'!='
'"'
'##'
'#'
'%'
'%:%:'
'%:'
'%='
'%>'
'&&'
'&'
'&='
'('
')'
'*'
'*='
'+'
'++'
'+='
','
'-'
'--'
'-='
'->'
'->*'
'.'
'.*'
'...'
'/'
'/='
':'
'::'
':>'
';'
'<%'
'<'
'<:'
'<<'
'<<='
'<='
'='
'=='
'>'
'>='
'>>'
'>>='
'?'
'L"'
'['
'\U'
'\u'
']'
'^'
'^='
'_'
'and'
'and_eq'
'bitand'
'bitor'
'compl'
'delete'
'new'
'not'
'not_eq'
'or'
'or_eq'
'xor'
'xor_eq'
'{'
'|'
'|='
'||'
'}'
'~'
ALPHA_CHARACTER
ANY_NOT_YET_COVERED_NON_WS_CHARACTER
DIGIT
s_char "\'"
'\"'
'\'
'\?'
'\U'
'\\'
'\a'
'\b'
'\f'
'\n'
'\r'
'\t'
'\u'
'\v'
'\x'
ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE_BACKSLASH
s_char_sequence "\'"
'\"'
'\'
'\?'
'\U'
'\\'
'\a'
'\b'
'\f'
'\n'
'\r'
'\t'
'\u'
'\v'
'\x'
ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE_BACKSLASH
shift_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
sign '+'
'-'
simple_escape_sequence "\'"
'\"'
'\?'
'\\'
'\a'
'\b'
'\f'
'\n'
'\r'
'\t'
'\v'
string_literal '"'
'L"'
unary_expression "'"
"L'"
'!'
'('
'+'
'-'
'0'
'0X'
'0x'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'\U'
'\u'
'_'
'~'
ALPHA_CHARACTER
unary_operator '!'
'+'
'-'
'~'
universal_character_name '\U'
'\u'
unsigned_suffix 'U'
'u'


Lookahead-1 Parser Ambiguities

Ref Production Ambiguous
Literals/Terminals
Can't decide between the following
#1 control_line '#'
#2 group_part '#'
#3 if_group '#'
#4 preprocessing_token '<'
#5 preprocessing_token '.'
#6 preprocessing_token '"'

Created with ebnf2annot.pl (andreas.gieriet@externsoft.ch)