я хотел бы знать, как я могу запустить операции, как этотPerl пользовательский синтаксис для суффиксов и пользовательских операторов постфиксных
$T = 25 C;
@specs = (273.15 K, 23 bar, 2.0 mol/s);
и заставить их компилировать. Я не придирчив к тому, что их результат, или как он реализован. Моя цель состоит в том, чтобы выражения для физических величин с условными аннотациями постфикса, компилируемыми для выражений perl для этих единиц.
Я думаю, что мне нужно использовать специальные методы парсинга, но я бы предпочел использовать любые существующие функции или модули синтаксического анализа только при применении регулярных фильтров к моему исходному исходному коду.
Parse::Keyword представляется многообещающим, но я не могу понять, может ли он анализировать постфиксные операции и утверждает, что он устарел.
Редактировать: Я хотел бы избежать фильтров источников, если это возможно, потому что я предпочитаю не писать регулярные выражения для синтаксических угловых случаев Perl (например, «25 (J/K)»).
Ошибка Perl производит здесь говорит:
perl -E "25 C"
Bareword found where operator expected at -e line 1, near "25 C"
(Missing operator before C?)
Похоже, мне нужно подключить в Perl, где обнаруживает операторы после числовых литералов.
Может ли Devel::Declare добавить постфиксные операторы? Если да, то как?
Звучит как работа для [исходного фильтра] (http://perldoc.perl.org/perlfilter.html). Поймите, однако, что [исходные фильтры - почти всегда плохая идея] (http://stackoverflow.com/questions/1785852/why-are-perl-source-filters-bad-and-when-is-it-ok- к потребительным их). Я бы рекомендовал подход, который не требует привинчивания с правилами синтаксического анализа perl; это не так красиво, но я бы предпочел нечто вроде '$ T = My :: Measurement-> new (value => 25, units => 'C');'. – ThisSuitIsBlackNot
Цель этого модуля - явно разрешить краткую форму, такую как язык, специфичный для домена. – alexchandel
Просьба описать более точно результат, который вам нужен. Является ли '$ T = '25 C'' приемлемым? – Borodin