2009-11-21 15 views
9

Hey ragazzi, questa è la mia prima domanda qui su Stack Overflow e mi chiedevo se potevo chiedere il parere di persone che conoscono un po 'di più su Python e Parser Generator di me.Consigli sui generatori di parser Python

Mi è stato assegnato un compito in cui devo creare un parser per un semplice linguaggio di tipo C. Posso usare qualsiasi linguaggio di programmazione e strumenti che desidero creare il parser, ma sto imparando Python allo stesso tempo, quindi sarebbe la mia scelta preferita.

Ci sono alcune restrizioni che il mio parser deve seguire. In primo luogo, deve essere in grado di leggere in un file di testo contenente le seguenti informazioni:

kind1 : spelling1 
kind2 : spelling2 
kind3 : spelling3 
     . 
     . 
     . 
kindn : spellingn 

Dove ogni tipo e ortografia si riferiscono al tipo di token e il valore della lingua. Questo file è il risultato di mettere un campione di codice attraverso l'analizzatore lessicale del linguaggio.

In secondo luogo, devo essere in grado di personalizzare l'output del parser. Idealmente mi piacerebbe produrre un file che ha convertito il tipo: lista di ortografia in un'altra sequenza di token che sarebbero passati al compilatore della lingua per essere convertiti in codice assembly MIPS. Ecco un piccolo esempio del tipo di cosa che vorrei il parser per essere in grado di produrre:

%function int test 
    %variable int x 
    %variable int y 
%begin 
    %if %id y , %id x > %do 
    %begin 
    %return %num 0 
    %end 
    %return %num 1 
%end 

Sarebbe un grande aiuto se qualcuno mi potrebbe consigliare su generatori Python Parser esistente e se sarei stato in grado per ottenere il tipo di cosa che sto cercando negli esempi sopra.

risposta

10

PyParsing è uno strumento Python per generare parser. C'è un lot of interesting examples.

facile iniziare:

from pyparsing import Word, alphas 

# define grammar 
greet = Word(alphas) + "," + Word(alphas) + "!" 

# input string 
hello = "Hello, World!" 

# parse input string 
print hello, "->", greet.parseString(hello) 
5

Sembra un lavoro pyparsing per me. E rende anche relativamente facile manipolare l'output.

+0

Grazie per il vostro consiglio. Darò sicuramente un'occhiata a PyParsing. – greenie

1

vi consiglio di controllare Lark: https://github.com/erezsh/lark

E 'in grado di analizzare tutte le grammatiche context-free, costruisce automaticamente un AST (con la linea & numeri di colonna), e accetta la grammatica in formato EBNF, che è semplice da scrivere ed è considerato lo standard.