dabeaz / ply

Python Lex-Yacc

Home Page:http://www.dabeaz.com/ply/index.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Q] Problem in parsing expressions that have names

jack17529 opened this issue · comments

I have these parsing functions for rpn calculations.

def p_statement_assign(p):
    'statement : NAME expression EQUALS'

def p_statement_expression(p):
    'statement : expression'

def p_expression_binop(p):
    '''expression : expression expression PLUS
                | expression expression MINUS
                | expression expression MULTIPLY
                | expression expression DIVIDE
                | expression expression LEFTSHIFT
                | expression expression CHKNOTEQUAL
                | expression expression BITAND
                | expression expression BITOR
                | expression expression BOOLAND
                | expression expression BOOLXOR
                | expression expression POW
                | expression expression CHKLESSOREQUAL
    '''

def p_expression_unop(p):
    '''expression : expression UMINUS
                    | expression DECREMENT
                    | expression BOOLNOT
                    | expression BITNOT
    '''

def p_expression_name(p):
    "expression : NAME"

def p_expression_int_float_hex_bin(p):
    '''
    expression : INT
                | FLOAT
                | BIN
                | HEX
    ''' 

def p_error(p):

When I provide this input a 3 * without assigning a, I get error Syntax error at '*' instead of getting the error Undefined name 'a'.

Also get the same error even after assigning variable "a", and evaluating this input a 4 * but surprisingly don't get any error with this input 4 a *.

I haven't found a good solution for this problem, please guide me.

Problem [Solved]