parser: Simplify parser construction

- Replace several different parse nodes with Match, which matches the
  exact text of a token but not the token type
- Allow arrays to be used in place of Sequence
This commit is contained in:
James Westman 2022-01-04 16:59:19 -06:00
parent ad6a2cf538
commit 8d587b62a0
No known key found for this signature in database
GPG key ID: CE2DBA0ADB654EA6
11 changed files with 182 additions and 211 deletions

View file

@ -23,16 +23,16 @@ from .parse_tree import *
class_name = AnyOf(
Sequence(
[
UseIdent("namespace"),
Op("."),
".",
UseIdent("class_name"),
),
Sequence(
Op("."),
],
[
".",
UseIdent("class_name"),
UseLiteral("ignore_gir", True),
),
],
UseIdent("class_name"),
)
@ -51,31 +51,31 @@ ident_value = Group(
flags_value = Group(
ast.FlagsValue,
Sequence(
[
Group(ast.Flag, UseIdent("value")),
Op("|"),
Delimited(Group(ast.Flag, UseIdent("value")), Op("|")),
),
"|",
Delimited(Group(ast.Flag, UseIdent("value")), "|"),
],
)
translated_string = Group(
ast.TranslatedStringValue,
AnyOf(
Sequence(
Keyword("_"),
OpenParen(),
[
"_",
"(",
UseQuoted("value").expected("a quoted string"),
CloseParen().expected("`)`"),
),
Sequence(
Keyword("C_"),
OpenParen(),
Match(")").expected(),
],
[
"C_",
"(",
UseQuoted("context").expected("a quoted string"),
Comma(),
",",
UseQuoted("value").expected("a quoted string"),
Optional(Comma()),
CloseParen().expected("`)`"),
),
Optional(","),
Match(")").expected(),
],
),
)