PLY
Z Wikipedii
PLY (ang. Python Lex-Yacc) to narzędzie służące do tworzenia kompilatorów oraz translatorów z opisu gramatyki zawierającego akcje w języku Python. Autorem jest David Beazley.
Spis treści |
[edytuj] Cechy
Zasadniczo PLY to bezpośrednia implementacja idei programów Lex oraz Yacc w języku Python
- Implementacja całowicie w Pythonie
- Używa parsera LR cechującego się rozsądną wydajnością oraz dobrą wsparciem dużych gramatyk.
- PLY obsługuje większość standardowych możliwości lex/yacc włączając w to reguły pierszeństwa, usuwanie błędów, obsługię niejednoznacznych gramatyk i pustych wyrażeń.
[edytuj] Przykład
Poniższy przykład, pochodzący z dokumentacji PLY, zawiera implementację prostego kalkulatora operujacego na liczbach całkowitych.
import ply.lex as lex
import ply.yacc as yacc
# Lex
tokens = (
'NUMBER',
'PLUS',
'MINUS',
'TIMES',
'DIVIDE',
'LPAREN',
'RPAREN',
)
t_PLUS = r'\+'
t_MINUS = r'-'
t_TIMES = r'\*'
t_DIVIDE = r'/'
t_LPAREN = r'\('
t_RPAREN = r'\)'
def t_NUMBER(t):
r'[-+]?\d+'
try:
t.value = int(t.value)
except ValueError:
print "Line %d: Number %s is too large!" % (t.lineno,t.value)
t.value = 0
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)
# Yacc
def p_expression_plus(p):
'expression : expression PLUS term'
p[0] = p[1] + p[3]
def p_expression_minus(p):
'expression : expression MINUS term'
p[0] = p[1] - p[3]
def p_expression_term(p):
'expression : term'
p[0] = p[1]
def p_term_times(p):
'term : term TIMES factor'
p[0] = p[1] * p[3]
def p_term_div(p):
'term : term DIVIDE factor'
p[0] = p[1] / p[3]
def p_term_factor(p):
'term : factor'
p[0] = p[1]
def p_factor_num(p):
'factor : NUMBER'
p[0] = p[1]
def p_factor_expr(p):
'factor : LPAREN expression RPAREN'
p[0] = p[2]
def p_error(p):
print "Syntax error in input!"
if __name__ == '__main__':
lex.lex()
yacc.yacc()
while 1:
try:
s = raw_input('calc > ')
except EOFError:
break
if not s: continue
result = yacc.parse(s)
print result
[edytuj] Zobacz też
[edytuj] Linki zewnętrzne
| Prezydent Kaczyński nazwany homofobem |
Prezydent Kaczyński został napiętnowany przez Human Rights Watch, organizację broniącą praw człowieka, "za odmawianie ludziom szacunku dla ich rodzin". Bezpośrednim powodem było słynne orędzie z gejowską parą małżeńską.
|
| Nowe wstrzÄ…sy w Chinach |
O nowych wstrząsach w południowo zachodnich Chinach poinformowało w sobotę amerykańskie centrum geologiczne (USGS). Trzęsienie o sile 6,1 w skali Richtera nastąpiło na granicy prowincji Syczuan i Gansu.
|
| Pijany rosyjski statek na mieliźnie |
Na mieliznę lub na podwodne skały wpłynął na Bałtyku koło Bornholmu rosyjski statek do transportu odpadów atomowych. Kapitana jednostki zatrzymano; policja podejrzewa, że był pod wpływem alkoholu, podobnie jak inni członkowie załogi.
|
| ÅšWIAT 24/7 |
Tragiczne trzęsienie ziemi w Chinach, wybory parlamentarne w Serbii i 60. lecie Państwa Izrael, to najważniejsze tematy, o których pisaliśmy w zeszłym tygodniu w tvn24.pl
|
| Ostatni Kennedy trafił do szpitala |
Senator Edward Kennedy z objawami udaru trafił w sobotę do szpitala w Bostonie w stanie Massachusetts - poinformowała agencja Reutera powołując się na doniesienia telewizji CNN.
|
Prezydent Kaczyński został napiętnowany przez Human Rights Watch, organizację broniącą praw człowieka, "za odmawianie ludziom szacunku dla ich rodzin". Bezpośrednim powodem było słynne orędzie z gejowską parą małżeńską.
O nowych wstrząsach w południowo zachodnich Chinach poinformowało w sobotę amerykańskie centrum geologiczne (USGS). Trzęsienie o sile 6,1 w skali Richtera nastąpiło na granicy prowincji Syczuan i Gansu.
Na mieliznę lub na podwodne skały wpłynął na Bałtyku koło Bornholmu rosyjski statek do transportu odpadów atomowych. Kapitana jednostki zatrzymano; policja podejrzewa, że był pod wpływem alkoholu, podobnie jak inni członkowie załogi.
Tragiczne trzęsienie ziemi w Chinach, wybory parlamentarne w Serbii i 60. lecie Państwa Izrael, to najważniejsze tematy, o których pisaliśmy w zeszłym tygodniu w tvn24.pl
Senator Edward Kennedy z objawami udaru trafił w sobotę do szpitala w Bostonie w stanie Massachusetts - poinformowała agencja Reutera powołując się na doniesienia telewizji CNN.