Реализация логики из текста - PullRequest
5 голосов
/ 21 июня 2011

У меня есть программа, которая получает входные данные в виде текста, например:

IF (A.4.1-1/1 OR A.4.1-1/2) AND A.4.4-1/9 AND (A.4.4-1/12 OR A.4.4-1/13 OR A.4.4-1/14 OR A.4.4-1/15) THEN R ELSE N/A

, где A.4.1-1/1 и т. Д. - переменные со значением TRUE or FALSE. до сих пор я разобрал текст на логические части для приведенного выше примера, у меня есть список, который выглядит следующим образом:

['IF', '(', 'A.4.1-1/1', 'OR', 'A.4.1-1/2', ')', 'AND', 'A.4.4-1/9', 'AND', '(', 'A.4.4-1/12', 'OR', 'A.4.4-1/13', 'OR', 'A.4.4-1/14', 'OR', 'A.4.4-1/15', ')', 'THEN', 'R', 'ELSE', 'N/A']

Мне просто интересно, возможно ли на самом деле выполнить логику в этом списке, например, объединить все это в требуемые операторы python и предоставить результат. Я не уверен, что для начала я прочитал на некоторых сайтах, что я должен использовать парсер сверху вниз ??

Ответы [ 2 ]

6 голосов
/ 21 июня 2011

Это звучит как задача для Pyparsing :

Модуль pyparsing - это альтернативный подход к созданию и выполнению простых грамматик по сравнению с традиционным подходом lex / yacc илииспользование регулярных выражений.Модуль pyparsing предоставляет библиотеку классов, которые клиентский код использует для построения грамматики непосредственно в коде Python.

Вы сможете быстро определить свою грамматику (вместо того, чтобы играть с регулярными выражениями) и конкретный синтаксический анализдействия.Я построил очень богатые мини-языки с использованием Pyparsing в менее чем 300 строк кода.

1 голос
/ 21 июня 2011

Я не парень Python, но я делал подобные вещи в Java, используя JavaCC .Вам нужно написать грамматику для вашего языка (в таком формате, как EBNF , но это зависит от генератора синтаксического анализатора), а затем использовать такую ​​программу, как JavaCC, длясоздайте для него парсер, который даст вам дерево разбора , которым удобнее манипулировать.

Вы сможете найти много полезных примеров, так как грамматика вашего ввода не 'Это может показаться слишком необычным (логические операторы, выражения в скобках и операторы if-then-else являются, вероятно, одними из наиболее распространенных случаев использования для этого).на этой странице полезно.

...