Ich mag gerne wissen, wie ich Operationen wie diesePerl benutzerdefinierte Syntax für Suffixe oder benutzerdefinierte Postfix-Operatoren
$T = 25 C;
@specs = (273.15 K, 23 bar, 2.0 mol/s);
laufen kann und sie kompilieren. Ich bin nicht wählerisch, was ihr Ergebnis ist oder wie es umgesetzt wird. Mein Ziel ist es, Ausdrücke für physikalische Größen mit konventionellen Postfix-Einheit-Annotationen zu Perl-Ausdrücken für diese Einheiten kompilieren zu lassen.
Ich denke, ich muss benutzerdefinierte Analysetechniken verwenden, aber ich würde lieber vorhandene Funktionalität oder Analysemodule über nur anwenden Regex-Filter auf meine rohe Quelle verwenden.
Parse::Keyword schien vielversprechend, aber ich kann nicht sehen, ob es Postfix-Operationen analysieren kann, und es behauptet, veraltet zu sein.
Edit: Ich möchte Quellenfilter vermeiden, wenn möglich, weil ich lieber nicht Regexes für Perl syntaktische Ecken Fällen schreiben würde (z. B. "25 (J/K)").
Der Fehler Perl hier erzeugt sagt:
perl -E "25 C"
Bareword found where operator expected at -e line 1, near "25 C"
(Missing operator before C?)
Es scheint, wie ich in einzuhaken müssen, wo Perl erkennt Operatoren nach Zahlenliterale.
Konnte Devel::Declare Postfix-Operatoren hinzufügen? Wenn das so ist, wie?
Klingt wie ein Job für einen [Quellfilter] (http://perldoc.perl.org/perlfilter.html). Verstehe, dass [Quellfilter fast immer eine schlechte Idee sind] (http://stackoverflow.com/questions/1785852/why-are-perl-source-filters-bad-and-when-is-it-ok- zu benutzen-sie). Ich würde einen Ansatz empfehlen, der kein Verschrauben mit Perls Parseregeln erfordert; es ist nicht so schön, aber ich würde etwas wie $ T = My :: Measurement-> new (Wert => 25, units => 'C'); '. – ThisSuitIsBlackNot
Ziel dieses Moduls ist es, die knappe Form explizit wie eine domänenspezifische Sprache zuzulassen. – alexchandel
Bitte beschreiben Sie genauer das Ergebnis, das Sie möchten. Ist $ T = '25 C'akzeptabel? – Borodin