Op zondag 30 december 2001 19:52 schreef mbravenboer het volgende:
[Otis: Vanaf het punt dat de invoer correct is, is het een one-way street naar de final output. Omdat de invoer correct is, dwz syntactisch correct, DUS is er een uitvoer mogelijk, gaat dit altijd goed.]
Syntaxtische correctheid is slechts 1 van de eerste stappen in de compiler. Met syntactische correctheid doel ik nu op het juist zijn van de code met de grammatica van een taal. De semantische analyse (na de abstract parse tree fase) is de hoofdtaak van de compiler en daar kan nog een heleboel misgaan.
Humor.

de semantische analyze is iets wat komt kijken bij optimalisatie, immers, daar kun je door diepere interpretatie van wat er gebeurt, kijken of er wat te optimaliseren valt. Echter 3GL talen bevatten in de compile-stap geen semantische analyzes, er is immers een 1:1 afbeelding te realiseren tussen syntactisch correcte programmatext en een output. Let wel: een 3GL concludeert pas of iets SYNTACTISCH correct is in de tokenparser (dus of bv een for header is afgesloten met een haakje)! Dezelfde plek waar initiele emitting plaatsvindt.
Ik begrijp derhalve niet waar je op doelt met je 'er kan nog van alles mis gaan'. Wellicht interpreteer ik je teksten foutief. (no pun intended)
[Otis: Omdat de fase 'correcte-invoer -> output' altijd slaagt, is alleen dat gedeelte ervoor van belang. Waarom zou je daar niet wensen dat DAT gedeelte van de compiler je zoveel mogelijk helpt? Dat heeft imho niets met pure input -> output compilatie te maken, omdat dat daarna pas komt.]
Als je uitgaat van een correct stukje code is de rest van het compileer traject inderdaad niet zo erg interessant. Een belangrijke taak van de compiler is echter juist om de correctheid te controleren. De syntax is hierbij maar stap 1 van het verhaal. Het traject na de syntax (dus vanaf de abstract parse tree) is dus wel degelijk zeer relevant.
Dat klopt, maar wanneer weet je of de syntax van de geboden tekst correct is? Als je die compleet hebt doorlopen en hebt getest, bv of een 'end' is vermeldt na een 'begin' en men niet een end of file of bv een nieuwe functie header tegenkomt. Als je geen emitting laat plaatsvinden tijdens je tokenparser, maar daarin hooguit de syntaxis fixt waar nodig en waar MOGELIJK, krijg je daarna een syntactisch correcte input die door de tokenparser _ALTIJD_ tot code kan worden omgezet. Je moet wel eenduidig code KUNNEN fixen natuurlijk.
Mijn hele punt is nu juist dat je het corrigeren van incorrecte syntax en de semantische analyse + transformatie fase moet scheiden.Je krijgt dus twee gescheiden onderdelen: transformatie naar een correcte syntax en een compilatie fase van een correcte syntax naar een output. Tijdens deze tweede fase vind semantische analyse plaats, waar dus wel degelijk nog iets mis kan gaan. De eerste fase kan je een apart component van de compiler maken, maar wat mij betreft past het beter in een IDE.
Dit is niet juist. Een correcte syntaxis zal altijd zonder fouten compileren naar EEN output. Immers, hoe kun je anders ooit een goed kloppende syntax compileren? Wat jij, naar ik aanneem, bedoelt is de analyze van volgorde van tokens in bv een if handler, of een for() handler. Maar dat is nog steeds syntax checking! Pas als dat naar behoren gedaan is, kun je overgaan tot het compileren van de opgebouwde datastructuren naar een output, de transformatie van wat is aangeboden in tokens naar statements in de doeltaal. Eventueel door meerdere passes gevolgd.
De syntax van een taal is je macht: met behulp van deze syntax bepaal je wat er moet gebeuren. Daarom wil ik er ook zeker van zijn dat de compiler het eens is met deze syntax en niet zelf aan het fantaseren slaat.
Dat kun je sowieso niet. Weet jij hoe een compiler jouw 3GL programmatext compileert naar machinecode? En of dat allemaal precies klopt met wat je verwachtte? Dat kun je niet. Je neemt het maar aan, wat terecht is, anders schreef je het zelf wel in assembler. Ik ben het met je eens dat een compiler alleen DIE code moet fixen die eenduidig gefixt KAN worden. Gelukkig is dat veelal het geval. Op goed geluk statements toevoegen zonder enige vorm van feedback lijkt me ook niet te prefereren, maar jij weet net zo goed als ik dat ik daar niet op doelde.
[Otis: Over de ';']
Je gaat totaal niet op mijn argumenten in (trouwens ook niet op mijn duidelijke unicode verhaal). Ik ben het volledig met je eens dat de ; niet nodig is. Het is echter niet de vraag of hij nodig is, maar of hij wenselijk is. Ik zeg: ja, want het schept duidelijkheid en een compiler kan beter begrijpen wat ik bedoelde en zo betere meldingen geven over incorrecte code.
Over je argumenten mbt het unicode verhaal: dat Kanji characters het case-sensitive/insensitive aspect niet kennen zou al genoeg moeten zijn voor het afschaffen van case-sensitiviteit. Immers: een 6 jarige die kan lezen zal "KoekJe" en "Koekje" beide als "koekje" zien, wat correct is, want beide keren staat dat er. Exact wat iemand met Kanji characters bereikt en wil bereiken. Overigens snap ik het gebruik van Kanji characters in variabelen niet, wanneer de rest van de taalstatements incl API volledig van het Engels zijn afgeleid. Dit geeft IMHO aan dat case sensitiviteit (wat inhoudt: semantisch hetzelfde, syntactisch verschillend) WEL wenselijk is in beschavingen met een latijns alfabet, maar niet in een beschaving met een anderssoortig alfabet. Raar. Geeft je dit niet te denken dat het wellicht gevolg-bestrijding is?
Over of het wenselijk is: daar kun je over discussieren, ikzelf vind het lastig, echter als ik zou moeten kiezen tussen EOL delimiters zoals in VB en ';' dan kies ik voor de ';'. Echter, als ik kijk naar T-SQL waar ik geen van beide heb, dan vind ik dat wel een verademing en mis ze totaal niet. Maar gewenning kan je ingeven dat je ze wel wilt. Echter, imho is het ballast wat 1) errors oplevert en 2) niet echt iets toevoegt aan de leesbaarheid van de code
Dat het parse-technische (veel) complexer is ben ik eigenlijk niet helemaal met je eens. Je hebt volgens mij niet meer look-ahead nodig omdat je in voortdurend op je huidige positie weet of hier een statement afgesloten zou moeten worden als je white-space tegenkomt.
Lijkt me niet: ik kan een tab, EOL of spaties toevoegen zonder dat dat duidt op een statement wat afgesloten is. Wat ik bedoelde met complexer is dat een handler van een statement t.a.t. kan stoppen wanneer hij een ';' token ziet. Een syntax die dat niet gebruikt zal moeten testen welk token wel en niet kan, waardoor de handlers complexer worden. Verder gebruiken veel C compilers geen lookahead, omdat de ';' dat overbodig maakt: zodra je die ziet ben je klaar, en je hoeft die ';' niet te bewaren. Dus je kunt met het huidige token al bepalen wat je moet doen, zonder vooruit te kijken. (vandaar geen lookahead, en waarom ik het aanhaalde, dat je dat bij het ontbreken van een statement delimiter wel nodig hebt).
[Otis: Denk niet dat je uniek bent of dat sukkels zoals ik de fase waarin jij/jullie nu in zitten niet hebben doorgemaakt. Mijn kijk op softwarebouw is een totaal andere dan de meerderheid hier. Echter ik draai ook al wat langer mee.]
Ik vind het zo grappig dat jij voortdurend kritiek hebt op anderen omdat ze 'atijd' gelijk denken te hebben. Verder doe je volgens jou ook niet uit de hoogte. Terwijl je dit meldt moet je echter nog even melden dat jij veel langer meeloopt, waarmee je impliceert dat onze mening verkeerd is en die van jouw goed.
1) Wellicht niet tot je doorgedrongen, maar ik vermeldde dat 'ik veel langer meedraai' erbij als reden waarom mijn mening anders is.
2) Omdat ik langer meedraai zegt niets over de validatie van mijn mening, alleen dat hij anders is OMDAT ik langer meedraai.
3) Ik impliceer helemaal niks omtrent de kwaliteit van jouw mening tov de mijne. Jouw mening blijft prima binnen platgetreden paden, dus hoe kan ik twijfelen aan jouw mening?
[Wat me dan opvalt is dat gemiddelde mening hier is echter al zo oud is en, en dit vind ik echt heel jammer, niet vernieuwend: er zitten nauwelijks echt vernieuwende visies tussen.]
Mwah, dat vind ik wel meevallen. Misschien dat ik op sommige punten een conservatieve mening heb, maar dat is niet per definitie verkeerd. Dit zegt niet zoveel over 'vernieuwend' bezig zijn. Daarmee impliceer je namelijk dat die vernieuwingen ook beter zijn. Dat zijn ze in mijn ogen dus niet.
Vernieuwing bereik je sowieso niet door op betreden paden te blijven. Vernieuwing bereik je WEL door anders tegen de materie aan te kijken. Dat resulteert iig in verandering, of dat beter is zal moeten uitwijzen. Een groot scala aan veranderingen zal net als de geschiedenis uit heeft gewezen, een verbetering opleveren.
Dat ze in jouw ogen niet 'beter' zijn, ligt voor de hand: jouw mening houdt in dat je op bestaande paden vernieuwing zoekt, of althans ruimte tot verandering. Die zal er ongetwijfeld zijn, maar op lange duur zal het je niet brengen wat je zoekt. Ik vind dat jammer, maar wel naar verwachting: [generaliserend]de gemiddelde inf. student denkt meer in details dan in grote lijnen, waardoor de focus niet op waar werkelijk de vernieuwing gehaald kan worden wordt gericht, maar op de enigzinds bekende gebieden[/generaliserend]. Enkelen, en laat ik mezelf daar even buitenplaatsen ter bevordering van de discussie, denken anders dan anderen en komen met op het oog bizarre veranderingen op bestaande thema's veel verder. Wat tot gevolg heeft dat na een lange tijd de mensen die eerst kritisch waren hen volgen met "hij had gelijk!". Ik vind het jammer dat er zo weinig meningen zijn hier die ECHT veranderend zouden kunnen zijn.
Verder vinden anderen (nee, niet speciaal hier op GoT) wel dat ik vernieuwend bezig ben, maar nog belangrijker: ik vond zelf dat ik
leuk bezig ben. Dat jij dat niet vindt, word ik echt niet heet of koud van

. Zolang mijn artikelen maar gepubliceerd worden en ideeen verder uitgedacht worden door anderen vind ik het prima.
Ik heb al vermeld dat wat je LEUK vindt om te doen (bv het programmeren van een OS puur omdat je dat interesseert en leuk vindt) niet relevant is voor argumentatie waarom iets beter zou KUNNEN en eigenlijk zou MOETEN. Die laatste zin van je is overigens wel iets van pot-ketel, denk je ook niet? Of had jij het niet over wie er uit de hoogte deed

.
Welke artikelen bedoel je overigens? Wetenschappelijke publicaties of artikelen op sites?