Fixed BNF concept evaluations

This commit is contained in:
2020-01-03 19:19:57 +01:00
parent adcbc6bb2e
commit ffd98d7407
20 changed files with 682 additions and 237 deletions
+5 -2
View File
@@ -78,7 +78,7 @@ class BaseParser:
context.log(self.log, f" Recognized '{value}'", self.name)
@staticmethod
def get_text_from_tokens(tokens):
def get_text_from_tokens(tokens, custom_switcher=None):
if tokens is None:
return ""
res = ""
@@ -88,9 +88,12 @@ class BaseParser:
switcher = {
TokenKind.KEYWORD: lambda t: Keywords(t.value).value,
TokenKind.CONCEPT: lambda t: f"__C__{t.value}__C__"
TokenKind.CONCEPT: lambda t: "c:" + t.value + ":",
}
if custom_switcher:
switcher.update(custom_switcher)
for token in tokens:
value = switcher.get(token.type, lambda t: t.value)(token)
res += value
+1 -1
View File
@@ -795,7 +795,7 @@ class ConceptLexerParser(BaseParser):
if not self.next_token():
break
# Fix the source if we were working on unrecognized tokens
# Fix the source for unrecognized tokens
if unrecognized_tokens:
unrecognized_tokens.fix_source()
+7 -3
View File
@@ -1,5 +1,5 @@
from core.builtin_concepts import BuiltinConcepts
from core.tokenizer import Tokenizer, LexerError
from core.tokenizer import Tokenizer, LexerError, TokenKind
from parsers.BaseParser import BaseParser, Node, ErrorNode
from dataclasses import dataclass
import ast
@@ -66,13 +66,17 @@ class PythonParser(BaseParser):
sheerka = context.sheerka
tree = None
python_switcher = {
TokenKind.CONCEPT: lambda t: f"__C__{t.value}__C__"
}
try:
if isinstance(text, str) and "c:" in text:
source = self.get_text_from_tokens(list(Tokenizer(text)))
source = self.get_text_from_tokens(list(Tokenizer(text)), python_switcher)
elif isinstance(text, str):
source = text
else:
source = self.get_text_from_tokens(text)
source = self.get_text_from_tokens(text, python_switcher)
source = source.strip()
text = text if isinstance(text, str) else source