On 05/28/2013 09:45 AM, Citizen Kant wrote:


   <SNIP>

I'm trying to figure out the rules on how to recognize when a combination
of symbols is considered a well formed expression in Python. Since I
couldn't find any doc that lists all Python syntax rules --or maybe the doc
is too long to be managed by me right now--, stating all kinds of legal
combination among its symbols, I had this idea that well formed expressions
must respond to truth tables. I think I'm not pretty much interested on how
each symbol like 9 or Z or + come to be truth (maybe I'm wrong) but in the
truth of their combinations. Do I am in the correct path? Understanding the
truth tables (which I'm not very familiarized with) would help me on
writing Python in a more intuitive way?


Read the first 3 pages of the link Walter sent you:

http://homepage.divms.uiowa.edu/~sriram/16/spring12/lectureNotes/Feb8-2012.pdf

Then tell us what didn't you understand. It's quite informal, and maybe not quite complete. But it covers most of the grammar informally.

When an expression is not well-formed, you'll get a syntax error, which happens at compile time.

Later parts of the pdf are describing evaluation, which doesn't happen till the code runs. These are two distinct phases, even if much of your code may be running immediately after compiling. It's at evaluation time that you MAY be interested in truth tables. And then only if parts of the expression are boolean. There's no truth-table involvement in deciding the result of 12+3*4, but there is operator precedence, covered in the above pdf file.

The full grammar, in BNF, can be found at:

  http://docs.python.org/2/reference/grammar.html

Notice there's lots more to the language than expressions. And that reading BNF is difficult without training. It's a language, also, one that's used for describing the syntax of computer languages. And some language constructs end up with a very confusing BNF.

I'm still bothered that all your symbol examples are single-character. But a symbol is 1 OR MORE characters, with certain restrictions on what they can be. And the first phase of compilation is to tokenize the source code. For a simple language, that might be splitting the text by white space. In Python, there are other rules applied for tokenizing. For example, in an expression, a * symbol that doesn't have another one immediately next to it is a multiply operator. But if there are two, it's the exponentiation operator.

--
DaveA
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to