Преглед изворни кода

Add u|U|u8 string|char support (#36)

pull/29/head
calixteman пре 6 година
committed by Max Brunsfeld
родитељ
комит
2ed529f075
5 измењених фајлова са 39063 додато и 38803 уклоњено
  1. +4
    -4
      grammar.js
  2. +24
    -0
      src/grammar.json
  3. +24
    -0
      src/node-types.json
  4. +38998
    -38798
      src/parser.c
  5. +13
    -1
      test/corpus/expressions.txt

+ 4
- 4
grammar.js Прегледај датотеку

@ -773,26 +773,26 @@ module.exports = grammar({
}, },
char_literal: $ => seq( char_literal: $ => seq(
choice('L\'', '\''),
choice('L\'', 'u\'', 'U\'', 'u8\'', '\''),
choice( choice(
$.escape_sequence, $.escape_sequence,
token.immediate(/[^\n']/) token.immediate(/[^\n']/)
), ),
'\'' '\''
), ),
concatenated_string: $ => seq( concatenated_string: $ => seq(
$.string_literal, $.string_literal,
repeat1($.string_literal) repeat1($.string_literal)
), ),
string_literal: $ => seq( string_literal: $ => seq(
choice('L"', '"'),
choice('L"', 'u"', 'U"', 'u8"', '"'),
repeat(choice( repeat(choice(
token.immediate(prec(1, /[^\\"\n]+/)), token.immediate(prec(1, /[^\\"\n]+/)),
$.escape_sequence $.escape_sequence
)), )),
'"'
'"',
), ),
escape_sequence: $ => token.immediate(seq( escape_sequence: $ => token.immediate(seq(

+ 24
- 0
src/grammar.json Прегледај датотеку

@ -4905,6 +4905,18 @@
"type": "STRING", "type": "STRING",
"value": "L'" "value": "L'"
}, },
{
"type": "STRING",
"value": "u'"
},
{
"type": "STRING",
"value": "U'"
},
{
"type": "STRING",
"value": "u8'"
},
{ {
"type": "STRING", "type": "STRING",
"value": "'" "value": "'"
@ -4959,6 +4971,18 @@
"type": "STRING", "type": "STRING",
"value": "L\"" "value": "L\""
}, },
{
"type": "STRING",
"value": "u\""
},
{
"type": "STRING",
"value": "U\""
},
{
"type": "STRING",
"value": "u8\""
},
{ {
"type": "STRING", "type": "STRING",
"value": "\"" "value": "\""

+ 24
- 0
src/node-types.json Прегледај датотеку

@ -2893,6 +2893,14 @@
"type": "L'", "type": "L'",
"named": false "named": false
}, },
{
"type": "U\"",
"named": false
},
{
"type": "U'",
"named": false
},
{ {
"type": "[", "type": "[",
"named": false "named": false
@ -3069,6 +3077,22 @@
"type": "typedef", "type": "typedef",
"named": false "named": false
}, },
{
"type": "u\"",
"named": false
},
{
"type": "u'",
"named": false
},
{
"type": "u8\"",
"named": false
},
{
"type": "u8'",
"named": false
},
{ {
"type": "union", "type": "union",
"named": false "named": false

+ 38998
- 38798
src/parser.c
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 13
- 1
test/corpus/expressions.txt Прегледај датотеку

@ -118,6 +118,9 @@ int main() {
"b" "c" "d"; "b" "c" "d";
"\"hi\""; "\"hi\"";
L"bonjour"; L"bonjour";
u"guten morgen";
U"buenos dias";
u8"buongiorno";
} }
--- ---
@ -130,6 +133,9 @@ int main() {
(expression_statement (string_literal)) (expression_statement (string_literal))
(expression_statement (concatenated_string (string_literal) (string_literal) (string_literal))) (expression_statement (concatenated_string (string_literal) (string_literal) (string_literal)))
(expression_statement (string_literal (escape_sequence) (escape_sequence))) (expression_statement (string_literal (escape_sequence) (escape_sequence)))
(expression_statement (string_literal))
(expression_statement (string_literal))
(expression_statement (string_literal))
(expression_statement (string_literal))))) (expression_statement (string_literal)))))
============================================ ============================================
@ -142,6 +148,9 @@ int main() {
'\t'; '\t';
'\''; '\'';
L'b'; L'b';
u'c';
U'\xa1';
u8'\x1A';
} }
--- ---
@ -155,7 +164,10 @@ int main() {
(expression_statement (char_literal (escape_sequence))) (expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal (escape_sequence))) (expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal (escape_sequence))) (expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal)))))
(expression_statement (char_literal))
(expression_statement (char_literal))
(expression_statement (char_literal (escape_sequence)))
(expression_statement (char_literal (escape_sequence))))))
============================================ ============================================
Field access Field access

Loading…
Откажи
Сачувај