Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-09-2008, 09:04   #1
.:N3XV5:.
Junior Member
 
L'Avatar di .:N3XV5:.
 
Iscritto dal: Apr 2007
Messaggi: 15
[Java] Creazione di un COMPILATORE in TurboPascal

Ciao ragazzi!
Assieme ad un paio di amici avevamo pensato di realizzare un compilatore per la tesina in linguaggio Java (per la caratteristica multipiattaforma) o TurboPascal (per la nostra conoscenza in merito). Partendo dai molti manuali trovati in rete, voi avete qualche consiglio da darci? Attendo vostre risposte, grazie...
__________________
<A8RMVP Deluxe (24°C)><AMD X2 [email protected] (37°C)><2x 1GB DDR [email protected]><2x ATI X1600XT><Cisco 803 (Digital Diviso!!)>
.:N3XV5:. è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2008, 09:12   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Realizzare un compilatore non è cosa semplice, ma con strumenti come ANTLR diventa tutto molto più semplice.

ANTLR permette di generare parser in diversi linguaggi. Java è supportato, ma Turbo Pascal no, però è supportato Delphi che è il suo successore.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2008, 14:36   #3
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
ANTLR produce parser di tipo LL(k) che non sono il massimo dell'efficienza.
Io ti consiglio Flex/Bison che produce parser di tipo LALR. Genera sorgenti in linguaggio C. Un esempio di compilatore realizzato con Bison è il famoso GCC. Se proprio vuoi utilizzare Java, c'è JFlex/BYACC che ti permette di scegliere tra la generazione di sorgenti in C o in Java.

Questi strumenti ti danno una mano nelle prime due fasi del processo di compilazione: analisi lessicale(Flex, JFlex) e sintattica(Bison, BYACC).
Per le fasi successive, analisi semantica, generazione del codice, etc non esistono, purtroppo, tools automatici. Un corso che ho trovato molto buono è quello della Stanford University.

Ultima modifica di Vincenzo1968 : 29-09-2008 alle 14:39.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2008, 16:23   #4
.:N3XV5:.
Junior Member
 
L'Avatar di .:N3XV5:.
 
Iscritto dal: Apr 2007
Messaggi: 15
Interessante ragazzi, non avevo considerato la cosa... Però l'idea mia, strettamente personale (magari i miei amici preferiscono la vostra strada), era quella di creare questo parser che traducesse istruzioni semplici (+,-,*,/,:=,sqrt,sqr,abs,...) scritte in un codice il più vicino possibile ad uno pseudo-linguaggio di programmazione. A traduzione completata, dopo aver valutato la correttezza lessico/sintattica del file oggetto generato (ed eventualmente corretta), mi piacerebbe avere un sorgente in assembler da compilare, linkare ed eseguire direttamente in DOS... Se non è chiaro, l'obiettivo non è quello di realizzare un linguaggio ultra sofisticato ed evoluto... Già ne esistono... Mi basterebbe il mio compilatore personale da perfezionare nel tempo... Il fine è prettamente didattico... Ergo... Cosa dite?...
__________________
<A8RMVP Deluxe (24°C)><AMD X2 [email protected] (37°C)><2x 1GB DDR [email protected]><2x ATI X1600XT><Cisco 803 (Digital Diviso!!)>
.:N3XV5:. è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2008, 16:35   #5
variabilepippo
Senior Member
 
L'Avatar di variabilepippo
 
Iscritto dal: Mar 2007
Messaggi: 1792
Quote:
Cosa dite?...
Che non ha senso fare tutto a mano, sviluppare un compilatore non è una cosa semplicissima, soprattutto se non si usano gli strumenti consigliati.

Al posto vostro (considerato il target) seguirei l'approccio proposto da cdimauro, così facendo vi risparmiereste tanti grattacapi. Date un'occhiata a ANTLRWorks, vi permette di creare la grammatica in maniera visuale.
variabilepippo è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2008, 20:09   #6
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da .:N3XV5:. Guarda i messaggi
... Il fine è prettamente didattico... Ergo... Cosa dite?...
Non è una cattiva idea realizzare a mano un piccolo compilatore. Serve per familiarizzare con i concetti che stanno alla base(e che i tools automatici nascondono).
Qui trovi un esempio di un piccolo interprete per espressioni aritmetiche. Utilizza un automa a stati finiti di tipo pushdown(tecnica utilizzata da entrambi i tipi di parser, LL(k) e LALR).

P.S.
Prima ti avevo consigliato il corso della Stanford University:

http://www.stanford.edu/class/cs143/

Purtroppo, la versione corrente, non contiene il corso completo. Dovrei avere da qualche parte i pdf scaricati qualche tempo fa. Ti spiega passo passo le varie fasi per la creazione di un compilatore.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 08:49   #7
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Vincenzo, devono realizzare una tesina, non un compilatore HPF.

ANTLR va benissimo e con ANTLRWork "writing compilers was never been so much fun" (vediamo chi azzecca la citazione ).

Poi non è vero che i compilatori LL(k) sono sempre più inefficienti di quelli LR(k) o LALR: dipende da come vengono scritti e dal linguaggio di programmazione di cui implementare il parser. Anzi, i recursive descent parser generati da grammatiche LL(k) si sono sempre distinti per velocità in passato.

Vero è che le vecchie versioni di ANTLR erano molto più lente di YACC/Bison et similia, ma col tempo il codice generato sta migliorando nettamente. In ANTRL 3.1 sono stati introdotti i DFA e dall'analisi del codice prodotto noto enormi miglioramenti rispetto alla 3.0; e t'assicuro che ci sono comunque ottimi margini di miglioramento per il futuro.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 10:29   #8
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da .:N3XV5:. Guarda i messaggi
Assieme ad un paio di amici avevamo pensato di realizzare un compilatore per la tesina
L'idea è bella, anche se forse per una tesina è abbastanza impegnativa.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 15:42   #9
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
...
Anzi, i recursive descent parser generati da grammatiche LL(k) si sono sempre distinti per velocità in passato.
...
I parser a discesa ricorsiva sono(e lo sono sempre stati, anche in passato), tra tutte le tecniche disponibili, quelli meno efficienti perché richiedono il backtracking.

Tratto da Compilers Principles, Tecniques and Tools di Aho, Lam, Sethi, Ullman(2006):
Quote:
LR parsers can be constructed to recognize virtually all programminglanguage
constructs for which context-free grammars can be written. Non-
LR context-free grammars exist, but these can generally be avoided for
typical programming-language constructs.

The LR-parsing method is the most general nonbacktracking shift-reduce
parsing method known, yet it can be implemented as efficiently as other,
more primitive shift-reduce methods (see the bibliographic notes).

An LR parser can detect a syntactic error as soon as it is possible to do
so on a left-to-right scan of the input.

The class of grammars that can be parsed using LR methods is a proper
superset of the class of grammars that can be parsed with predictive or
LL methods. For a grammar to be LR(k), we must be able to recognize
the occurrence of the right side of a production in a right-sentential form,
with k input symbols of lookahead. This requirement is far less stringent
than that for LL(k) grammars where we must be able to recognize the
use of a production seeing only the first k symbols of what its right side
derives. Thus, it should not be surprising that LR grammars can describe
more languages than LL grammars.
Il rovescio della medaglia è che sono più difficili da costruire(per questo sono nati tool come Yacc/Bison e compagnia bella)

Ultima modifica di Vincenzo1968 : 30-09-2008 alle 16:30.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 16:26   #10
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da .:N3XV5:. Guarda i messaggi
Ciao ragazzi!
...
Partendo dai molti manuali trovati in rete, voi avete qualche consiglio da darci? Attendo vostre risposte, grazie...
Puoi postare i link di questi manuali?

Ciao
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 20:55   #12
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
I parser a discesa ricorsiva sono(e lo sono sempre stati, anche in passato), tra tutte le tecniche disponibili, quelli meno efficienti perché richiedono il backtracking.
Dipende anche dalla complessità del linguaggio.

Ricordo che i compilatori Borland di Turbo Pascal & affini erano realizzati usando parser recursive descent (quindi LL(k)) e non hanno avuto rivali quanto a velocità di compilazione.
Quote:
Tratto da Compilers Principles, Tecniques and Tools di Aho, Lam, Sethi, Ullman(2006):
[...]
Il rovescio della medaglia è che sono più difficili da costruire(per questo sono nati tool come Yacc/Bison e compagnia bella)
Certamente, ma un parser LL(k) non solo è molto più facile da realizzare, ma con tool come ANTLR è diventato pure molto più divertente.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 21:21   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Dipende anche dalla complessità del linguaggio.

