Случайно я создал ALGOPRAXIS, я практиковался, как использовать шаблон проектирования для создания пакета.
Из-за необходимости создания веб-сайта онлайн-оценки я создал анализатор текста, который анализирует текст в список отдельных значений, отдельных списков и нескольких списков.
Поскольку мне нужно, чтобы тип данных синтаксического анализатора был целочисленным, плавающим (двойным) или строковым, я должен построить синтаксический анализатор с универсальными классами.
Довольно легко создать классы Integer, Float (Double) и String соответственно для использования,
Но, основываясь на принципе DRY, я решил создать общий класс на Python, Java и C++.
Спецификация парсера
Прежде чем приступить к построению синтаксического анализатора, важно определить его спецификации.
Спецификация довольно проста.
Формат ввода — чистый текст, и каждая строка представляет входные значения следующим образом:
одиночные значения:
1 3 -4
отдельные списки:
[1, 3, 2] [-1, 3, 5, 4]
список списков:
[[1,2,3],[4,5,6],[7,8,9]]
сочетание одного значения и одного списка:
[1, 3, 2] 5
Таким образом, мне понадобилось три типа возвращаемых значений для анализа входных значений выше.
Выполнение
Как особенность Python, очень легко создать парсер с шаблоном фабричного метода для универсального класса.
Есть только два файла, parser.py и parserfactory.py, которые я показываю ниже.
И простой образец также показан ниже исходных кодов.
Простой пример
from .parserfactory import ParserFactory
# create the factory instance
factory = ParserFactory
# create the parser by input the type
parser = factory.create('integer')
# set the input path of the input file
parser.set_input_path('input.txt')
# get the parsed values with the method
input_list = parser.parse_data_as_list()