Thanks for the link, but since it is using indention it doesn't cover
what I wanted to do. It's the grammar that I'm not very good at. Any
more help would be apreciated.

On Feb 10, 8:42 pm, Christian Wyglendowski <[email protected]>
wrote:
> Create tokens for the indentation/curly braces and the 'if' keyword
> and then grammar rules that handle sequences of those tokens.  I can't
> go into too much more than that.  The examples included with PLY cover
> quite a bit, really.  Have a look 
> athttp://www.juanjoconti.com.ar/files/python/ply-examples/GardenSnake/G...
> for a partial implementation of Python called GardenSnake (including
> the "if" statement).
>
> On Tue, Feb 10, 2009 at 3:33 PM, matio <[email protected]> wrote:
>
> > I meant how would I create an "if" statement, or anything that would
> > need to be indented/in curly braces?
> > Would I have to completely re-write the code or is there a way just to
> > add it in as it is now (I've looked at the examples but it didn't seem
> > to work)?
>
> > On Feb 9, 6:21 pm, matio <[email protected]> wrote:
> >> How would I make something like an if?
>
> >> On Feb 8, 1:21 pm, David Beazley <[email protected]> wrote:
>
> >> > Either propagate values or don't print the result of the parse.
>
> >> > -Dave
>
> >> > On Sun 08/02/09  8:04 AM , matio [email protected] sent:
>
> >> > > how do I fix it?
>
> >> > > On Feb 8, 12:58 pm, David Beazley <[email protected]
> >> > > om> wrote:> The calculator is printing the result of the
> >> > > parse.  It's printing> None because you're not propagating
> >> > > values.>
> >> > > > -Dave
>
> >> > > > On Sun 08/02/09  7:50 AM , matio ma...@hot
> >> > > mail.co.uk sent:>
>
> >> > > > > what does that mean?
>
> >> > > > > On Feb 8, 12:18 pm, David Beazley
> >> > > <[email protected]> > om> wrote:> You're not propagating
> >> > > values correctly by> > assigning to p[0].> For example, in the
> >> > > p_statement_expr()> > rule.>
> >> > > > > > -Dave
>
> >> > > > > > On Sun 08/02/09  6:20 AM , matio
> >> > > ma...@hot> > mail.co.uk sent:>
>
> >> > > > > > > I've been using ply & have
> >> > > extended the> > example slightly:>
> >> > > > > > > [code]
> >> > > > > > > <code>
> >> > > > > > > import ply.lex as lex
>
> >> > > > > > > reserved = {'print':'PRINT',
> >> > > 'quit' :> > 'QUIT'}>
> >> > > > > > > # List of token names.
> >> > > This is> > always required> > tokens =
> >> > > [> > > > 'NUMBER',
> >> > > > > > > 'NAME',
> >> > > > > > > 'PLUS',
> >> > > > > > > 'MINUS',
> >> > > > > > > 'TIMES',
> >> > > > > > > 'DIVIDE',
> >> > > > > > > 'LPAREN',
> >> > > > > > > 'RPAREN',
> >> > > > > > > 'EQUALS',
> >> > > > > > > 'STRING',
> >> > > > > > > ] +
> >> > > list(reserved.values())>
> >> > > > > > > # Regular expression rules for
> >> > > simple> > tokens> > t_PLUS    =
> >> > > r'\+'> > > > t_MINUS   = r'-'
> >> > > > > > > t_TIMES   = r'\*'
> >> > > > > > > t_DIVIDE  = r'/'
> >> > > > > > > t_LPAREN  = r'\('
> >> > > > > > > t_RPAREN  = r'\)'
> >> > > > > > > t_EQUALS = r'='
>
> >> > > > > > > def t_NAME(t):
>
> >> > > r'[a-zA-Z_][a-zA-Z_0-9]*'> > > > t.type =
> >> > > reserved.get(t.value,'NAME')> >    # Check for reserved> >
> >> > > words> > > > return t
>
> >> > > > > > > # A regular expression rule with
> >> > > some> > action code> > def
> >> > > t_NUMBER(t):> > > > r'\d+'
> >> > > > > > > t.value = int(t.value)
> >> > > > > > > return t
>
> >> > > > > > > # Define a rule so we can track
> >> > > line> > numbers> > def
> >> > > t_newline(t):> > > > r'\n+'
> >> > > > > > > t.lexer.lineno +=
> >> > > len(t.value)>
> >> > > > > > > def t_STRING(t):
>
> >> > > > > r'\"([^\\"]|(\\.))*\"'>
> >> > > > escaped = 0> > > > str = t.value[1:-1]
> >> > > > > > > new_str = ""
> >> > > > > > > for i in range(0,
> >> > > len(str)):> > > > c = str[i]
> >> > > > > > > if escaped:
> >> > > > > > > if c == "n":
> >> > > > > > > c = "\n"
> >> > > > > > > elif c ==
> >> > > "t":> > > > c = "\t"
> >> > > > > > > new_str += c
> >> > > > > > > escaped = 0
> >> > > > > > > else:
> >> > > > > > > if c ==
> >> > > "\\":> > > > escaped = 1
> >> > > > > > > else:
> >> > > > > > > new_str += c
> >> > > > > > > t.value = new_str
> >> > > > > > > return t
>
> >> > > > > > > # A string containing ignored
> >> > > characters> > (spaces and tabs)> > t_ignore  =
> >> > > ' \t'>
> >> > > > > > > # Error handling rule
> >> > > > > > > def t_error(t):
> >> > > > > > > print "Illegal character
> >> > > '%s'" %> > t.value[0]> >
> >> > > t.lexer.skip(1)>
> >> > > > > > > # Build the lexer
> >> > > > > > > lexer = lex.lex()
> >> > > > > > > [/code]
> >> > > > > > > </code>
>
> >> > > > > > > &
>
> >> > > > > > > [code]
> >> > > > > > > <code>
> >> > > > > > > import ply.yacc as
> >> > > yacc> > > > import sys
>
> >> > > > > > > # Get the token map from the
> >> > > lexer.> >  This is required.> > from
> >> > > calclex import tokens>
> >> > > > > > > names = {}
> >> > > > > > > def
> >> > > p_statement_assign(t):> > > > 'statement : NAME
> >> > > EQUALS> > expression'> > names[t[1]] =
> >> > > t[3]>
> >> > > > > > > def
> >> > > p_statement_expr(t):> > > > 'statement :
> >> > > expression'> > > > if t[1] != None:
> >> > > > > > > print t[1]
> >> > > > > > > else:
> >> > > > > > > pass
>
> >> > > > > > > def
> >> > > p_expression_name(t):> > > > 'expression : NAME'
> >> > > > > > > try:
> >> > > > > > > t[0] = names[t[1]]
> >> > > > > > > except LookupError:
> >> > > > > > > print "Undefined name
> >> > > '%s'" %> > t[1]> > t[0] = 0
>
> >> > > > > > > def
> >> > > p_expression_plus(p):> > > > 'expression : expression
> >> > > PLUS> > term'> > p[0] = p[1] +
> >> > > p[3]>
> >> > > > > > > def
> >> > > p_expression_minus(p):> > > > 'expression : expression
> >> > > MINUS> > term'> > p[0] = p[1] -
> >> > > p[3]>
> >> > > > > > > def
> >> > > p_expression_term(p):> > > > 'expression : term'
> >> > > > > > > p[0] = p[1]
>
> >> > > > > > > def p_term_times(p):
> >> > > > > > > 'term : term TIMES
> >> > > factor'> > > > p[0] = p[1] * p[3]
>
> >> > > > > > > def p_term_div(p):
> >> > > > > > > 'term : term DIVIDE
> >> > > factor'> > > > p[0] = p[1] / p[3]
>
> >> > > > > > > def p_term_factor(p):
> >> > > > > > > 'term : factor'
> >> > > > > > > p[0] = p[1]
>
> >> > > > > > > def p_factor_num(p):
> >> > > > > > > 'factor : NUMBER'
> >> > > > > > > p[0] = p[1]
>
> >> > > > > > > def p_factor_expr(p):
> >> > > > > > > 'factor : LPAREN
> >> > > expression> > RPAREN'> > p[0] = p[2]
>
> >> > > > > > > def p_print(p):
> >> > > > > > > '''expression : PRINT LPAREN
> >> > > STRING> > RPAREN> > | PRINT LPAREN
> >> > > expression> > RPAREN'''> > p[0] = p[3]
>
> >> > > > > > > def p_quit(p):
> >> > > > > > > 'expression : QUIT'
> >> > > > > > > sys.exit()
>
> >> > > > > > > # Error rule for syntax
> >> > > errors> > > > def p_error(p):
> >> > > > > > > print "Syntax error
> >> > > in> > input!">
> >> > > > > > > # Build the parser
> >> > > > > > > parser = yacc.yacc()
>
> >> > > > > > > if len(sys.argv) == 1:
> >> > > > > > > while True:
> >> > > > > > > try:
> >> > > > > > > s = raw_input('calc >
> >> > > ')> > > > except EOFError:
> >> > > > > > > break
> >> > > > > > > if not s: continue
> >> > > > > > > result =
> >> > > parser.parse(s)> > > > print result
>
> >> > > > > > > elif sys.argv[1] ==
> >> > > > > "-f":> > f =
> >> > > open(sys.argv[2],> > "r")> > s =
> >> > > f.readlines()> > > > for line in s:
> >> > > > > > > result =
> >> > > parser.parse(line)> > > > if result != None:
> >> > > > > > > print "result !=
> >> > > none"> > > > print result
> >> > > > > > > [/code]
> >> > > > > > > </code>
> >> > > > > > > When I run
> >> > > print("hello") it> > says:> > hello
> >> > > > > > > none
> >> > > > > > > calc>
>
> >> > > > > > > What's wrong?
> >> > > > > > > I also posted it 
> >> > > > > > > athttp://ubuntuforums.org/showthread.php?p=6698006#post6698006&;
> >> > > amp;> > gt;>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ply-hack" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/ply-hack?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to