I can now use keyword in concept definition and parsing

This commit is contained in:
2020-05-22 15:46:04 +02:00
parent 37d3d16e21
commit 3ce6ce2a76
14 changed files with 127 additions and 45 deletions
+8 -7
View File
@@ -74,13 +74,13 @@ class BnfParser(BaseParser):
try:
self._current = self.after_current or next(self.lexer_iter)
self.source += str(self._current.value)
self.source += self._current.str_value
self.after_current = None
if skip_whitespace:
while self._current.type == TokenKind.WHITESPACE or self._current.type == TokenKind.NEWLINE:
self._current = next(self.lexer_iter)
self.source += str(self._current.value)
self.source += self._current.str_value
except StopIteration:
self._current = Token(TokenKind.EOF, "", -1, -1, -1)
@@ -90,7 +90,7 @@ class BnfParser(BaseParser):
try:
self.after_current = next(self.lexer_iter)
# self.source += str(self.after_current.value)
# self.source += self.after_current.str_value
return self.after_current
except StopIteration:
self.after_current = Token(TokenKind.EOF, "", -1, -1, -1)
@@ -99,13 +99,13 @@ class BnfParser(BaseParser):
def eat_white_space(self):
if self.after_current is not None:
self._current = self.after_current
self.source += str(self._current.value)
self.source += self._current.str_value
self.after_current = None
try:
while self._current.type == TokenKind.WHITESPACE or self._current.type == TokenKind.NEWLINE:
self._current = next(self.lexer_iter)
self.source += str(self._current.value)
self.source += self._current.str_value
except StopIteration:
self._current = None
@@ -239,10 +239,10 @@ class BnfParser(BaseParser):
# else ConceptExpression(concept)
return self.eat_rule_name_if_needed(expr)
if token.type == TokenKind.IDENTIFIER:
if token.type in (TokenKind.IDENTIFIER, TokenKind.KEYWORD):
self.next_token()
concept_name = str(token.value)
concept_name = token.str_value
# we are trying to match against a concept which is still under construction !
# (for example of recursive bnf definition)
@@ -283,3 +283,4 @@ class BnfParser(BaseParser):
expression.rule_name = token.value
self.next_token()
return expression