Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
Formelsprache TO LotusScript Code-generierer schreiben
Mark³:
Damien ist wieder online...Der vertreibt sich gerade die Zeit mit irgendwelchen C-Funktionen, vielleicht will er bei deinem Projekt mitmachen ^-^
flaite:
Wenn ich eine tragfähige 0.1 Version als Basis habe (und es möglich ist wie ich mir es vorstelle).
Ich arbeite ja normalerweise nicht so low-level, sondern bin Anwendungsentwickler auf Basis von Frameworks oder Produkten. Das ist einfach so ein Hobby Projekt, um mich mit Code-Generierung zu beschäftigen.
flaite:
Das könnte helfen.
http://www.antlr.org/
Immer noch nix verschickbares, z.Zt. keine Zeit.
flaite:
Ich denke, ich mach das erst einmal alleine, da ich denke, dass die Kommunikationskosten einfach zu hoch sind. Poste aber weitgehend kommentarlos das bisher funktionierende Parsing-Framework mit Unit Tests für die oben beschriebene Prä-Formatierung. (s. angehängtes zip).
Es sind 2 parallele Source Folder in Eclipse (src und test). Die Packages fangen jeweils bei de an. Der Aussagekräftige Unit-Test ist StringProcessorTest. Daneben gibts Junit-Tests für die einzelnen Filter. Ausser JUnit existieren keine anderen 3rd party libraries. Nicht mal log4j.
In dem Parser-System werden einzelne Chars durch eine Kette konfigurierbarer Filter gejagt. Ein Context-Objekt spielt da auch noch eine Rolle.
Je nach verschiedenen Context muß unterschiedlich geparsed werden.
Innerhalb einer Klammer, Innerhalb eines String-Literals, etc.
Wies jetzt weiter gehen soll.
Ich teile das Formelsprachenscript wie oben beschrieben erst einmal grob vor in die Bereiche, die durch ein ; ausserhalb eines Stringliterals und ausserhalb von Klammern stehen.
Das ist fertig.
_a:=@dblookup("Notes":"NOCACHE";"":"";"($aaa)";"AToc";"ATitle"); _application:=@if(@iserror(_a);@failure("Fehler Meldung !");_a);
wird geteilt zu
1. _a:=@dblookup("Notes":"NOCACHE";"":"";"($aaa)";"AToc";"ATitle");
2. _application:=@if(@iserror(_a);@failure("Fehler Meldung !");_a);
Innerhalb dieser Teile können sehr viele Formeln ineinander geschachtelt sein. Wie bei 2. ansatzbare sichtbar. Das sieht nicht als großes Problem aus, wenn ich das in einen Composite Tree lade und mir die Nodes und Leafs durch die Elemente des Composites selbst generiere. Damit habe ich aber kaum angefangen.
Die Elemente des Composites sind alle vom Typ Token. Es gibt diese konkreten Klassen:
a) RootToken (genereller Container für alle Teile des FormelScripts)
b) FormelToken (hier eine Menge konkrete Klassen)
c) CommandToken (hier eine Menge konkrete Klassen)
d) StringLiteralToken
e) Liste (sowas wie Doppelpunkt)
f) Operatoren (v.a. + aber auch - möglich)
g) VariableInitialization
h) VariableName
i) Variable
Der Ast von Punkt 2. des Composites sähe so aus:
2. _application:=@if(@iserror(_a);@failure("Fehler Meldung !");_a);
RootToken
-- VariableInitialization
--- VariableName (-> _application)
--- FormulaTokenIf (@If)
-----FormulaToken (@isError)
------- Variable (_a)
-----FormulaTokenFailure (@failure)
-------StringLiteralToken ("Fehler Meldung!")
----- Variable (_a)
Berichte weiter. Wenn jemand was damit anfangen kann, soll er sich melden.
Axel
koehlerbv:
Hallo Axel,
gerade an der Stelle, wo Du jetzt offensichtlich bist, vergiss bitte auch derartige Konstrukte nicht:
- @Do
- @ For
- @While
- @Return (vor allem, wenn dessen Folge ein Formelabbruch ist)
Was machst Du mit FrontEnd-Elementen (@Prompt, @Commands usw.) ?
Könntest Du in irgendeiner Form die Diskussion auch programmierspachenunabhängig publizieren ? Das würde ggf. die Bereitschaft zur Mitarbeit deutlich erhöhen. Jeder von uns, die in Frage kommen, steckt ja gerade in anderen Projekten mit anderen Umgebungen und Werkzeugen und mag / kann vielleicht nicht umschalten.
Good luck !
Bernhard
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln