#!/usr/bin/env python
tokens = (
+ 'COMMA',
'NAME','INTEGER', 'FLOAT',
'LPAREN','RPAREN',
'PLUS','MINUS','TIMES','DIVIDE','EQUALS',
# Tokens
+t_COMMA = r'\,'
t_ABS = r'\.ABS\.'
t_EXP = r'\.P\.'
t_NOT = r'\.NOT\.'
'expression : FLOAT'
t[0] = ('float', t[1])
+def p_expression_subscript(t):
+ 'expression : NAME application'
+ t[0] = ('variable', t[1], tuple(t[2]))
+
+def p_expression_application(t):
+ "application : LPAREN inner_expression RPAREN"
+ t[0] = t[2]
+
+def p_expression_tail_empty(t):
+ "inner_expression : expression"
+ t[0] = [t[1]]
+
+def p_expression_tail_nonempty(t):
+ "inner_expression : inner_expression COMMA expression"
+ t[0] = t[1] + [t[3]]
+
def p_expression_name(t):
'expression : NAME'
t[0] = ('variable', t[1])
import readline
-while 1:
+while True:
try:
- s = raw_input('calc > ')
+ s = raw_input('> ')
except EOFError:
break
yacc.parse(s)