источник

Случайно я создал 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()