Sfoglia il codice sorgente

Renamed raw_string_* to gnu_raw_string_*

This is GNU extension and GNU extensions seems to be prefixed with
'gnu_' in other places of source code.
pull/317/head
WolodiaM 3 settimane fa
parent
commit
37dc8d34fc
3 ha cambiato i file con 77 aggiunte e 77 eliminazioni
  1. +12
    -12
      grammar.js
  2. +11
    -11
      src/scanner.c
  3. +54
    -54
      test/corpus/expressions.txt

+ 12
- 12
grammar.js Vedi File

@ -36,8 +36,8 @@ module.exports = grammar({
name: 'c',
externals: $ => [
$.raw_string_delimiter,
$.raw_string_content,
$.gnu_raw_string_delimiter,
$.gnu_raw_string_content,
],
conflicts: $ => [
@ -982,21 +982,21 @@ module.exports = grammar({
_string: $ => prec.left(choice(
$.string_literal,
$.raw_string_literal,
$.gnu_raw_string_literal,
$.concatenated_string,
)),
raw_string_literal: $ => seq(
gnu_raw_string_literal: $ => seq(
choice('R"', 'LR"', 'uR"', 'UR"', 'u8R"'),
choice(
seq(
field('delimiter', $.raw_string_delimiter),
field('delimiter', $.gnu_raw_string_delimiter),
'(',
$.raw_string_content,
$.gnu_raw_string_content,
')',
$.raw_string_delimiter,
$.gnu_raw_string_delimiter,
),
seq('(', $.raw_string_content, ')'),
seq('(', $.gnu_raw_string_content, ')'),
),
'"',
),
@ -1319,11 +1319,11 @@ module.exports = grammar({
// Identifier is added to parse macros that are strings, like PRIu64.
concatenated_string: $ => prec.right(seq(
choice(
seq($.identifier, choice($.string_literal, $.raw_string_literal)),
seq(choice($.string_literal, $.raw_string_literal), choice($.string_literal, $.raw_string_literal)),
seq(choice($.string_literal, $.raw_string_literal), $.identifier),
seq($.identifier, choice($.string_literal, $.gnu_raw_string_literal)),
seq(choice($.string_literal, $.gnu_raw_string_literal), choice($.string_literal, $.gnu_raw_string_literal)),
seq(choice($.string_literal, $.gnu_raw_string_literal), $.identifier),
),
repeat(choice($.string_literal, $.raw_string_literal, $.identifier)),
repeat(choice($.string_literal, $.gnu_raw_string_literal, $.identifier)),
)),
string_literal: $ => seq(

+ 11
- 11
src/scanner.c Vedi File

@ -5,7 +5,7 @@
#include <string.h>
#include <wctype.h>
enum TokenType { RAW_STRING_DELIMITER, RAW_STRING_CONTENT };
enum TokenType { GNU_RAW_STRING_DELIMITER, GNU_RAW_STRING_CONTENT };
/// The spec limits delimiters to 16 chars
#define MAX_DELIMITER_LENGTH 16
@ -23,7 +23,7 @@ static inline void reset(Scanner *scanner) {
}
/// Scan the raw string delimiter in R"delimiter(content)delimiter"
static bool scan_raw_string_delimiter(Scanner *scanner, TSLexer *lexer) {
static bool scan_gnu_raw_string_delimiter(Scanner *scanner, TSLexer *lexer) {
if (scanner->delimiter_length > 0) {
// Closing delimiter: must exactly match the opening delimiter.
// We already checked this when scanning content, but this is how we
@ -56,12 +56,12 @@ static bool scan_raw_string_delimiter(Scanner *scanner, TSLexer *lexer) {
}
/// Scan the raw string content in R"delimiter(content)delimiter"
static bool scan_raw_string_content(Scanner *scanner, TSLexer *lexer) {
static bool scan_gnu_raw_string_content(Scanner *scanner, TSLexer *lexer) {
// The progress made through the delimiter since the last ')'.
// The delimiter may not contain ')' so a single counter suffices.
for (int delimiter_index = -1;;) {
// If we hit EOF, consider the content to terminate there.
// This forms an incomplete raw_string_literal, and models the code
// This forms an incomplete gnu_raw_string_literal, and models the code
// well.
if (lexer->eof(lexer)) {
lexer->mark_end(lexer);
@ -103,20 +103,20 @@ void *tree_sitter_c_external_scanner_create() {
bool tree_sitter_c_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) {
Scanner *scanner = (Scanner *)payload;
if (valid_symbols[RAW_STRING_DELIMITER] && valid_symbols[RAW_STRING_CONTENT]) {
if (valid_symbols[GNU_RAW_STRING_DELIMITER] && valid_symbols[GNU_RAW_STRING_CONTENT]) {
// we're in error recovery
return false;
}
// No skipping leading whitespace: raw-string grammar is space-sensitive.
if (valid_symbols[RAW_STRING_DELIMITER]) {
lexer->result_symbol = RAW_STRING_DELIMITER;
return scan_raw_string_delimiter(scanner, lexer);
if (valid_symbols[GNU_RAW_STRING_DELIMITER]) {
lexer->result_symbol = GNU_RAW_STRING_DELIMITER;
return scan_gnu_raw_string_delimiter(scanner, lexer);
}
if (valid_symbols[RAW_STRING_CONTENT]) {
lexer->result_symbol = RAW_STRING_CONTENT;
return scan_raw_string_content(scanner, lexer);
if (valid_symbols[GNU_RAW_STRING_CONTENT]) {
lexer->result_symbol = GNU_RAW_STRING_CONTENT;
return scan_gnu_raw_string_content(scanner, lexer);
}
return false;

+ 54
- 54
test/corpus/expressions.txt Vedi File

@ -1519,58 +1519,58 @@ const char *s6 = LR"FOO(
(init_declarator
(pointer_declarator
(identifier))
(raw_string_literal
(raw_string_content))))
(gnu_raw_string_literal
(gnu_raw_string_content))))
(declaration
(type_qualifier)
(primitive_type)
(init_declarator
(pointer_declarator
(identifier))
(raw_string_literal
(raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))
(gnu_raw_string_literal
(gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))
(declaration
(type_qualifier)
(primitive_type)
(init_declarator
(pointer_declarator
(identifier))
(raw_string_literal
(raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))
(gnu_raw_string_literal
(gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))
(declaration
(type_qualifier)
(primitive_type)
(init_declarator
(pointer_declarator
(identifier))
(raw_string_literal
(raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))
(gnu_raw_string_literal
(gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))
(declaration
(type_qualifier)
(primitive_type)
(init_declarator
(pointer_declarator
(identifier))
(raw_string_literal
(raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))
(gnu_raw_string_literal
(gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))
(declaration
(type_qualifier)
(primitive_type)
(init_declarator
(pointer_declarator
(identifier))
(raw_string_literal
(raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter)))))
(gnu_raw_string_literal
(gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter)))))
================================================================================
Concatenated raw strings
@ -1597,24 +1597,24 @@ hello)RAW" L"world");
function: (identifier)
arguments: (argument_list
(concatenated_string
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))
(identifier)
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))))
(expression_statement
(call_expression
function: (identifier)
arguments: (argument_list
(concatenated_string
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))
(identifier)))))
(expression_statement
(call_expression
@ -1623,19 +1623,19 @@ hello)RAW" L"world");
(concatenated_string
(string_literal
(string_content))
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))))
(expression_statement
(call_expression
function: (identifier)
arguments: (argument_list
(concatenated_string
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))
(string_literal
(string_content))
(identifier)))))
@ -1645,10 +1645,10 @@ hello)RAW" L"world");
arguments: (argument_list
(concatenated_string
(identifier)
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))
(identifier)))))
(expression_statement
(call_expression
@ -1656,10 +1656,10 @@ hello)RAW" L"world");
arguments: (argument_list
(concatenated_string
(identifier)
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))))))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))))))
(expression_statement
(call_expression
function: (identifier)
@ -1667,9 +1667,9 @@ hello)RAW" L"world");
(concatenated_string
(string_literal
(string_content))
(raw_string_literal
delimiter: (raw_string_delimiter)
(raw_string_content)
(raw_string_delimiter))
(gnu_raw_string_literal
delimiter: (gnu_raw_string_delimiter)
(gnu_raw_string_content)
(gnu_raw_string_delimiter))
(string_literal
(string_content)))))))

Caricamento…
Annulla
Salva