2016-11-29 5 views
1

Я пытаюсь реализовать что-то в слое, которое я очень новичок, основанный на том, что я сделал в pyparsing, что я также совершенно новичок в , Как написать простой поиск в форме поиска, например:Как реализовать это в слое, учитывая, как работает pyparsing

thecontent = pyparsing.Word(pyparsing.alphanums) | '&' | '|' 
parens = pyparsing.nestedExpr('(', ')', content=thecontent) 

С помощью PLY?

ответ

0

То, что вы написали в pyparsing, не очень хорошо переводится на PLY, потому что, это едва ли даже парсер. nestedExpr - помощник для быстрого определения выражения формы «Я действительно не знаю, что в этом, но он окружен () (или {} или [] или что-то еще), и они могут быть вложенными». Действительно удобно разбирать «{} '-граничный язык, подобный C, для определения простого определения функции как type_spec + identifier + parameter_spec + nestedExpr('{', '}'). Учитывая, что вы определяете свой контент для включения '&' и '|' операторы, похоже, что вы действительно хотите разобрать логическое выражение, включая поддержку скобки, чтобы переопределить приоритет операций.

Пример simpleBool.py на странице примеров вики-файлов pyparsing показывает некоторые тестовые примеры и выражения для поддержки синтаксического анализа булевых выражений. BUT он по-прежнему использует вспомогательный метод, infixNotation, который скрывает большую часть шагов определения парсера, поэтому снова будет трудно перевести на PLY напрямую. Однако я ссылаюсь на этот пример, потому что это может помочь вам прояснить, что именно нужно для разбора булевых выражений (включая разбор булевых литералов типа «True», «False» и т. Д. И, возможно, добавление поддержки оператора «not»). Кроме того, это даст вам кучу бесплатных тестовых примеров - помогите себе!

Чтобы увидеть более явную грамматику, которая сродни тому, что ожидает PLY, посмотрите на пример fourFn.py pyparsing. Он предшествует помощнику infixNotation, поэтому он явно создает различные приоритеты операций. (Изящество этой формы реализации приоритета арифметического оператора в значительной степени заинтересовало меня в анализе приложений в первую очередь.)