Skip to content

Commit

Permalink
Support wildcard nodes _ (#15)
Browse files Browse the repository at this point in the history
  • Loading branch information
stsewd committed Jul 13, 2021
1 parent bc753fa commit 9a2ccff
Show file tree
Hide file tree
Showing 5 changed files with 3,125 additions and 2,262 deletions.
126 changes: 95 additions & 31 deletions corpus/statements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ Anonymous nodes
(program
(named_node
name: (identifier))
(anonymous_node)
(anonymous_node))
(anonymous_node
name: (identifier))
(anonymous_node
name: (identifier)))

================================================================================
Anonymous nodes (series)
Expand All @@ -37,8 +39,51 @@ Anonymous nodes (series)

(program
(grouping
(anonymous_node)
(anonymous_node)))
(anonymous_node
name: (identifier))
(anonymous_node
name: (identifier))))

================================================================================
Wildcard nodes
================================================================================

_ @wildcard

(_) @wildcard

(node _ @wildcard)

(program
name: (_))

(program
name: _)

--------------------------------------------------------------------------------

(program
(anonymous_node
(capture
(identifier)))
(named_node
(capture
(identifier)))
(named_node
(identifier)
(anonymous_node
(capture
(identifier))))
(named_node
(identifier)
(field_definition
(identifier)
(named_node)))
(named_node
(identifier)
(field_definition
(identifier)
(anonymous_node))))

================================================================================
Field names
Expand Down Expand Up @@ -127,7 +172,8 @@ Groups
(list
(named_node
name: (identifier))
(anonymous_node))))
(anonymous_node
name: (identifier)))))

================================================================================
Captures
Expand Down Expand Up @@ -173,26 +219,26 @@ Lists

(program
(list
(anonymous_node)
(anonymous_node)
(anonymous_node)
(anonymous_node
name: (identifier))
(anonymous_node
name: (identifier))
(anonymous_node
name: (identifier))
(capture
name: (identifier)))
(named_node
name: (identifier)
(list
(field_definition
name: (identifier)
(named_node
name: (identifier)))
(named_node))
(field_definition
name: (identifier)
(named_node
name: (identifier)))
(named_node))
(field_definition
name: (identifier)
(named_node
name: (identifier)
quantifier: (quantifier)))
(capture
name: (identifier)))
Expand Down Expand Up @@ -280,18 +326,23 @@ Immediate Child Operator
(grouping
(named_node
name: (identifier))
(anonymous_node)
(anonymous_node
name: (identifier))
(named_node
name: (identifier)))
(grouping
(anonymous_node)
(anonymous_node))
(anonymous_node
name: (identifier))
(anonymous_node
name: (identifier)))
(grouping
(named_node
name: (identifier))
(anonymous_node))
(anonymous_node
name: (identifier)))
(grouping
(anonymous_node)
(anonymous_node
name: (identifier))
(named_node
name: (identifier)))
(grouping
Expand All @@ -300,7 +351,8 @@ Immediate Child Operator
(list
(named_node
name: (identifier))
(anonymous_node))
(anonymous_node
name: (identifier)))
(named_node
name: (identifier)))
(grouping
Expand All @@ -309,7 +361,8 @@ Immediate Child Operator
(list
(named_node
name: (identifier))
(anonymous_node))
(anonymous_node
name: (identifier)))
(named_node
name: (identifier)))
(grouping
Expand All @@ -318,7 +371,8 @@ Immediate Child Operator
(list
(named_node
name: (identifier))
(anonymous_node))
(anonymous_node
name: (identifier)))
(named_node
name: (identifier)))
(grouping
Expand All @@ -327,7 +381,8 @@ Immediate Child Operator
(list
(named_node
name: (identifier))
(anonymous_node))
(anonymous_node
name: (identifier)))
(list
(named_node
name: (identifier))))
Expand All @@ -337,7 +392,8 @@ Immediate Child Operator
(list
(named_node
name: (identifier))
(anonymous_node))
(anonymous_node
name: (identifier)))
(list
(named_node
name: (identifier))))
Expand All @@ -355,40 +411,48 @@ Immediate Child Operator
name: (identifier)))
(named_node
name: (identifier)
(anonymous_node))
(anonymous_node
name: (identifier)))
(named_node
name: (identifier)
(anonymous_node))
(anonymous_node
name: (identifier)))
(named_node
name: (identifier)
(anonymous_node)
(anonymous_node))
(anonymous_node
name: (identifier))
(anonymous_node
name: (identifier)))
(named_node
name: (identifier)
(named_node
name: (identifier))
(anonymous_node)
(anonymous_node
name: (identifier))
(named_node
name: (identifier)))
(named_node
name: (identifier)
(named_node
name: (identifier))
(anonymous_node)
(anonymous_node
name: (identifier))
(named_node
name: (identifier)))
(named_node
name: (identifier)
(named_node
name: (identifier))
(anonymous_node)
(anonymous_node
name: (identifier))
(named_node
name: (identifier)))
(named_node
name: (identifier)
(named_node
name: (identifier))
(anonymous_node)
(anonymous_node
name: (identifier))
(named_node
name: (identifier)))
(named_node
Expand Down
13 changes: 10 additions & 3 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const PREC = {
// Prefer a string over a comment
COMMENT: 1,
STRING: 2,

WILDCARD_NODE: 1,
};

module.exports = grammar({
Expand Down Expand Up @@ -62,9 +64,10 @@ module.exports = grammar({
quantifier: $ => choice("*", "+", "?"),

identifier: $ => /[a-zA-Z0-9.\-_\$#]+/,
_node_identifier: $ => choice($.identifier, prec(PREC.WILDCARD_NODE, "_")),
capture: $ => seq("@", field("name", $.identifier)),
string: $ => $._string,
parameters: $ => repeat1(choice($.capture, $.string, $.identifier)),
parameters: $ => repeat1(choice($.capture, $.string, $._node_identifier)),
comment: $ => token(prec(PREC.COMMENT, seq(";", /.*/))),
list: $ => seq("[", repeat(choice($._definition, $.field_definition)), "]", quantifier($), captures($)),

Expand All @@ -76,11 +79,15 @@ module.exports = grammar({
captures($),
),

anonymous_node: $ => seq($._string, quantifier($), captures($)),
anonymous_node: $ => seq(
field("name", choice(alias($._string, $.identifier), "_")),
quantifier($),
captures($),
),

named_node: $ => seq(
"(",
field("name", $.identifier),
field("name", $._node_identifier),
optional(
seq(
optional("."),
Expand Down
43 changes: 39 additions & 4 deletions src/grammar.json
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,23 @@
"type": "PATTERN",
"value": "[a-zA-Z0-9.\\-_\\$#]+"
},
"_node_identifier": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "PREC",
"value": 1,
"content": {
"type": "STRING",
"value": "_"
}
}
]
},
"capture": {
"type": "SEQ",
"members": [
Expand Down Expand Up @@ -240,7 +257,7 @@
},
{
"type": "SYMBOL",
"name": "identifier"
"name": "_node_identifier"
}
]
}
Expand Down Expand Up @@ -380,8 +397,26 @@
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_string"
"type": "FIELD",
"name": "name",
"content": {
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_string"
},
"named": true,
"value": "identifier"
},
{
"type": "STRING",
"value": "_"
}
]
}
},
{
"type": "CHOICE",
Expand Down Expand Up @@ -428,7 +463,7 @@
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
"name": "_node_identifier"
}
},
{
Expand Down

0 comments on commit 9a2ccff

Please sign in to comment.