nonassoc
試したが、失敗…(原因不明)
#!/usr/bin/env python import ply.lex as lex tokens = ( 'A', ) t_A = r'A' t_ignore = " \t" literals = ['+', '<'] def t_error(t): print "Illegal character '%s'" % t.value[0] t.lexer.skip(1) lex.lex() import ply.yacc as yacc precedence = ( ('nonassoc', '<'), ('left', '+'), ) def p_input(p): 'input : exp' def p_exp(p): '''exp : A | exp '+' exp | exp '<' exp''' if len(p) == 4: p[0] = "|%s %s %s|" % (p[1], p[2], p[3]) print p[0] else: p[0] = p[1] def p_error(p): print "Syntax error at '%s'" % p.value yacc.yacc() while 1: try: s = raw_input('input > ') except EOFError: break if not s: continue yacc.parse(s)
で、
input > A+A |A + A| input > A+A+A |A + A| ||A + A| + A| input > A<A |A < A| input > A<A<A |A < A| |A < |A < A|| input > A<A+A |A + A| |A < |A + A||