diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-03-30 19:43:39 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-04-01 22:25:52 +0300 |
| commit | e79aa51ac7c5c92829877f4a518b8a7505fdd23c (patch) | |
| tree | 5dfebc954ebbeefcf25e8377ee875d45ad71dfaa /src | |
| parent | fc0f75ca2e5627e10fd88a9096ba92e7acbd2b48 (diff) | |
neo4j_cypher_parser: have p_node, p_rel inherit from p_label_set_container
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/neo4j_cypher_parser.py | 31 |
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 """ |
