From 7490a7ac94e6e6269356ecaeb1baf6edadb94b23 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 12 Feb 2014 18:35:29 -0800 Subject: [PATCH] Change repeat to mean zero-or-more in lexical rules Still need to make it work this way in syntactic rules --- spec/fixtures/parsers/json.c | 4 +++- spec/runtime/json_spec.cpp | 6 ++++++ src/compiler/build_tables/rule_can_be_blank.cpp | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/spec/fixtures/parsers/json.c b/spec/fixtures/parsers/json.c index 8208391f..2df4d80b 100644 --- a/spec/fixtures/parsers/json.c +++ b/spec/fixtures/parsers/json.c @@ -84,11 +84,13 @@ static void ts_lex(TSParser *parser) { if (!((LOOKAHEAD_CHAR() == '\"') || (LOOKAHEAD_CHAR() == '\\'))) ADVANCE(11); + if (LOOKAHEAD_CHAR() == '\"') + ADVANCE(12); if (LOOKAHEAD_CHAR() == '\\') ADVANCE(13); if (']' <= LOOKAHEAD_CHAR() && LOOKAHEAD_CHAR() <= '\\') ADVANCE(15); - LEX_ERROR(2, EXPECT({"-!", "#-"})); + LEX_ERROR(1, EXPECT({""})); case 11: if (!((LOOKAHEAD_CHAR() == '\"') || (LOOKAHEAD_CHAR() == '\\'))) diff --git a/spec/runtime/json_spec.cpp b/spec/runtime/json_spec.cpp index 02c1dd69..67c5b15a 100644 --- a/spec/runtime/json_spec.cpp +++ b/spec/runtime/json_spec.cpp @@ -14,6 +14,12 @@ describe("json", []() { }); it("parses strings", [&]() { + TSDocumentSetText(document, "\"\""); + AssertThat(string(TSDocumentToString(document)), Equals("(value (string))")); + + TSDocumentSetText(document, "\"simple-string\""); + AssertThat(string(TSDocumentToString(document)), Equals("(value (string))")); + TSDocumentSetText(document, "\"this is a \\\"string\\\" within a string\""); AssertThat(string(TSDocumentToString(document)), Equals("(value (string))")); }); diff --git a/src/compiler/build_tables/rule_can_be_blank.cpp b/src/compiler/build_tables/rule_can_be_blank.cpp index 271b9f5f..6cf0f7cc 100644 --- a/src/compiler/build_tables/rule_can_be_blank.cpp +++ b/src/compiler/build_tables/rule_can_be_blank.cpp @@ -26,7 +26,7 @@ namespace tree_sitter { } void visit(const Repeat *rule) { - value = rule_can_be_blank(rule->content); + value = true; } };