From fcc6316ba1fdec325a0a3110b97c332dbd2dab64 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Mon, 5 Dec 2022 10:33:49 +0300 Subject: [PATCH] simplify the connection rule --- grammar.js | 6 ++--- src/grammar.json | 61 ++++++++++++++++++----------------------------- src/parser.c | Bin 106464 -> 104920 bytes 3 files changed, 25 insertions(+), 42 deletions(-) diff --git a/grammar.js b/grammar.js index 1dbf62b..da69a22 100644 --- a/grammar.js +++ b/grammar.js @@ -12,10 +12,8 @@ module.exports = grammar({ connection: ($) => seq( $.identifier, - choice( - seq(seq($.arrow, $.identifier, $._colon, $.label)), - seq(repeat1(seq($.arrow, $.identifier))) - ), + repeat1(seq($.arrow, $.identifier)), + optional(seq($._colon, $.label)), $._end ), diff --git a/src/grammar.json b/src/grammar.json index da84d96..2c275d2 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -33,6 +33,22 @@ "type": "SYMBOL", "name": "identifier" }, + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "arrow" + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + }, { "type": "CHOICE", "members": [ @@ -40,48 +56,17 @@ "type": "SEQ", "members": [ { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "arrow" - }, - { - "type": "SYMBOL", - "name": "identifier" - }, - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "label" - } - ] + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "label" } ] }, { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "arrow" - }, - { - "type": "SYMBOL", - "name": "identifier" - } - ] - } - } - ] + "type": "BLANK" } ] }, diff --git a/src/parser.c b/src/parser.c index 1ab46155b7a66acbf3aa08d22a1fa5ff55a1d81c..e221615bb2185f12c49fdbb9d5df55c5a8aa60bf 100644 GIT binary patch delta 13948 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