summaryrefslogtreecommitdiff
path: root/src/server/neo4j_cypher_parser.py
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-03-30 19:43:39 +0300
committerLV-426 <lv-426@taproot.org.il>2015-04-01 22:25:52 +0300
commite79aa51ac7c5c92829877f4a518b8a7505fdd23c (patch)
tree5dfebc954ebbeefcf25e8377ee875d45ad71dfaa /src/server/neo4j_cypher_parser.py
parentfc0f75ca2e5627e10fd88a9096ba92e7acbd2b48 (diff)
neo4j_cypher_parser: have p_node, p_rel inherit from p_label_set_container
Diffstat (limited to 'src/server/neo4j_cypher_parser.py')
-rw-r--r--src/server/neo4j_cypher_parser.py31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/server/neo4j_cypher_parser.py b/src/server/neo4j_cypher_parser.py
index 5f8391ec..4c5c089c 100644
--- a/src/server/neo4j_cypher_parser.py
+++ b/src/server/neo4j_cypher_parser.py
@@ -423,7 +423,30 @@ class e_kv_pair(pt_abs_composite_node): # key value pair
def str__tok_sibling_delim(self, sib_a=None, sib_b=None): return ': '
-class p_node(pt_abs_composite_node): # node pattern: '(...)'
+class p_label_set_container():
+
+ @property
+ def label_set(self):
+ sub_exp_set = self.sub_exp_set_by_type(e_label_set)
+ if 0 == len (sub_exp_set):
+ return None
+ assert 1 == len(sub_exp_set)
+ return sub_exp_set.pop()
+
+ def spawn_label_set(self):
+ """
+ spawn label set adjacent to e_ident
+ """
+
+ id_sub_exp_set = self.sub_exp_set_by_type(e_ident)
+ assert None == self.label_set, 'label set already present'
+ assert 1 == len(id_sub_exp_set), 'label set already present'
+
+ e_id = id_sub_exp_set.pop()
+ lbl_set = e_id.spawn_sibling__adjacent(e_label_set)
+ return lbl_set
+
+class p_node(pt_abs_composite_node, p_label_set_container): # node pattern: '(...)'
"""
node pattern
"""
@@ -440,14 +463,10 @@ class p_node(pt_abs_composite_node): # node pattern: '(...)'
def str__tok_close(self): return ')'
- @property
- def label_set(self):
- return self.sub_exp_set_by_type(e_label_set)
-
@classmethod
def rgx(self, g_name): return '\((?P<%s>[^\(\)]*?)\)' % (g_name)
-class p_rel(pt_abs_composite_node): # rel pattern: '[...]'
+class p_rel(pt_abs_composite_node, p_label_set_container): # rel pattern: '[...]'
"""
relationship pattern
"""