"Justin Johansson" <[email protected]> wrote in message news:[email protected]... > Nick Sabalausky Wrote: > >> "Ellery Newcomer" <[email protected]> wrote in message >> news:[email protected]... >> > Nick Sabalausky wrote: >> >> "Denis Koroskin" <[email protected]> wrote in message >> >> news:op.u1v7jdgco7c...@korden-pc... >> >>> Yes, it's a DMD port. Unfortunately, there is no other mature D >> >>> front-end >> >>> at present. Other folks are working on D compilers (dil, dang, ...) >> >>> but >> >>> the progress is very slow. >> >> >> >> FWIW, I've been meaning to try to write a D grammar for GOLD when I >> >> get a >> >> chance (the Haxe grammar I wrote only took a few days). If that pans >> >> out >> >> (depends just how simple and unambiguous the grammar is), then that >> >> could >> >> be >> >> used with Goldie as a starting point (ie, lex/parse would be taken >> >> care >> >> of. >> >> Semantic analysis, optimization and back-end would need to be added >> >> in). >> >> >> > >> > All but the hard parts :) >> >> Yea, like I said, "FWIW" ;) >> >> > >> > I could count the number of places that are ambiguous syntactically or >> > semantically on one hand, and maybe the number of places that require >> > arbitrary lookahead also. Do LALR parsers care about arbitrary >> > lookahead? LL(k) parsers do. >> >> Beats me, I'm not nearly as up on parsing theory as I'd like to be. Could >> you give me a simple example? > > There are a zillion tutorials relating to parsing on the web. > > Try googling: > > parsing theory tutorial > > 2nd hit: An introduction to parsing >
That mentioned, in the section about LL(k), "If both A<B and A<B> are legal expressions, where B can be of arbitrary length, then no finite amount of look-ahead will allow this to be parsed." I did a quick test in gold (LALR), and this handles the above just fine: ------------------------------ "Name" = 'Test' "Author" = 'Test' "Version" = 'Test' "About" = 'Test' "Start Symbol" = <Type1Or2> <Type1Or2> ::= <Type1> | <Type2> <Type1> ::= 'A' '<' <Bs> <Type2> ::= 'A' '<' <Bs> '>' <Bs> ::= 'B' | <Bs> 'B' ------------------------------ However, that one example alone doesn't necessarily prove that it's always doable.
