Merge pull request #54 from tree-sitter/ns/ansii-c-quoting
Support ANSII-C quoting in strings prefixed with $
This commit is contained in:
commit
c710c0d75b
|
@ -299,6 +299,16 @@ echo "s$"
|
|||
(command (command_name (word)) (string))
|
||||
(command (command_name (word)) (string)))
|
||||
|
||||
========================================
|
||||
Strings with ANSI-C quoting
|
||||
========================================
|
||||
|
||||
echo $'Here\'s johnny!\r\n'
|
||||
|
||||
---
|
||||
|
||||
(program (command (command_name (word)) (ansii_c_string)))
|
||||
|
||||
=========================================
|
||||
Arrays and array expansions
|
||||
=========================================
|
||||
|
|
|
@ -396,6 +396,7 @@ module.exports = grammar({
|
|||
$.word,
|
||||
$.string,
|
||||
$.raw_string,
|
||||
$.ansii_c_string,
|
||||
$.expansion,
|
||||
$.simple_expansion,
|
||||
$.string_expansion,
|
||||
|
@ -445,6 +446,8 @@ module.exports = grammar({
|
|||
|
||||
raw_string: $ => /'[^']*'/,
|
||||
|
||||
ansii_c_string: $ => /\$'([^']|\\')*'/,
|
||||
|
||||
simple_expansion: $ => seq(
|
||||
'$',
|
||||
choice(
|
||||
|
|
|
@ -1626,6 +1626,10 @@
|
|||
"type": "SYMBOL",
|
||||
"name": "raw_string"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "ansii_c_string"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "expansion"
|
||||
|
@ -1866,6 +1870,10 @@
|
|||
"type": "PATTERN",
|
||||
"value": "'[^']*'"
|
||||
},
|
||||
"ansii_c_string": {
|
||||
"type": "PATTERN",
|
||||
"value": "\\$'([^']|\\\\')*'"
|
||||
},
|
||||
"simple_expansion": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -122,22 +122,26 @@ struct TSLanguage {
|
|||
|
||||
#define START_LEXER() \
|
||||
bool result = false; \
|
||||
bool skip = false; \
|
||||
int32_t lookahead; \
|
||||
goto start; \
|
||||
next_state: \
|
||||
lexer->advance(lexer, skip); \
|
||||
start: \
|
||||
skip = false; \
|
||||
lookahead = lexer->lookahead;
|
||||
|
||||
#define ADVANCE(state_value) \
|
||||
{ \
|
||||
lexer->advance(lexer, false); \
|
||||
state = state_value; \
|
||||
goto next_state; \
|
||||
#define ADVANCE(state_value) \
|
||||
{ \
|
||||
state = state_value; \
|
||||
goto next_state; \
|
||||
}
|
||||
|
||||
#define SKIP(state_value) \
|
||||
{ \
|
||||
lexer->advance(lexer, true); \
|
||||
state = state_value; \
|
||||
goto next_state; \
|
||||
#define SKIP(state_value) \
|
||||
{ \
|
||||
skip = true; \
|
||||
state = state_value; \
|
||||
goto next_state; \
|
||||
}
|
||||
|
||||
#define ACCEPT_TOKEN(symbol_value) \
|
||||
|
|
Loading…
Reference in New Issue