Come posso descrivere una grammatica utilizzando regex (o pyparsing è meglio?) Per un languge sceneggiatura presentati qui di seguito (Backus-Naur Form):Convertire BNF grammatica pyparsing
<root> := <tree> | <leaves>
<tree> := <group> [* <group>]
<group> := "{" <leaves> "}" | <leaf>;
<leaves> := {<leaf>;} leaf
<leaf> := <name> = <expression>{;}
<name> := <string_without_spaces_and_tabs>
<expression> := <string_without_spaces_and_tabs>
Esempio dello script:
{
stage = 3;
some.param1 = [10, 20];
} *
{
stage = 4;
param3 = [100,150,200,250,300]
} *
endparam = [0, 1]
io uso python re.compile e voglio dividere tutto in gruppi, qualcosa di simile:
[ [ 'stage', '3'],
[ 'some.param1', '[10, 20]'] ],
[ ['stage', '4'],
['param3', '[100,150,200,250,300]'] ],
[ ['endparam', '[0, 1]'] ]
Aggiornamento: Ho scoperto che il pyparsing è una soluzione molto migliore invece di regex.
si può solo ridurre la grammatica sostituendo tutti i nodi non terminali per ottenere una regex. Tuttavia, a cosa serve questo? Il risultato restituirebbe semplicemente un flusso di token per la stringa di input, ma non preserverebbe alcuna struttura, necessaria per dare un senso semantico al codice. –
Qui c'è un convertitore ABNF-to-regex: http://www.akr.org/abnf/ –
Vedi anche questa domanda relativa allo Stack Overflow: http://stackoverflow.com/questions/8898049/how-to-convert -a-regular-grammar-to-regular-expression –