[php]yacc/lex (bison/flex) gebruiken in php. Hoe?

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Beste mensen,

Ik heb van school uit het een en ander gedaan met yacc en lex, hardstikke leuk.
nu kwam ik op het idee om yacc en lex te gaan gebruiken voor het parsen van smilies en ubb tags in forum posts op mijn eigen forumpje.
echter, yacc en lex zijn compilers voor c++....

nu weet ik dat ze hier op got ook een soort yacc en lex gebruiken voor het parsen van berichtjes, en ik vroeg me af hoe ze dat voor elkaar hebben gekregen.

het liefst zou ik dus iets willen als:
PHP:
1
$parsedtext = YaccLex($input, $lfile, $yfile);

maar dat zit er waarschijnlijk niet in

hoe pak ik dit aan?

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Zoek de PECL/PEAR database er eens op na of er misschien geen modules voor gemaakt zijn om dat te kunnen regelen.

Kun je zelf trouwens C/C++? Als dat het geval is, zou je nog kunnen overwegen om zelf een PHP module te bouwen die dat kan.

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 05-06 17:06
Voorzover ik weet worden op forums gewoon str_replace en regex'en (preg_replace) gebruikt voor smilies. Denk dat een parser met complete grammatica daarvoor dan ook overkill is ;) Op GoT worden RML-tags vziw geparsed met een stackbased-parser, dus daar komt al iets meer bij kijken. Maar volgens mij is dat prima mogelijk zonder Yacc of Lex :) Ik heb een paar jaar geleden een stackbased template-parser gemaakt, en die splitste eerste alles (met preg_split bijvoorbeeld) uit in tags en inhoud en ging het daarna doorwerken. Misschien dat het zelfs lukt met explode :) Gaat het om grote berichten die je niet ineens in je geheugen wil hebben, dan kun je het ook token-per-token parsen met strtok :)

[ Voor 9% gewijzigd door MisterData op 03-12-2006 11:41 ]


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
eghie schreef op zondag 03 december 2006 @ 11:37:
Zoek de PECL/PEAR database er eens op na of er misschien geen modules voor gemaakt zijn om dat te kunnen regelen.

Kun je zelf trouwens C/C++? Als dat het geval is, zou je nog kunnen overwegen om zelf een PHP module te bouwen die dat kan.
klinkt leuk, en ik kan best c/c++, alleen heb niet de tijd en de zin om me te verdiepen in php modules als er al een manier is om te doen wat ik wil doen. (2x wiel uitvinden is zonde ;) )
ik ga direct door de pear DB zoeken inderdaad.. dat had ik nog niet gedaan :)
MisterData schreef op zondag 03 december 2006 @ 11:40:
Voorzover ik weet worden op forums gewoon str_replace en regex'en (preg_replace) gebruikt voor smilies. Denk dat een parser met complete grammatica daarvoor dan ook overkill is ;) Op GoT worden RML-tags vziw geparsed met een stackbased-parser, dus daar komt al iets meer bij kijken. Maar volgens mij is dat prima mogelijk zonder Yacc of Lex :) Ik heb een paar jaar geleden een stackbased template-parser gemaakt, en die splitste eerste alles (met preg_split bijvoorbeeld) uit in tags en inhoud en ging het daarna doorwerken. Misschien dat het zelfs lukt met explode :) Gaat het om grote berichten die je niet ineens in je geheugen wil hebben, dan kun je het ook token-per-token parsen met strtok :)
dankje voor je post, maar ik heb al meerdere parsers gemaakt dmv de bovenstaande technieken, echter wil ik nu yacc en lex gebruiken..
daarmee ben je stukken flexibeler, en bovendien zekerder van dat alles goed geparsed wordt.

trouwens gebruiken ze hier op got ook een soort lexaanse parser.. weet alleen niet hoe/wat


