Przeglądaj źródła

Allow type qualifier lists in pointer declarators

Fixes tree-sitter/tree-sitter-cpp#7
pull/8/head
Max Brunsfeld 8 lat temu
rodzic
commit
f8cab65c3a
4 zmienionych plików z 44849 dodań i 44460 usunięć
  1. +6
    -1
      corpus/declarations.txt
  2. +4
    -4
      grammar.js
  3. +28
    -0
      src/grammar.json
  4. +44811
    -44455
      src/parser.c

+ 6
- 1
corpus/declarations.txt Wyświetl plik

@ -135,6 +135,7 @@ Pointer variable declarations
char *the_string;
const char **the_strings;
int const * const restrict x;
---
@ -145,7 +146,11 @@ const char **the_strings;
(declaration
(type_qualifier)
(primitive_type)
(pointer_declarator (pointer_declarator (identifier)))))
(pointer_declarator (pointer_declarator (identifier))))
(declaration
(primitive_type)
(type_qualifier)
(pointer_declarator (type_qualifier) (type_qualifier) (identifier))))
============================================
Typedefs

+ 4
- 4
grammar.js Wyświetl plik

@ -201,10 +201,10 @@ module.exports = grammar({
prec(1, seq('(', $._abstract_declarator, ')'))
),
pointer_declarator: $ => prec.right(seq('*', $._declarator)),
pointer_field_declarator: $ => prec.right(seq('*', $._field_declarator)),
pointer_type_declarator: $ => prec.right(seq('*', $._type_declarator)),
abstract_pointer_declarator: $ => prec.right(seq('*', optional($._abstract_declarator))),
pointer_declarator: $ => prec.right(seq('*', repeat($.type_qualifier), $._declarator)),
pointer_field_declarator: $ => prec.right(seq('*', repeat($.type_qualifier), $._field_declarator)),
pointer_type_declarator: $ => prec.right(seq('*', repeat($.type_qualifier), $._type_declarator)),
abstract_pointer_declarator: $ => prec.right(seq('*', repeat($.type_qualifier), optional($._abstract_declarator))),
function_declarator: $ => prec(1, seq($._declarator, $.parameter_list)),
function_field_declarator: $ => prec(1, seq($._field_declarator, $.parameter_list)),

+ 28
- 0
src/grammar.json Wyświetl plik

@ -1363,6 +1363,13 @@
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "SYMBOL",
"name": "_declarator"
@ -1380,6 +1387,13 @@
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "SYMBOL",
"name": "_field_declarator"
@ -1397,6 +1411,13 @@
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "SYMBOL",
"name": "_type_declarator"
@ -1414,6 +1435,13 @@
"type": "STRING",
"value": "*"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "type_qualifier"
}
},
{
"type": "CHOICE",
"members": [

+ 44811
- 44455
src/parser.c
Plik diff jest za duży
Wyświetl plik


Ładowanie…
Anuluj
Zapisz