mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
Improve value parsing
Parse values as different AST nodes rather than just strings. This allows for better validation and will eventually make expressions possible.
This commit is contained in:
parent
5f0eef5f2e
commit
80b5698533
16 changed files with 352 additions and 138 deletions
|
@ -18,6 +18,7 @@
|
|||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
|
||||
from . import ast
|
||||
from .parse_tree import *
|
||||
|
||||
|
||||
|
@ -35,23 +36,38 @@ class_name = AnyOf(
|
|||
UseIdent("class_name"),
|
||||
)
|
||||
|
||||
value = AnyOf(
|
||||
literal = Group(
|
||||
ast.LiteralValue,
|
||||
AnyOf(
|
||||
Sequence(Keyword("true"), UseLiteral("value", True)),
|
||||
Sequence(Keyword("false"), UseLiteral("value", False)),
|
||||
UseNumber("value"),
|
||||
UseQuoted("value"),
|
||||
)
|
||||
)
|
||||
|
||||
ident_value = Group(
|
||||
ast.IdentValue,
|
||||
UseIdent("value"),
|
||||
)
|
||||
|
||||
flags_value = Group(
|
||||
ast.FlagsValue,
|
||||
Sequence(
|
||||
Group(ast.Flag, UseIdent("value")),
|
||||
Op("|"),
|
||||
Delimited(Group(ast.Flag, UseIdent("value")), Op("|")),
|
||||
),
|
||||
)
|
||||
|
||||
translated_string = Group(
|
||||
ast.TranslatedStringValue,
|
||||
Sequence(
|
||||
Keyword("_"),
|
||||
OpenParen(),
|
||||
UseQuoted("value").expected("a quoted string"),
|
||||
CloseParen().expected("`)`"),
|
||||
UseLiteral("translatable", True),
|
||||
),
|
||||
Sequence(Keyword("True"), UseLiteral("value", True)),
|
||||
Sequence(Keyword("true"), UseLiteral("value", True)),
|
||||
Sequence(Keyword("Yes"), UseLiteral("value", True)),
|
||||
Sequence(Keyword("yes"), UseLiteral("value", True)),
|
||||
Sequence(Keyword("False"), UseLiteral("value", False)),
|
||||
Sequence(Keyword("false"), UseLiteral("value", False)),
|
||||
Sequence(Keyword("No"), UseLiteral("value", False)),
|
||||
Sequence(Keyword("no"), UseLiteral("value", False)),
|
||||
UseIdent("value"),
|
||||
UseNumber("value"),
|
||||
UseQuoted("value"),
|
||||
)
|
||||
|
||||
value = AnyOf(translated_string, literal, flags_value, ident_value)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue