[Python] Pseudo parser in via di sviluppo
2 partecipanti
:: Programmazione :: Pascal, Python
Pagina 1 di 1
[Python] Pseudo parser in via di sviluppo
Ecco il source del mio pseudo parser:
Questo semplice e piccolo programma non fa altro che prendere in input il il source di un vostro programma, lo parsa, ne evidenzia la sintassi e lo memorizza in un file con estensione ".html" e apre il file con il browser di default. (Per cambiare la sintassi, e quindi per parsare diversi linguaggi, basta modificare la variabile "a"). ricordo che questa è una versione ancora in vio di sviluppo, infatti devo riscrivere la funzione replace() e devo aggiungere alcune funzioni utili a migliorare l' intero programma.
- Codice:
import webbrowser
from string import replace
def bubblelol(array):
for i in xrange(len(array)):
for j in xrange(len(array)):
try:
if len(array[j]) < len(array[j + 1]):
temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp
except: pass
return array
def trolla(string,simbol1, simbol2, cont1 = 0, cont2 = 0, a = []):
if simbol2 != "":
for i in xrange(len(string)):
if ((string[i] == simbol1) and (cont2 == 0)): cont1 = i; cont2 = 1
elif ((cont2 == 1) and (string[i] == simbol2)): a.append(string[ cont1 : i +1 ]); cont2 =0
else: pass
else:
for i in xrange(len(string)):
if ((string[i] == simbol1) and (cont2 == 0)): cont1 = i; cont2 = 1
elif ((cont2 == 1) and (string[i] == simbol1)): a.append(string[ cont1 : i +1 ]); cont2 = 0
else: pass
return a
def parser(stringa, parola, colore, lol = "", cont = 0):
for i in parola:
if cont == 0: lol = replace(stringa, i, "<font color=" + colore + ">" + i + "</font>"); cont = 1
else: lol = replace(lol, i, "<font color=" + colore + ">" + i + "</font>")
return lol
a = ["elif ","if ","while","for ","else","def ","pass","break","try","except","#!/usr/bin/env python","int(","ord(","print ","raw_input","from ","import ","input","in "]
def finalparser(stringa, parole, colore, colore2, cont = 0, se = ""):
for i in trolla(stringa, "\"" , "\""):
if cont == 0: se = replace(stringa, i, "<font color=" + colore2 + ">" + i + "</font>"); cont = 1
else: se = replace(se, i, "<font color=" + colore2 + ">" + i + "</font>")
return parser(replace(replace(se, "\n", "<br>"), " "," "), bubblelol(parole), colore)
e = open(raw_input("Inserire il percorso del file da prendere in input: "), "r")
w = e.read()
e.close()
aia = raw_input("Inserire il percorso del file di output: ")
aa = open(aia, "w")
lol = finalparser(w, a, "red", "orange")
aa.write(lol)
aa.close()
webbrowser.open(aia)
Questo semplice e piccolo programma non fa altro che prendere in input il il source di un vostro programma, lo parsa, ne evidenzia la sintassi e lo memorizza in un file con estensione ".html" e apre il file con il browser di default. (Per cambiare la sintassi, e quindi per parsare diversi linguaggi, basta modificare la variabile "a"). ricordo che questa è una versione ancora in vio di sviluppo, infatti devo riscrivere la funzione replace() e devo aggiungere alcune funzioni utili a migliorare l' intero programma.
TTDH- Moderatore
- Messaggi : 14
Data d'iscrizione : 11.11.09
Re: [Python] Pseudo parser in via di sviluppo
Scusa per l'ignoranza, ma cosa significa "parsare"?
Inoltre non ho capito molto bene lo scopo del programma...
Inoltre non ho capito molto bene lo scopo del programma...
Re: [Python] Pseudo parser in via di sviluppo
Ti rimando a wikipedia per la definizione di [Parsin].
Mentre per quanto riguarda il programma, ha lo scopo di analizzare e evidenziare la sintassi di un source.
Esempio:
Mentre per quanto riguarda il programma, ha lo scopo di analizzare e evidenziare la sintassi di un source.
Esempio:
- Spoiler:
TTDH- Moderatore
- Messaggi : 14
Data d'iscrizione : 11.11.09
Re: [Python] Pseudo parser in via di sviluppo
Ho capito. Grazie TTDH e complimenti per le tue abilità coi linguaggi di programmazione
p.s. Ti ho messo l'immagine di esempio sotto spoiler in quanto era bella grande. Spero che non ci sia nessun problema...
p.s. Ti ho messo l'immagine di esempio sotto spoiler in quanto era bella grande. Spero che non ci sia nessun problema...
Re: [Python] Pseudo parser in via di sviluppo
No no nessun problema.
- Codice:
import webbrowser
def find(frase, parola, int, lol = ""):
for i in range(len(frase) - len(parola) + 1):
if frase[i: i + len(parola)] == parola: lol += str(i) + "/" + str( i + len(parola)) + "/"
if ((lol != "") and (int == 1) or (int == "1")): return "true posizione: %1s" % (lol)
else: return lol
def onesplit(frase, separatore, a = [], c = 0):
for i in range(len(frase)):
if str(frase[i]) == str(separatore):
a.append(frase[c : i])
c = i + 1
if frase[len(frase) - 1] != separatore: a.append(frase[c : len(frase)])
return a
def split(stringa, separatore):
lulz, c, lol, contatore = [], 0, find(stringa,separatore,3), 0
for i in onesplit(lol, "/"):
if contatore % 2 == 0:
lulz.append(stringa[c : int(i)])
contatore += 1
else: c, contatore = int(i), contatore + 1
if stringa[- len(separatore) : len(stringa)] != separatore: lulz.append(stringa[c : len(stringa)])
return lulz
def replace(stringa, old, new, a = ""):
for i in stringa.split(old): a += i + new
if stringa[- len(old) : len(stringa)] != old: return a[: - len(new)]
else: return a
def bubblelol(array):
for i in xrange(len(array)):
for j in xrange(len(array)):
try:
if len(array[j]) < len(array[j + 1]):
temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp
except: pass
return array
def trolla(stringa, simbol1, simbol2, lol = "", d = 0, a = []):
if simbol2 != "":
for i in range(len(stringa)):
try:
if ((stringa[i : i + len(simbol1)] == simbol1) and (d == 0)): c = i + len(simbol1); d = 1
elif ((stringa[i : i +len(simbol2)] == simbol2) and (d !=0)): a.append(simbol1 + stringa[c : i] + simbol2); d =0
except: pass
else:
for i in range(len(stringa)):
try:
if ((stringa[i : i + len(simbol1)] == simbol1) and (d == 0)): c = i + len(simbol1); d = 1
elif ((stringa[i : i +len(simbol1)] == simbol1) and (d !=0)): a.append(simbol1 + stringa[c : i] + simbol1); d =0
except: pass
return a
def parser(stringa, parola, colore, lol = "", cont = 0):
for i in parola:
if cont == 0: lol = replace(stringa, i, "<font color=" + colore + ">" + i + "</font>"); cont = 1
else: lol = replace(lol, i, "<font color=" + colore + ">" + i + "</font>")
return lol
a = ["elif ","if ","while","for ","else","def ","pass","break","try","except","#!/usr/bin/env python","print ","raw_input","from ","import ","input","in ","return "]
b = [chr(34)+",""","','"]
def finalparser(stringa, sintassi, sintassip, colore, colore2, cont = 0, se = ""):
for j in sintassip:
for i in trolla(stringa, split(j,",")[0] ,split(j,",")[1]):
if cont == 0: se = replace(stringa, i, "<font color=" + colore2 + ">" + i + "</font>"); cont = 1
else: se = replace(se, i, "<font color=" + colore2 + ">" + i + "</font>")
return parser(replace(replace(se, "\n", "<br>"), " "," "), bubblelol(sintassi), colore)
e = open("Inserire il percorso del file di input: ", "r")
w = e.read()
e.close()
see = raw_input("Inserire il percorso del file di output: ")
aa = open(see, "w")
lol = finalparser(w, a, b, raw_input("Inserire il colore 1: "), raw_input("Inserire il colore2: "))
aa.write(lol)
aa.close()
webbrowser.open(see)
TTDH- Moderatore
- Messaggi : 14
Data d'iscrizione : 11.11.09
Argomenti simili
» [Python] Ordinamento
» [Python] pyToilet
» [Python] File manager
» [GUIDA] Imparare a programmare con Python
» [Python] pyToilet
» [Python] File manager
» [GUIDA] Imparare a programmare con Python
:: Programmazione :: Pascal, Python
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.