Ricordo che i compilatori Borland di Turbo Pascal & affini erano realizzati usando parser recursive descent (quindi LL(k)) e non hanno avuto rivali quanto a velocità di compilazione.

Certamente, ma un parser LL(k) non solo è molto più facile da realizzare, ma con tool come ANTLR è diventato pure molto più divertente.
Si, l'importante è questo. Si produce codice inefficiente(e non mi riferisco solo alla velocità di esecuzione), ma divertendosi

Ultima modifica di Vincenzo1968 : 30-09-2008 alle 21:27.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 22:02   #14
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quando l'efficienza diventerà un requisito di cui tener conto, ne riparleremo.

Intanto ANTLR col tempo è come il vino: migliora, anche sotto l'aspetto dell'efficienza.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2008, 16:34   #15
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Quando l'efficienza diventerà un requisito di cui tener conto, ne riparleremo.

Intanto ANTLR col tempo è come il vino: migliora, anche sotto l'aspetto dell'efficienza.
Si si e magari fammi un fischio quando nei libri che trattano l'argomento metteranno, come criterio principale, il divertimento al posto dell'efficienza.

Ho appena scaricato i sorgenti di Python e questo è il commento che si trova alla fine del file parser.c:

Quote:
/*

Description
-----------

The parser's interface is different than usual: the function addtoken()
must be called for each token in the input. This makes it possible to
turn it into an incremental parsing system later. The parsing system
constructs a parse tree as it goes.

A parsing rule is represented as a Deterministic Finite-state Automaton
(DFA). A node in a DFA represents a state of the parser; an arc represents
a transition. Transitions are either labeled with terminal symbols or
with non-terminals. When the parser decides to follow an arc labeled
with a non-terminal, it is invoked recursively with the DFA representing
the parsing rule for that as its initial state; when that DFA accepts,
the parser that invoked it continues. The parse tree constructed by the
recursively called parser is inserted as a child in the current parse tree.

The DFA's can be constructed automatically from a more conventional
language description. An extended LL(1) grammar (ELL(1)) is suitable.
Certain restrictions make the parser's life easier: rules that can produce
the empty string should be outlawed (there are other ways to put loops
or optional parts in the language). To avoid the need to construct
FIRST sets, we can require that all but the last alternative of a rule
(really: arc going out of a DFA's state) must begin with a terminal
symbol.

As an example, consider this grammar:

expr: term (OP term)*
term: CONSTANT | '(' expr ')'

The DFA corresponding to the rule for expr is:

------->.---term-->.------->
^ |
| |
\----OP----/

The parse tree generated for the input a+b is:

(expr: (term: (NAME: a)), (OP: +), (term: (NAME: b)))

*/
Python è un gran bel linguaggio ma non può certo annoverare la velocità di esecuzione tra i suoi punti di forza.
Se avessero scelto, per l'implementazione del parser, la meno facile via delle grammatiche di tipo LALR(1), sarebbe stato meglio, non credi?
E ci sarebbe da chiedersi perchè, tra le facili vie, non abbiano scelto ANTLR. È forse gente che non ama il divertimento?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 08:29   #16
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Si si e magari fammi un fischio quando nei libri che trattano l'argomento metteranno, come criterio principale, il divertimento al posto dell'efficienza.
In tal caso non si capisce perché si "ostinino" a trattare le grammatiche LL: basterebbe parlare esclusivamente di quelle LR, SLR, LALR, ecc., no?

Evidentemente chi lavora in questo campo non è fissato soltanto con l'efficienza...
Quote:
Ho appena scaricato i sorgenti di Python e questo è il commento che si trova alla fine del file parser.c:

Python è un gran bel linguaggio ma non può certo annoverare la velocità di esecuzione tra i suoi punti di forza.
Vero. Trovami UNA sola volta in cui ho affermato il contrario.
Quote:
Se avessero scelto, per l'implementazione del parser, la meno facile via delle grammatiche di tipo LALR(1), sarebbe stato meglio, non credi?
Se l'obiettivo fosse stata la velocità e, in generale, l'efficienza a tutti i costi, la tua domanda sarebbe stata legittima.

