xtentic: Wat ik hier uit begrijp en hoop dat ik het goed is is dat een parser alleen zoals je al zegt een boom structuur maakt
Yepz, een grammatica (die over het algemeen context-vrij zijn voor programmeertalen, hoef je verder niet direct te weten) bestaat uit productie regels: een parser bepaalt hoe een string 'geproduceerd' kan worden door de productieregels toe te passen.
maar als ik naar je voorbeeld kijk zie ik eerst plus, en dan het gedeelte min, waaruit ik logischer wijs begrijp dat je 5 + - 6 - 2 lees, omdat min al voor de 6 staat...
Je hebt me helemaal goed begrepen, want met de gebruikelijke associativiteit van + en - (links) is mijn voorbeeld inderdaad volledig fout

. De min moet inderdaad bovenaan staan: (5 + 6) - 2. +
code:
1
2
3
4
5
6
7
| <Min>
<Plus>
<IntConst>5</IntConst>
<IntConst>6</IntConst>
</Plus>
<IntConst>2</IntConst>
</Min> |
Sorry voor de vergissing, best schaamteloos om zo'n fout te maken als je net een grammatica voor SQL gemaakt heb (met dus ook numerieke expressies

).
Overigens is het parsen van numerieke expressies zeer educatief: 5 + 3 * 2 is bijvoorbeeld geen (5 + 3) * 2, zoals dat bij de - wel het geval was. Juist voor deze situaties heb je kennis van grammatica's en productie-regels nodig.
ad-hoc?...
Een ad-hoc oplossing is een oplossing die misschien wel werkt, maar toch niet fraai is: niet goed opgezet, niet herbruikbaar (in het woordenboek staat "voor deze zaak, voor dit doel in het bijzonder"). Ook wel bekend als "dirty of quick hack"

.
maar wat ik wel begrijp is gewoon dat je non syntax je template gaat parsen dus zonder extene informatie om het zo even te noemen.
Wat ik vooral bedoelde is dat de parser in dit geval niet gebouwd wordt met de structuur van de taal als handleiding. Er wordt dus gewoon een beetje geprogrammeerd met de gedachte "oh, hier kan dit en daar kan dat". Typische gevallen waarmee zo'n aanpak volledig faalt is bijvoorbeeld een quote in een quote enz...
Begrijp ik goed dat dit eingelijk wijst naar het gene dat ik al heb gemaakt?, want deze heeft een 'standaard' gramatica en parst deze gewoon weer naar html output zoals het ook in de 'template' vermeld staat maar dan met de veranderde delen.
Ik doelde denk ik toch op een nog gestructureerde aanpak, met een echte grammatica voor de taal en niet een 'standaard' grammatica ('vanzelfsprekende' grammatica). Eigenlijk moet je denken aan concrete productie-regels. Hiermee krijg je te maken met allerlei grammatica technieken en enge termen als non-terminals, terminals en dergelijke. Het kan echter wel erg nuttig zijn om je hier eens in te verdiepen als je dergelijk werk leuk vindt.
Het voorbeeld zoals je vermelde leek idd erg veel op XML, maar xml wordt ook geparsed voordat het de gebruiker bereikt dus verdubbel je dan de parser van 1 parser naar 2x parsen?...
XML is in feite een
concrete syntax voor Abstracte Syntax Trees (eigenlijk in het algemeen bomen, om precies te zijn reguliere bomen). Omdat deze boom bij XML echter wel weggeschreven is als een
string moet deze toch nog eerst geparsed worden. Dit kan echter gedaan worden door een parser die alle XML documenten aan kan: generiek voor alle documenten in de taal XML. Als de parser klaar is, heb je gelijk een soort abstract syntax tree in handen.
Tuurlijk en zoals ik al vermelde is XML ook al geparsed en dus minder leuk als uitdaging

, het is voor mij persoonlijk een leerweg, ik speel al ruim 6 jaar met websites en dat begon met het parsen van een template in QuickBASIC naar een gewone HTML pagina

