|
|
|
@ -78,13 +78,10 @@ module.exports = grammar(C, {
|
|
|
|
class_specifier: $ => prec.left(seq(
|
|
|
|
class_specifier: $ => prec.left(seq(
|
|
|
|
'class',
|
|
|
|
'class',
|
|
|
|
choice(
|
|
|
|
choice(
|
|
|
|
$.identifier,
|
|
|
|
$._class_name,
|
|
|
|
seq(
|
|
|
|
seq(
|
|
|
|
optional(choice(
|
|
|
|
optional($._class_name),
|
|
|
|
$.identifier,
|
|
|
|
optional($.base_class_clause),
|
|
|
|
$.scoped_identifier,
|
|
|
|
|
|
|
|
$.template_call
|
|
|
|
|
|
|
|
)),
|
|
|
|
|
|
|
|
$.member_declaration_list
|
|
|
|
$.member_declaration_list
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
@ -93,13 +90,10 @@ module.exports = grammar(C, {
|
|
|
|
union_specifier: $ => prec.left(seq(
|
|
|
|
union_specifier: $ => prec.left(seq(
|
|
|
|
'union',
|
|
|
|
'union',
|
|
|
|
choice(
|
|
|
|
choice(
|
|
|
|
$.identifier,
|
|
|
|
$._class_name,
|
|
|
|
seq(
|
|
|
|
seq(
|
|
|
|
optional(choice(
|
|
|
|
optional($._class_name),
|
|
|
|
$.identifier,
|
|
|
|
optional($.base_class_clause),
|
|
|
|
$.scoped_identifier,
|
|
|
|
|
|
|
|
$.template_call
|
|
|
|
|
|
|
|
)),
|
|
|
|
|
|
|
|
$.member_declaration_list
|
|
|
|
$.member_declaration_list
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
@ -108,18 +102,29 @@ module.exports = grammar(C, {
|
|
|
|
struct_specifier: $ => prec.left(seq(
|
|
|
|
struct_specifier: $ => prec.left(seq(
|
|
|
|
'struct',
|
|
|
|
'struct',
|
|
|
|
choice(
|
|
|
|
choice(
|
|
|
|
$.identifier,
|
|
|
|
$._class_name,
|
|
|
|
seq(
|
|
|
|
seq(
|
|
|
|
optional(choice(
|
|
|
|
optional($._class_name),
|
|
|
|
$.identifier,
|
|
|
|
optional($.base_class_clause),
|
|
|
|
$.scoped_identifier,
|
|
|
|
|
|
|
|
$.template_call
|
|
|
|
|
|
|
|
)),
|
|
|
|
|
|
|
|
$.member_declaration_list
|
|
|
|
$.member_declaration_list
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_class_name: $ => choice(
|
|
|
|
|
|
|
|
$.identifier,
|
|
|
|
|
|
|
|
$.scoped_identifier,
|
|
|
|
|
|
|
|
$.template_call
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
base_class_clause: $ => seq(
|
|
|
|
|
|
|
|
':',
|
|
|
|
|
|
|
|
commaSep1(seq(
|
|
|
|
|
|
|
|
optional('public'),
|
|
|
|
|
|
|
|
$._class_name
|
|
|
|
|
|
|
|
))
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
enum_specifier: ($, original) => prec.left(original),
|
|
|
|
enum_specifier: ($, original) => prec.left(original),
|
|
|
|
|
|
|
|
|
|
|
|
// The `auto` storage class is removed in C++0x in order to allow for the `auto` type.
|
|
|
|
// The `auto` storage class is removed in C++0x in order to allow for the `auto` type.
|
|
|
|
|