[C++/C#/Java] Gave Parser Generator

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik gebruik zelf al een lange tijd SableCC als parser generator en hij bevalt me goed. Het is een LALR(1) parser generator (dus veel minder gezeur met ambiguiteiten in je grammatica dan LLk grammatica`s). Verder genereerd het AST objecten waarbij ook meteen een Visitor is geintegreerd, dus uitlezen en het bewandelen is echt een eitje.

Ik heb intussen al een aantal systemen hiermee opgezet en ik ben er erg over te spreken.

Intussen zijn ze bij een nieuwe versie aanbeland (3 beta2) en daarin zit oa de volgende nieuwe functionaliteit

-automatische cst-ast conversies (dus je hoeft je zelfs niet meer te ergeren aan de syntactische lelijkheden uit de parser)

-een nieuw ambiguiteits oplossings syteem.

-een nieuwe backend waarmee het mogelijk is om ook voor andere talen parsers te genereren. Ik zie op de mailinglist dat ze bezig zijn met een c++ en c# versie.

Dus voor mensen die met een gave parser generator aan de slag willen, dan is dit een absolute aanrader.

[ Voor 7% gewijzigd door Alarmnummer op 30-10-2003 13:03 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oh, dat voor C++ is zeker interessant. Ik gebruik momenteel nog altijd bison, maar dat werkt een beetje onhandig. En ook het feit dat het eigenlijk gewoon een stukje statische C code genereert is ook wel irritant.

Ik had al eens zitten denken om zelf een parser generator voor C++ te schrijven, maar dat kost me toch iets teveel werk en moeite, 2 dingen die ik liever in andere dingen investeer :)

Hoe zit het met de lexical analyser stap? Kun je daar een eigen lexer aan hangen? Of zit dat er ook in geintegreerd? En zo ja, is dat dan flexibel?

M'n wensen zijn namelijk toch enigzins dat ik real-time parse informatie terug kan geven aan de lexical analyser, zodat die daar alvast user defined types e.d. kan herkennen. Ik kan wel een superset van de taal gaan parsen in zo'n geval, maar dat brengt voor sommige dingen, zoals bijvoorbeeld een taal als C++ zelf, enorm veel ambiguiteiten met zich mee, en het maakt de semantische stap een stuk lastiger

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
.oisyn schreef op 30 oktober 2003 @ 16:32:
Oh, dat voor C++ is zeker interessant. Ik gebruik momenteel nog altijd bison, maar dat werkt een beetje onhandig. En ook het feit dat het eigenlijk gewoon een stukje statische C code genereert is ook wel irritant.

Ik had al eens zitten denken om zelf een parser generator voor C++ te schrijven, maar dat kost me toch iets teveel werk en moeite, 2 dingen die ik liever in andere dingen investeer :)

Hoe zit het met de lexical analyser stap? Kun je daar een eigen lexer aan hangen? Of zit dat er ook in geintegreerd? En zo ja, is dat dan flexibel?
Het is idd geintegreerd en voor zover ik weet kan je dat niet uitwisselen.
M'n wensen zijn namelijk toch enigzins dat ik real-time parse informatie terug kan geven aan de lexical analyser, zodat die daar alvast user defined types e.d. kan herkennen.
He gedsie.. geen context vrije grammatica :P

Maar je kan verder wel de lexer die erbij zit aanpassen. Er zijn al mensen geweest die dit soort dingen hebben gedaan, dus het is wel mogelijk.

[ Voor 9% gewijzigd door Alarmnummer op 30-10-2003 16:53 ]


  • tomato
  • Registratie: November 1999
  • Niet online
Toevallig heb ik een paar dagen geleden SableCC uit je signature gehaald, maar ik heb nog geen tijd gehad er iets mee te doen, behalve een klein beetje documentatie doorlezen.

Twee weken geleden heb ik voor het eerst de magie rond Lex en Yacc voor mezelf doorbroken en er een klein beetje mee gespeeld. Maar aangezien dat ongeveer de derde keer was dat ik iets in C deed werd ik daar toch een klein beetje niet goed van. Natuurlijk ging er na de eerste 10 minuten spelen al wel een wereld voor me open ;)

Daarna heb ik PLY (Python Lex-Yacc) geprobeerd, aangezien ik een stuk beter met Python uit de voeten kan dan met C. Geweldig, dat ging een stuk makkelijker!

En nu wil ik dus eens met SableCC gaan spelen, omdat je dat al een tijd in je signature had staan. Na wat ik er tot nu toe van gezien heb, zal het me vast niet teleurstellen ;)

Vooral de integratie van de parser met je applicatie ziet er op het eerste gezicht goed uit en een stuk volwassener dan lex/yacc.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ga je na het signature van Alarmnummer verder met die van mij? :+ >:)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • tomato
  • Registratie: November 1999
  • Niet online
mbravenboer schreef op 30 oktober 2003 @ 21:03:
Ga je na het signature van Alarmnummer verder met die van mij? :+ >:)
Uhm... da's een goede :X :D

Als ik van rechts naar links mag klikken ben ik al een eindje op weg ;)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben tegen deze link aangelopen:
http://www.mare.ee/indrek/sablecc/

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Woei, C++ generators, zeer interessant. :)
Alleen ik begrijp uit die context dat het nog altijd een java applicatie is, klopt dat? Dat vind ik dan wel weer minder. Ik zal er eens naar kijken als ik er tijd voor heb :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
.oisyn schreef op 18 november 2003 @ 14:23:
Woei, C++ generators, zeer interessant. :)
Alleen ik begrijp uit die context dat het nog altijd een java applicatie is, klopt dat?
Idd. Het is een java applicatie die in taal X code uithoest.
Dat vind ik dan wel weer minder. Ik zal er eens naar kijken als ik er tijd voor heb :)
Ik ben zeer over de parser generator te spreken. Vooral de CST->AST transformatie is erg fijn (AST is veel minder complex dan een CST).

Het is idd iets minder dat je java geinstalleerd moet hebben om te kunnen genereren. Gelukkig zit je na het genereren niet meer vast aan java. Dat scheelt nog wel een hoop.

[flame mode]Dan heb je ook eens een echte taal op je pc staan[/flame mode] :P
Pagina: 1