Portál AbcLinuxu, 11. května 2025 10:06

Dotaz: python-parsovani stringu

1.3.2009 00:27 parser
python-parsovani stringu
Přečteno: 302×
Odpovědět | Admin
Zdravim, ucim se parsovat v pythonu, ale hned na zacatku jsem narazil na neprekonatelny problem. Program vypise:
nejakyprikaz: abc
yacc: Syntax error at line 1, token=OTHERCOMMAND
Ale ocekaval bych:
nejakyprikaz: abc
jinyprikaz: xyz
Zde je program:
import ply.yacc as yacc
import ply.lex as lex

data = "define { nejakyprikaz abc; jinyprikaz xyz; }"

tokens = [
        'LPAREN',
        'RPAREN',
        'COLON',
        'ARGUMENT',
]

reserved = {
        'define' : 'DEFINE',
        'nejakyprikaz' : 'SOMECOMMAND',
        'jinyprikaz': 'OTHERCOMMAND',
}

tokens += reserved.values()

t_LPAREN = r'{'
t_RPAREN = r'}'
t_COLON = r';'
t_ignore = ' \t\n'

def t_ARGUMENT(t):
        r'[a-z0-9]+'
        t.type = reserved.get(t.value, 'ARGUMENT')
        return t

def p_start(p):
        'start : DEFINE LPAREN commands RPAREN'
        pass

def p_commands(p):
        """commands : command COLON
                    | commands"""
        pass

def p_command(p):
        """command : some_command
                   | other_command"""
        pass

def p_some_command(p):
        'some_command : SOMECOMMAND ARGUMENT'
        print 'nejakyprikaz:', p[2]

def p_other_command(p):
        'other_command : OTHERCOMMAND ARGUMENT'
        print 'jinyprikaz:', p[2]

debug = False
lex.lex(debug=debug)
yacc.yacc(debug=debug)
yacc.parse(data)
Netusite, co tam mam tak spatne, ze se to nechova podle ocekavani?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Na otázku zatím nikdo bohužel neodpověděl.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.