Nick Sabalausky Wrote: > "Nick Sabalausky" <[email protected]> wrote in message > news:[email protected]... > > I've been trying to make a grammar for the Haxe langauge, and I've been > > having a hell of a time emulating it's expression-based if/if-else (as > > opposed to statement-based as in D). I'm sure a big part of it is my > > inexperience with writing grammars, but I've also been starting to wonder > > if it's impossible to do context-free. For those unfamiliar, here's how > > the relevant parts in Haxe work: > > > > ------------------------------------------ > .... > > ------------------------------------------ > > > > So, anyone know if a grammar that handles this would need to be > > context-sensitive? Or am I just *really* bad at this? ;) > > > > I guess the key I'm looking for is this: > > // With "if" being an expr, not a stmt: > foo = if(blah) bar = 1; > foo = if(blah) bar = 1; else bar = 2; > > If I make assignment bind tighter than the "if expressions", then I can't > support "foo = if...", I can only support "foo = (if...)" > > But if I make the "if expressions" bind tighter than assignment, then I > can't seem to solve the dangling-else conflict without introducing other > ambiguities. > > Anyway, I'm not really looking to get an exact solution, just wondering if > there's something about it that causes it to be impossible for a > context-free grammar. > >
Although I don't really understand your problem or how it relates to the D lang. D and other C like languages do have if expressions too but they're just not called if expressions. They're called ternary expressions due to the way they have 3 blocks around single characters rather than the word 'if' but the concept is pretty much the same. condition ? trueCode : falseCode