maar zoals de tijd doorgaat moest ik ook door en wil nu de weg in staan van PHP.
Ok, als je zelf meer van parsen wilt leert is dat natuurlijk heel erg leuk, maar probeer niet alles zelf te ontdekken: dat kan namelijk gewoon niet. Je moet echt even wat toegankelijk literatuur opzoeken en minstens leren wat talen, grammatica's en productie regels en lexers zijn. Ook moet je eens werken met een parser-generator.
Dit begrijp ik niet, het is toch leuk dat meerdere mensen gaan spelen met een taal en zo proberen hun eigen dingen te maken/crearen...
Tuurlijk het is harstikke leuk als mensen hier zelf mee aan de slag gaan, maar het ontwerpen van een XML achtig iets vind ik persoonlijk minder zinvol. Ik denk dat het dan nuttiger is om te kiezen voor echte concrete syntax of anders gewoon XML te nemen.
Voor zover ik het nu doe is het denk ik met oplossing 1, ik genereer gewoon de zelfde code als UBB codes maar dat werkt nog niet zoals ik het wil hebben, oplossing 2 is echter voor mij wel te doen maar vergt veel meer ervaring en kennis dan dat ik nu heb en voor oplossing 3 zie ik het somber in
Het grappige is dat oplossing 3 verreweg het makkelijkst is. Een parser generator doet al het werk voor je en bovendien op een nette manier. Het is veel ingewikkelder om een parser te schrijven dan om er eentje te genereren uit een grammatica. De vervelende eigenschap van veel programmeurs (inclusief mij) is echter dat ze nooit willen lezen en zelf aan de slag willen. Dit lijkt makkelijker, maar meestal kom je na wat leeswerk juist op een makkelijkere oplossing. Als je serieus met parsen bezig gaat
moet je gewoon kennis hebben van grammatica's.
Oplossing 2 is een goede keuze als je veel kennis van parsers op wilt doen, maar vereist
meer kennis dan het generen van een parser.
Je bedoeld als je de template geparsed hebt naar een soortement grote array (tree). Dat is zoals ik al vermelde in mijn geval denk ik wel een zeer grote opgave behalve als we het over XML gaan hebben.
Je parsed inderdaad naar een soort boom-structuur. Vergis je echter niet: het direct interpreteren van je templates is
veel moeilijker dan het opbouwen van een boom-structuur. Je moet je probleem zoals ik op de eerste regel al zei verdelen in twee onderdelen: parsen, evalueren. Jij doet het in feite tegelijk en dat maakt het werk alleen maar veel ingewikkelder.
Dit begrijp ik nog niet evenals het idee van ZEND dat je je data kan versleutelen en dan nogmaals kan compileren door PHP.
Tja, jij schrijft toch PHP? Waarom zou een tool dan geen PHP kunnen genereren?
Dat parsers het systeem trager maken is mij idd al bekend, maar dat het zoveel zou uitmaken niet

Het gaat hier eigenlijk niet om het parsen, maar het evalueren van de template. Jij doet dit tegelijk, wat lastig is. Als je dit verdeeld in twee componenten is compilatie de vervanging van de interpretatie van de boom. PHP moet ook geparsed worden, dus daarvoor is het eigenlijk geen vervanging (behalve dat de PHP parser vast sneller en beter is dan een eigen parser).
idd, maar hoe zou dat dan te controlleren zijn?
Als jouw template engine PHP code oplevert 'compileer' je de template in feite. Het resultaat is PHP en dat kan je gewoon bekijken en uitvoeren. Dit is dus juist uitstekend te controleren. Een interpretatie methode kan niet bekeken worden: die moet je uitvoeren.
Verder zal ik gaan spacen op XML
Ik begin oud te worden: 'spacen' is nieuw voor me

.
al wil ik toch wel proberen mijn parser eerst NON XML te houden omdat ik op die manier PHP nog beter onder de knie kan krijgen alsdat ik het nu heb.
Dat is op zich een prima aanpak. Wees echter niet te bang voor dingen die nieuw en moeilijk lijken zoals bijvoorbeeld een grammatica en een parser-generator. Als jij ze eenmaal beheerst zal je je voor je kop slaan dat je er niet eerder naar gekeken hebt

. Het is echt de moeite waard om tijd te steken in het lezen over de ideeen en methoden die al ontwikkeld zijn.
dit zal echter door mijn eigenschuld (gekapt met school ivm mooie werk aanbieding toen die tijd) gekomen zijn.
Tja, kappen met school is inderdaad niet verstandig, maar daar ben je zelf al achter ....
Wieeeeeeew ik heb nog nooit zoveel getyped achter elkaar
Dat krijg je ervan als je met mij gaat praten

.
Nogmaals vriendelijk bedankt.
Graag gedaan hoor

.