Реализация парсера Links Notation для Python.
pip install links-notationfrom links_notation import Parser
parser = Parser()
links = parser.parse("папа (любитМаму: любит маму)")
# Обращение к распарсенным связям
for link in links:
print(link)from links_notation import Parser, format_links
parser = Parser()
# Парсинг простых связей
links = parser.parse("(папа: любит маму)")
print(links[0].id) # 'папа'
print(len(links[0].values)) # 2
# Форматирование связей обратно в строку
output = format_links(links)
print(output) # (папа: любит маму)from links_notation import Link
# Создание связей программно
link = Link('родитель', [Link('ребенок1'), Link('ребенок2')])
print(str(link)) # (родитель: ребенок1 ребенок2)
# Доступ к свойствам связи
print(link.id) # 'родитель'
print(link.values[0].id) # 'ребенок1'
# Объединение связей
combined = link.combine(Link('другая'))
print(str(combined)) # ((родитель: ребенок1 ребенок2) другая)parser = Parser()
# Парсинг нотации с отступами
text = """3:
папа
любит
маму"""
links = parser.parse(text)
# Результат: (3: папа любит маму)Основной класс парсера для Links Notation.
parse(input_text: str) -> List[Link]: Парсинг текста Links Notation в объекты Link
Представляет связь в Links Notation.
__init__(id: Optional[str] = None, values: Optional[List[Link]] = None)format(less_parentheses: bool = False) -> str: Форматирование в строкуsimplify() -> Link: Упрощение структуры связиcombine(other: Link) -> Link: Объединение с другой связью
Форматирование списка связей в Links Notation.
format_links(links: List[Link], less_parentheses: bool = False) -> str
parser = Parser()
text = """
папа (любитМаму: любит маму)
сын любитМаму
дочь любитМаму
"""
links = parser.parse(text)text = """
папа имеет машину
мама имеет дом
(папа и мама) счастливы
"""
links = parser.parse(text)# Ссылки со специальными символами требуют кавычек
text = '("есть пробел": "значение с: двоеточием")'
links = parser.parse(text)# Установка зависимостей для разработки
pip install pytest
# Запуск тестов
pytestpip install build
python -m buildЭтот проект выпущен в общественное достояние под лицензией Unlicense.