Edit:
ik heb deze pear modules gevonden:
http://pear.php.net/package/PHP_LexerGenerator
http://pear.php.net/package/PHP_Parser

eens kijken of ik ze aan de praat kan krijgen :)

[ Voor 22% gewijzigd door BasieP op 03-12-2006 11:53 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Anoniem: 26306

Zie de site van .oisyn: Code syntax highlighter.

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Kijk eens hier naar: http://netevil.org/node.php?nid=941, volgens mij doet dit grotendeels wat je wil, vergeet verder niet te laten weten hoe het gaat, het klinkt als een interessant project :P

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
mm vervelend.. ik kan op de server waar ik dit op wil gaan draaien helemaal geen custom versie van php gaan zitten draaien..

kortom.. het hele feest gaat niet door omdat ik geen pear modules of wat voor modules ook kan gaan zitten compilen :|

tenzij iemand nog een puur php based lexxer weet te vinden natuurlijk..

[ Voor 5% gewijzigd door BasieP op 03-12-2006 12:41 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Anoniem: 26306

Ik heb het vermoeden dat de link van elevator probeert uit te leggen dat je alleen voor het omzetten van lexer files naar PHP een C compiler nodig hebt. Op de productieserver dus niet. Maar dat kan ik verkeerd begrepen hebben.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Anoniem: 26306 schreef op zondag 03 december 2006 @ 12:42:
Ik heb het vermoeden dat de link van elevator probeert uit te leggen dat je alleen voor het omzetten van lexer files naar PHP een C compiler nodig hebt. Op de productieserver dus niet. Maar dat kan ik verkeerd begrepen hebben.
er komt een .so file uit.. helaas geen .php :(

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Uit de lexer komt hier 'lemon' als binary, waarna ik c.y kan 'compileren' naar c.php en dat ziet eruit als een lexersource, dus ik weet niet wat je doet, maar je doet het verkeerd :)

God, root, what is difference? | Talga Vassternich | IBM zuigt


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

BasieP schreef op zondag 03 december 2006 @ 12:40:
mm vervelend.. ik kan op de server waar ik dit op wil gaan draaien helemaal geen custom versie van php gaan zitten draaien..

kortom.. het hele feest gaat niet door omdat ik geen pear modules of wat voor modules ook kan gaan zitten compilen :|

tenzij iemand nog een puur php based lexxer weet te vinden natuurlijk..
Als het een shared hosting server is die niet door jou wordt beheerd, kun je altijd de beheerders nog vragen of ze die PEAR modules willen installeren. Dat moet meestal geen probleem zijn.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-06 18:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

BasieP schreef op zondag 03 december 2006 @ 11:14:
nu weet ik dat ze hier op got ook een soort yacc en lex gebruiken voor het parsen van berichtje
Mijn code highlighter die hier op GoT gebruikt wordt gebruikt alleen flex, die C++ code genereert wat vervolgens naar een php module wordt gecompileerd.

Je wilt ook niet dat elke keer als je pagina opgehaald wordt een scanner/[parser gegenereerd wordt, die zijn namelijk nogal statisch. Je zult dus of de C code als een php module moeten compileren zoals ik heb gedaan, of een flex/bison variant vinden die PHP code output ipv C code.

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.


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
.oisyn schreef op zondag 03 december 2006 @ 14:11:
[...]


Mijn code highlighter die hier op GoT gebruikt wordt gebruikt alleen flex, die C++ code genereert wat vervolgens naar een php module wordt gecompileerd.

Je wilt ook niet dat elke keer als je pagina opgehaald wordt een scanner/[parser gegenereerd wordt, die zijn namelijk nogal statisch. Je zult dus of de C code als een php module moeten compileren zoals ik heb gedaan, of een flex/bison variant vinden die PHP code output ipv C code.
je hebt gelijk inderdaad.

even voor de duidelijkheid: ik ben op zoek naar dat laatste..

This message was sent on 100% recyclable electrons.

Pagina: 1