Bonjour,
Je suis en train de d�buter avec ply.
Mon fichier min_lex.py est le suivant:
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
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))
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
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)
Quelqu'un pourrait-il me dire ce qui cloche SVP? Merci
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
Partager