lark icon indicating copy to clipboard operation
lark copied to clipboard

Grammar Syntax For Unordered Groups

Open DennisAtExpleo opened this issue 2 weeks ago • 1 comments

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)? ";"

DennisAtExpleo avatar Jun 14 '24 15:06 DennisAtExpleo