lark
lark copied to clipboard
Grammar Syntax For Unordered Groups
Preamble: I've read the docs and searched the issues regarding this topic beforehand and I'm actually kind of surprised it didn't come up yet. So excuse me if I overlooked something here.
Is there a dedicated grammar syntax for unordered groups in lark? Say I want to define a DSL in Lark grammar and I have a set of qualifiers similar to C/C++ which can precede the declaration of a variable in any order, e.g.
private static int a;
static private int b;
Is there a dedicated syntax for this in lark grammar? At the moment, I am solving it by creating an additional terminal which includes all possible combinations of the unordered elements:
decl: qualifier "int" ID ("=" INTEGER)? ";"
qualifier: ("private"? "static"?) | ("static"? "private"?)
This gets pretty clumsy as soon as you have more than three elements. If not already implemented, I would suggest a solution similar to the syntax in xText, where unordered groups can be defined by combining them using the "&" operator like this:
decl: ("private"? & "static"?) "int" ID ("=" INTEGER)? ";"