
Jan Kanis wrote:
if we follow this train of thought to it's ultimate conclusion everything is LL1, just parse the file as a sequence of characters and sort out whether they make sense later on :) .
You're right that this is a possible implementation strategy, but it doesn't mean that "everything is LL(1)". Being LL(1) or not is a property of the grammar, and it concerns the language that the *parser* accepts. The Python language itself is actually not LL(1). CPython gets away with using an LL(1) parser because the parser accepts a slightly different language that's a superset of Python, and *that* language is LL(1) (meaning that you can write down an LL(1) grammar for it). This is the strategy used by almost all practical language implementations, and usually the division of labour is arranged so that the parser does most of the hard work of weeding out invalid programs. In the case you suggest, you've gone to the extreme of making the parser do almost none of the work, and although the language the parser accepts is LL(1), it's a wildly different one from the language the system as a whole accepts. So when we talk somewhat loosely about a language such as Python being LL(1), what we mean is that there is a superset, which isn't *too* much bigger, that's LL(1), and we make our parser recognize that superset. -- Greg