Peccato che tu non conosca né la storia di Python né segui la mailing list degli sviluppatori che ci lavorano: sapresti che quella di mantenere il linguaggio LL(k) è una precisa scelta per mantenere semplice la sua implementazione e manutenzione.

Per maggiori informazioni, direttamente dall'interprete Python:
Codice:
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Quote:
E ci sarebbe da chiedersi perchè, tra le facili vie, non abbiano scelto ANTLR. È forse gente che non ama il divertimento?
Forse perché non si possono permettere il lusso di riscrivere l'interprete ogni volta che arriva un nuovo strumento di lavoro?

Immagino che tu, fissato come sei con l'efficienza, passerai il tuo tempo a riscriverti le applicazioni non appena avrai trovato qualche strumento e/o algoritmo che ti permetta di risparmiare mezzo ciclo di clock o byte.

Ti meraviglierà sapere che c'è tanta gente che non bada a queste cose. Perché un buon informatico sa valutare se per un determinato problema l'efficienza è un requisito che bisogna rispettare.

Comunque per la tua gioia ti passo questo http://codespeak.net/pypy/dist/pypy/doc/home.html link: si tratta di un compilatore Python... scritto in Python. Il massimo dell'efficienza, dirai tu. Beh, dai primi risultati sembra che sia mediamente più veloce di CPython (da cui hai tratto quel frammento di codice), che è scritto per una buona parte in C.

Saranno stati dei folli. Eh, sì, l'efficienza... l'efficienza...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 13:55   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
In tal caso non si capisce perché si "ostinino" a trattare le grammatiche LL: basterebbe parlare esclusivamente di quelle LR, SLR, LALR, ecc., no?

Evidentemente chi lavora in questo campo non è fissato soltanto con l'efficienza...

Vero. Trovami UNA sola volta in cui ho affermato il contrario.

Se l'obiettivo fosse stata la velocità e, in generale, l'efficienza a tutti i costi, la tua domanda sarebbe stata legittima.

Peccato che tu non conosca né la storia di Python né segui la mailing list degli sviluppatori che ci lavorano: sapresti che quella di mantenere il linguaggio LL(k) è una precisa scelta per mantenere semplice la sua implementazione e manutenzione.

Per maggiori informazioni, direttamente dall'interprete Python:
Codice:
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!


Forse perché non si possono permettere il lusso di riscrivere l'interprete ogni volta che arriva un nuovo strumento di lavoro?

Immagino che tu, fissato come sei con l'efficienza, passerai il tuo tempo a riscriverti le applicazioni non appena avrai trovato qualche strumento e/o algoritmo che ti permetta di risparmiare mezzo ciclo di clock o byte.

Ti meraviglierà sapere che c'è tanta gente che non bada a queste cose. Perché un buon informatico sa valutare se per un determinato problema l'efficienza è un requisito che bisogna rispettare.

Comunque per la tua gioia ti passo questo http://codespeak.net/pypy/dist/pypy/doc/home.html link: si tratta di un compilatore Python... scritto in Python. Il massimo dell'efficienza, dirai tu. Beh, dai primi risultati sembra che sia mediamente più veloce di CPython (da cui hai tratto quel frammento di codice), che è scritto per una buona parte in C.

Saranno stati dei folli. Eh, sì, l'efficienza... l'efficienza...
CPython, da quanto si legge nel sito, è la versione, almeno fino ad oggi, maggiormente usata:

Quote:
The first implementation, and the one in widest use...
Ecco perchè ho scelto questa versione.
Sarò anche fissato con l'efficienza ma quando si tratta di scegliere un'implementazione che facilita la vita dello sviluppatore e una che avvantaggia invece l'utente finale, preferisco quest'ultima.

No, non mi meraviglia affatto che c'è tanta gente che non bada a queste cose, ma io non sono un buon informatico

P.S.
Fammi capire una cosa: ogni volta che esce una nuova versione di ANTLR bisogna riscrivere tutto il codice?

