Bonjour,
Je suis en train de débuter avec ply.
Mon fichier min_lex.py est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
import ply.lex as lex
 
tokens = (
	'NUMBER',
	'ADD_OP',
	'MUL_OP'
#	'PLUS',
#	'MINUS'
	)
 
#t_PLUS	= r'\+'
#t_MINUS	= r'-'
 
def t_NUMBER (t):
	r'\d+'
	t.value = int (t.value)
	return t
 
def t_newline(t):
	r'\n+'
	t.lexer.lineno += len(t.value)
 
t_ignore = ' \t'
 
def t_error(t):
	print ("Illegal character '%s'" %t.value[0])
	t.lexer.skip(1)
 
lex.lex()
 
if __name__ == "__main__":
	import sys
	prog = file (sys.argv[1]).read()
#	prog = file(sys.argv[1]).read()
	lex.input(prog)
 
	while 1:
		tok = lex.token()
		if not tok: break
		print ("line %d: %s(%s)" %(tok.lineno, tok.type, tok.value))
Mon fichier min_yacc.py est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
import ply.yacc as yacc
from min_lex import tokens
 
operations = {
	'+' : lambda x,y: x+y,
	'-' : lambda x,y: x-y,
	'*' : lambda x,y: x*y,
	'/' : lambda x,y: x/y,
}
 
precedence = (
	('left', 'ADD_OP'),
	('left', 'MUL_OP'),
)
 
#I define operation linked to tokens
 
def p_expression(p):
	'''
    expression: expression ADD_OP expression
    | expression MUL_OP expression
        '''
	p[0] = operations [p[2]](p[1], p[3])
 
def p_error(p):
	print ("Erreur de syntaxe sur la ligne %d" % p.lineno)
	yacc.errork()
 
yacc.yacc(outputdir = 'generated')
 
if __name__ == "__main__":
	import sys
	prog = file(sys.argv[1]).read()
	result = yacc.parse(prog)
	print (result)
en compilant, j'ai l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
ERROR: min_yacc.py:20: Syntax error. Expected ':'
Traceback (most recent call last):
  File "min_yacc.py", line 29, in <module>
    yacc.yacc(outputdir = 'generated')
  File "/usr/lib/python2.7/dist-packages/ply/yacc.py", line 3106, in yacc
    raise YaccError("Unable to build parser")
ply.yacc.YaccError: Unable to build parser
Quelqu'un pourrait-il me dire ce qui cloche SVP? Merci