aboutsummaryrefslogtreecommitdiffstats
path: root/bsfs/query/ast
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2022-12-19 13:32:34 +0100
committerMatthias Baumgartner <dev@igsor.net>2022-12-19 13:32:34 +0100
commit791918039979d0743fd2ea4b9a5e74593ff96fd0 (patch)
treec8e6703325ae14e02d2f92e4f6658aa41a6f4701 /bsfs/query/ast
parente94368c75468e3e94382b12705e55d396249eaca (diff)
downloadbsfs-791918039979d0743fd2ea4b9a5e74593ff96fd0.tar.gz
bsfs-791918039979d0743fd2ea4b9a5e74593ff96fd0.tar.bz2
bsfs-791918039979d0743fd2ea4b9a5e74593ff96fd0.zip
query ast file structures and essential interfaces
Diffstat (limited to 'bsfs/query/ast')
-rw-r--r--bsfs/query/ast/__init__.py24
-rw-r--r--bsfs/query/ast/filter_.py30
2 files changed, 54 insertions, 0 deletions
diff --git a/bsfs/query/ast/__init__.py b/bsfs/query/ast/__init__.py
new file mode 100644
index 0000000..0ee7385
--- /dev/null
+++ b/bsfs/query/ast/__init__.py
@@ -0,0 +1,24 @@
+"""Query AST components.
+
+The query AST consists of a Filter syntax tree.
+
+Classes beginning with an underscore (_) represent internal type hierarchies
+and should not be used for parsing. Note that the AST structures do not
+(and cannot) check semantic validity or consistency with a given schema.
+
+Part of the BlackStar filesystem (bsfs) module.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# imports
+import typing
+
+# inner-module imports
+from . import filter_ as filter
+
+# exports
+__all__: typing.Sequence[str] = (
+ 'filter',
+ )
+
+## EOF ##
diff --git a/bsfs/query/ast/filter_.py b/bsfs/query/ast/filter_.py
new file mode 100644
index 0000000..4086fc1
--- /dev/null
+++ b/bsfs/query/ast/filter_.py
@@ -0,0 +1,30 @@
+"""Filter AST.
+
+Part of the BlackStar filesystem (bsfs) module.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# imports
+from collections import abc
+import typing
+
+# exports
+__all__ : typing.Sequence[str] = []
+
+
+## code ##
+
+class _Expression(abc.Hashable):
+ def __repr__(self) -> str:
+ """Return the expressions's string representation."""
+ return f'{typename(self)}()'
+
+ def __hash__(self) -> int:
+ """Return the expression's integer representation."""
+ return hash(type(self))
+
+ def __eq__(self, other: typing.Any) -> bool:
+ """Return True if *self* and *other* are equivalent."""
+ return isinstance(other, type(self))
+
+## EOF ##