Ultima modifica di Vincenzo1968 : 02-10-2008 alle 14:00.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 14:35   #18
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Guarda che bell'esempio di algoritmo di parsing, con tanto di backtracking:

tratto dalla documentazione del parser PyPy:

Quote:
Building the Python grammar
The python grammar is built at startup from the pristine CPython grammar file. The grammar framework is first used to build a simple grammar to parse the grammar itself. The builder provided to the parser generates another grammar which is the Python grammar itself. The grammar file should represent an LL(1) grammar. LL(k) should still work since the parser supports backtracking through the use of source and builder contexts (The memento patterns for those who like Design Patterns)

The match function for a sequence is pretty simple:

for each rule in the sequence:
save the source and builder context
if the rule doesn't match:
restore the source and builder context
return false
call the builder method to build the sequence
return true
C'è qualche autore, da Knuth a Ullman e a tutti gli altri, che prediliga il backtracking tra le caratteriche che un buon parser deve avere? Puoi farmi qualche esempio? Hai qualche link da postare?
È forse gente fissata con l'efficienza? (certamente non si può dire che non siano dei buoni informatici)
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 18:07   #19
.:N3XV5:.
Junior Member
 
L'Avatar di .:N3XV5:.
 
Iscritto dal: Apr 2007
Messaggi: 15
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Non è una cattiva idea realizzare a mano un piccolo compilatore. Serve per familiarizzare con i concetti che stanno alla base(e che i tools automatici nascondono).
Esatto, hai centrato in pieno!... Quello è lo scopo, anche perchè in output voglio un bel codice asm.. Usando un qualche algoritmo che si fa già il grosso del lavoro, ma non è stato scritto da me... Vi immaginate che sorgente salterebbe fuori?.. Fosse un linguaggio ad alto livello anche si, le istruzioni inutili anche si vedono... Ma io voglio un bel codice, formattato ed indentato, con tanto di commenti sulle operazioni più comuni... Non è quello che cerco... Preferisco fare una cosa bruttina ed obsoleta, ma di cui conosco ogni ingranaggio, piuttosto che una cosa nuova e fiammante ma a me completamente (od in gran parte) sconosciuta...
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
P.S.
Prima ti avevo consigliato il corso della Stanford University:

http://www.stanford.edu/class/cs143/

Purtroppo, la versione corrente, non contiene il corso completo. Dovrei avere da qualche parte i pdf scaricati qualche tempo fa. Ti spiega passo passo le varie fasi per la creazione di un compilatore.
Grazie, ora parto da questo per cominciare...
__________________
<A8RMVP Deluxe (24°C)><AMD X2 [email protected] (37°C)><2x 1GB DDR [email protected]><2x ATI X1600XT><Cisco 803 (Digital Diviso!!)>
.:N3XV5:. è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 19:35   #20
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12883
Ragazzi in ingegneria non esiste parlare di assoluto, esistono dei compromessi. Poi questi possono essere buoni o meno, ma sempre di compromessi si tratta.

Ci sono algoritmi che vanno bene in un caso e male in un altro, e algoritmi che si comportano "mediamente" (dove per mediamente si intende nel caso medio) meglio rispetto ad altri.

Risparmiare cicli di clock su una funzione che verrà chiamata si e no 1 volta su 1 milione, non apporta benefici al livello macroscopico.

Tant'è che ad esempio all'interno della cpu alcuni circuiti nn sono minimizzati (anche se in quel caso è anche una questione di costi presumo).
WarDuck è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
iPhone 17 al minimo storico: oggi il 256...
Gli utenti italiani scelgono ChatGPT: &e...
Anche Xiaomi avrà il suo trifold:...
È Natale in casa Tesla: arriva la...
Shai-Hulud diventa più cattivo: e...
Aereo ultraleggero si schianta in atterr...
Windows 11 ha una nuova schermata Esegui...
Netflix si prende HBO, Harry Potter e il...
Meta, arriva il nuovo supporto dell'acco...
Spunta blu sotto accusa: perché l...
Motorola presenta edge 70 Cloud Dancer: ...
La Lexus LFA ritorna, ma è elettr...
Cristiano Ronaldo entra nell'intelligenz...
Wi-Fi 7 Mesh in ogni stanza: guida defin...
Hytale evita Steam al lancio per non ric...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v