3 ms·
How is it not possible? Here's a simple grammar: if_stmt <- "if" expr INDENT stmts DEDENT ("else" "if" expr INDENT stmts DEDENT)* ("else" INDENT stmts DEDE
by xigoi 5y ago
How is it not possible? Here's a simple grammar:
if_stmt <- "if" expr INDENT stmts DEDENT ("else" "if" expr INDENT stmts DEDENT)* ("else" INDENT stmts DEDENT)?
It does require one-token lookahead, but it's unambiguous.
- deleted 5y ago[deleted]
- cxr 5y agoAre INDENT and DEDENT here describing whitespace sensitivity in the vein of Python, which "uses whitespace to delimit control flow blocks"[1] (elsewhere[2]: "Python uses whitespace indentation, rather than curly brackets or keywords, to delimit blocks")? We're specifically talking about the subset of languages where these blocks _don't_ have their own delimiters[3]. 1. https://en.wikipedia.org/w/index.php?title=Python_syntax_and https://en.wikipedia.org/w/index.php?title=Python_syntax_and... 2. https://en.wikipedia.org/w/index.php?title=Python_(programmi https://en.wikipedia.org/w/index.php?title=Python_(programmi... 3. There is a reading of Bob's original comment such that it's suggesting that Python and end-if languages are among languages without them (or something—I can't make total sense of that part of the comment; it gets kind of garden path-y), but they're not.
- xigoi 5y agoIt doesn't matter how indentation is parsed. What I wanted to say that you can simply replace "elif" with "else" "if" in the grammar.
- munificent 5y agoYou're right, you could do this in Python because it uses indentation for block delimiting. That means this is unambiguous: if c1 then: s1 else if c2: s2 s3 Without significant indentation, it's not possible to tell if "s3" is indented to be part of the the second if's then branch. In other words, "else if" and "else INDENT if" are unambiguously different in Python. That's not true in other languages that use "elif"/"elsif"/"elseif" where only newlines are significant and not indentation.