Fixed BNF concept evaluations
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user