[Java] boolean tests, mogelijkheid tot optimalisatie

Pagina: 1
Acties:

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Ik gebruik op dit moment BeanShell om simpele boolean vergelijkingen te "berekenen", maar eigenlijk is BeanShell hier wat uitgebreid.

Het gaat om vergelijkingen als:
code:
1
A==2 && (B==3 && A2)


Kan ik zelf een simpele (snelle!) parser genereren die dit soort vergelijkingen voor me oplost? Zo ja, wat voor parser generator is dan aan te raden?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je zou ANTLR kunnen proberen. Hierbij zit al een mini expressie systeempje die je wel kunt uitbreiden. Als je een leuke parser generator wilt hebben (maar wel iets gecompliceerder), dan moet je kijken naar SableCC. Dit is een LALR parser generator (minder last van ambiguiteiten), en hij genereerd een AST op basis van je grammatica. Het werkt echt te gek, vooral omdat je er ook met visitor(guides) supereenvoudig traversals op kan uitvoeren.

[ Voor 12% gewijzigd door Alarmnummer op 03-03-2003 22:06 ]


Verwijderd

offtopic:
Alarmnummer schreef op 03 March 2003 @ 21:51:
...LALR...AST...visitor(guides)...traversals


En tot zover de meest onleesbare tekst voor vandaag B)

Ik snap dus daadwerkelijk geen ene hol van wat hierboven staat 8)7
modbreak: google zou een goede optie voor je zijn :/

[ Voor 23% gewijzigd door drm op 04-03-2003 01:02 ]


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Alarmnummer: Ik wil af van BeanShell, aangezien deze alle logica bevat om java te analyseren. Ik wil eigenlijk alleen een simpele omgeving waarin ik booleans en int-typen kan gebruiken, en een vergelijken kan evalueren op basis van de waarde van enkele ingestelde omgevingsvariabelen.

De reden hiervoor is voornamelijk het vermijden van overhead en versnellen van mijn code. Is het zinvol om hier zelf een systeem(pje) voor te programmeren of te genereren?

Hoe werkt het systeem overigens? Ik geef een grammatica-bestand op als input en krijg als output een java class waarmee ik een omgeving kan creeeren, waarbinnen ik kan werken?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

B-Man schreef op 03 March 2003 @ 23:10:
De reden hiervoor is voornamelijk het vermijden van overhead en versnellen van mijn code. Is het zinvol om hier zelf een systeem(pje) voor te programmeren of te genereren?
Het ligt er denk ik aan hoe belangrijk het is. Je bent er opzicht wel even mee bezig om een simpel expressie systeem op te zetten (inclusief een typesysteem) als je er geen ervaring mee hebt. En verder genereer je alleen de parser, de rest zal je toch zelf moeten schrijven :)
Hoe werkt het systeem overigens? Ik geef een grammatica-bestand op als input en krijg als output een java class waarmee ik een omgeving kan creeeren, waarbinnen ik kan werken?
Bij ANTLR krijg je een generieke AST (Abstract Syntax Tree) terug en bij SableCC een specifieke, op basic van de grammatica (of een foutmelding als je een syntax fout hebt gemaakt). Je moet aan de hand van die boom je eigen AST gaan vullen. (Tenslotte moet je niet gaan werken in gegenereerde code en er verder ook niet aan vast zitten). Die AST is gewoon een hulpmiddel om je eigen AST te vullen. In je eigen AST zul je objecten tegenkomen zoals PlusOperator, IntegerOperand, AbsFunction.

Je kan het beste beginnen om je eigen AST op te zetten, later kan je dit wel versyntaxen.

[ Voor 14% gewijzigd door Alarmnummer op 03-03-2003 23:27 ]


  • B-Man
  • Registratie: Februari 2000
  • Niet online
Alarmnummer: dank voor je uitgebreide reactie, ik ga er morgen eens wat mee spelen...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op de ANTLR site staan een aantal leuke tutorials waarmee je een 1e indruk kan opdoen. Als je er meer in bent geinteresseerd dan is: "Modern Compiler Implementation in Java" wel een aanrader.
Pagina: 1