Tokens = {
'var':'VARIABLE',
'==':'EQUAL',
}
Tokens = {
'var':'VARIABLE',
'==':'EQUAL',
'letters':'LETTER',
'ints':'INT'
}
KEYWORDS = { #tokens
'var':'VARIABLE',
'=':'RESERVED',
'==':'EQUAL',
'>':'GT',
'<':"LT",
'(':'LPARENT',
')':'RPARENT',
'()':'PARENTS',
'class':"main_word",
'func':'main_word',
}
LINE = input("> ") #shell
def lex(LINE,KEYWORDS): #функция
ret = []
lines = LINE.split()
for line in lines:
if line in KEYWORDS:
ret.append((line, KEYWORDS[line]))
else:
ret.append((line, '?')) #если неизвестен токен, изменяем его на '?'
return ret
# Мне надо получить
tokens = lex(LINE,KEYWORDS)
print(tokens)
import unittest
import string
def make_answer(arg): # собирает строку, как в ответах
result = None
for element in arg:
subresult = ' '.join(element)
if not result:
result = subresult
else:
result = result + ', ' + subresult
result += '.'
return result
def lex(line, keywords): # функция
ret = []
lines = line.split()
for number, line in enumerate(lines):
if line in keywords:
ret.append((line, keywords[line]))
elif line in string.digits: # если цифры
ret.append((line, 'INT'))
elif line.strip().isalpha(): # если буквы
ret.append((line, 'LETTER'))
else:
ret.append((line, '?')) # если неизвестен кейворд
return ret
class TestStringMethods(unittest.TestCase): # Это тестирование функции let()
def test_lex(self):
"""
подает на вход функции строки - ключи словаря true_results,
сравнивает результат со строками - значениями этого словаря
"""
true_results = {'var one = 123': 'var VARIABLE, one LETTER, = ZNAK, 123 INT.',
'var hi = Hello world': 'var VARIABLE, hi LETTER, = ZNAK, Hello LETTER, world LETTER.',
'func Main ()': 'func MAIN WORD, Main LETTER, () PARENTS.'}
for key in true_results.keys():
self.assertEqual(make_answer(lex(line=key, keywords=KEYWORDS)), true_results[key])
if __name__ == '__main__':
KEYWORDS = {
'var': 'VARIABLE',
'=': 'ZNAK',
'==': 'EQUAL',
'>': 'GT',
'<': "LT",
'(': 'LPARENT',
')': 'RPARENT',
'()': 'PARENTS',
'class': "MAIN WORD",
'func': 'MAIN WORD'
}
unittest.main() # запускает тест