Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Returns a nodeResult with the following attributes:
- is_valid: True when the string is successfully parsed
by the Grammar.
- pos: position in the string where parsing ended.
(this is the end of the string when is_valid is True)
- expecting: a list containing possible elements at position
'pos' in the string.
- tree: the parse_tree containing a structured
result for the given string.
'''
self._string = string
self._expecting = Expecting()
self._cached_kw_match.clear()
self._len_string = len(string)
self._pos = None
tree = Node(self._element, string, 0, self._len_string)
node_res = Result(*self._walk(
self._element,
0,
tree.children,
self._element,
True))
# get rest if anything
rest = self._string[node_res.pos:].lstrip()
# set is_valid to False if we have 'rest' left.
if node_res.is_valid and rest:
node_res.is_valid = False
# add end_of_statement to expecting if this is possible
if not self._expecting.required and rest:
def _walk(self, element, pos, tree, rule, is_required):
if self._pos != pos:
self._s = self._string[pos:].lstrip()
self._pos = self._len_string - len(self._s)
node = Node(element, self._string, self._pos)
self._expecting.set_mode_required(node.start, is_required)
return element._get_node_result(self, tree, rule, self._s, node)
def _walk(self, element, pos, tree, rule, is_required):
if self._pos != pos:
self._s = self._string[pos:] #.lstrip() # don't strip whitespace
self._pos = self._len_string - len(self._s)
node = Node(element, self._string, self._pos)
self._expecting.set_mode_required(node.start, is_required)
return element._get_node_result(self, tree, rule, self._s, node)