Я использую parsy для синтаксического анализа грамматики, которая определена как (псевдокод):
prefix: alphanumeric
at_symbol: '@'
suffix: alphanumeric
op_or: 'OR'
op_and: 'AND'
atom: prefix + at_symbol + suffix | '(' + atom + (op_or | op_and) + atom ')'
, поэтому допустимая строка, которую я должен проанализировать, будет (john@tidal OR john@qobuz) AND jack@spotify
Я довольно новичок как в Python, так и в парсерах, и не вижу ни одного примера.
Вот что я придумал:
operator = string('OR') | string('AND')
prefix = regex('[a-zA-Z][a-zA-Z0-9_]*')
suffix = regex('[a-zA-Z][a-zA-Z0-9_]*')
token = prefix + string('@') + suffix
atom = token | token + operator + token # this doesn't really work
Любой указатель было бы здорово.
(примечание: я не могу использовать Pyparsing.)