Portale Programmazione
C/C++, C#, JAVA, Python, Php…di Antonio Tancredi
C/C++, C#, JAVA, Python, Php…di Antonio Tancredi
5 gen
Lo Shunting-yard algorithm è un algoritmo per effettuare il parsing di una espressione matematica in notazione infissa e generare un’espressione in notazione postfissa (Reverse Polish notation).
L’algoritmo fa uso di uno stack per i risultati intermedi e di una coda di output.
In questo articolo, l’espressione matematica verrà tokenizzata con l’ausilio di ANTLR. Genereremo un lexer che ci permetterà di iterare sui token della stringa e di applicare l’algoritmo.
31 dic
Dato un linguaggio $latex L$ generato da una grammatica context free $latex G$, il linguaggio $latex L\setminus\{\epsilon\}$ è un linguaggio CF generato da una grammatica $latex G’$ senza simboli inutili e senza ε-produzioni.
Possiamo di conseguenza eliminare le ε-produzioni da una grammatica e ottenere una grammatica che genera lo stesso linguaggio (ammettendo $latex S \rightarrow \epsilon$ se $latex \epsilon \in L$).
1 dic
Mootools consente, attraverso la classe Chain, di poter aggiungere delle funzioni ad un oggetto, da eseguire in sequenza. I metodi esposti sono:
myClass.chain(fn[, fn2[, fn3[, ...]]]); myClass.callChain([any arguments]); myClass.clearChain();
rispettivamente per aggiungere una o più funzioni, per richiamare la prossima funzione nella catena e per pulire la catena.
21 ott
Mootools consente di creare funzioni eseguibili dopo un periodo di tempo specificato.
Nell’esempio qui di seguito, dopo un secondo dal caricamento della pagina verrà avviata una funzione che mostrerà un paragrafo nascosto:
<html> <head> <style> .invisible { display: none; } .visible { display: inline; } </style> <script src="mootools-core-latest.js"></script> <script> var func = function() { var id = arguments[0] var attr = arguments[1]; var val = arguments[2]; $(id).set(attr, val); } func.delay(1000, null, ["Text", "class", "visible"]); </script> </head> <body> <p id="Text" class="invisible"> Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br/> Morbi metus quam, hendrerit at adipiscing quis, lacinia quis lectus.<br/> Etiam in urna ac odio dapibus vulputate sed eget orci. <br/> Pellentesque eget mollis libero. <br/> Pellentesque nec tortor pharetra est volutpat sagittis.<br/> Vivamus nunc nisl, viverra sed facilisis eu, fringilla id enim<br/> </p> </body> </html>
12 set
La validazione di un form può avvenire in maniera molto semplice utilizzando il plugin Validation di JQuery.
In questo articolo verrà mostrato un semplice esempio di validazione.
I campi saranno tutti richiesti e, inoltre, l’URL dovrà essere valido per poter essere accettato:
<html> <head> <style> body { text-align:center; margin:0 auto; } .content { width: 500px; margin-left: auto; margin-right: auto; text-align: center; align: center; } .content table { margin-left: auto; margin-right: auto; align: center; } td { padding: 15 20 5 50; } tr.submitButton td { padding-bottom: 50px; padding-top: 50px; text-align: center } p.title { font-family:"Adobe Caslon Pro", "Hoefler Text",Georgia,Garamond,Times,serif; font-size:18pt; font-variant:small-caps; letter-spacing:0.2em; text-align:center; } div.jqError { height: 50px; color: red; font-style: oblique; font-family: serif; font-weight: bolder; } img.errGif { padding-right: 20px; } input.error { border: 2px solid red; background-color: #FFFF53; } </style> </head> <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script> <script src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script> <script type="text/javascript"> // sovrascriviamo i messaggi standard $.validator.messages.required = ""; $.validator.messages.url = ""; var formName = "#AnagForm"; $(document).ready(function() { $(formName).validate({ rules: { Name: { required: true }, Lastname: { required: true }, Site: {required: true, url: true}, Username: {required: true} }, invalidHandler: function(e, v) { var errs = v.numberOfInvalids(); if(errs) { var str = errs>1 ? ("Ci sono " + errs + " errori") : ("C'è un errore"); $("div[class=jqError]").html( "<img class=\"errGif\" src=\"error.gif\"/>" + str); } } }); }); </script> <body> <form id="AnagForm" action="http://antoniotancredi.altervista.org"> <div class="content"> <p class="title">REGISTRAZIONE</p> <div class="jqError"></div> <table> <tr> <td><label for="Name">Nome: </label></td> <td><input type="text" name="Name"/></td> </tr> <tr> <td><label for="Lastname">Cognome: </label></td> <td><input type="text" name="Lastname"/></td> </tr> <tr> <td><label for="Site">Sito Web: </label></td> <td><input type="text" name="Site"/></td> </tr> <tr> <td><label for="Username">Username: </label></td> <td><input type="text" name="Username"/></td> </tr> <tr class="submitButton"> <td colspan="2"><input type="submit" value="Conferma"/></td> </tr> </table> </div> </form> </body> </html>
11 set
La direttiva page delle pagine JSP possiede un attributo, errorPage, che permette di specificare una pagina di errore da mostrare in caso avvenga un’eccezione non gestita.
La pagina di errore può settare a true l’attributo isErrorPage, in modo da ottenere l’oggetto implicito exception e ricavare la fonte dell’eccezione.
4 set
I generics in Java, introdotti a partire dalla versione 1.5, consentono di definire un’astrazione sul tipo di oggetto da utilizzare in una classe, similmente a quanto avviene utilizzando i template in C++.
Per creare una classe generica, scriviamo qualcosa simile alla seguente porzione di codice:
public class GenericsTest { public static class Pair<S, T> { public S first; public T second; public Pair(S first, T second) { this.first = first; this.second = second; } } public static void main(String[] args) { Pair<String, Integer> pair = new Pair<String, Integer>("Antonio", 22); System.out.println(pair.first + ", " + pair.second); } }
8 lug
In Java, ogni tabella utilizza un modello per gestire i dati rappresentati.
Il modello in questione deve implementare i metodi definiti nell’interfaccia javax.swing.table.TableModel. Qualora non venisse specificato un modello, la classe JTable crea un’istanza di javax.swing.table.DefaultTableModel
4 lug
La classe javax.swing.JFileChooser consente un semplice ed immediato meccanismo per selezionare file e directory.
Il più semplice modo per istanziare questa classe è usare il costruttore:
JFileChooser(String currentDirectoryPath)
specificando il percorso di una directory, che verrà mostrata quando verrà aperto il file chooser.
Per indicare il tipo di file che deve essere scelto (file, directory o entrambi), utilizziamo il metodo
public void setFileSelectionMode(int mode)
dove mode è un dei seguenti valori:
Se invece vogliamo abilitare/disabilitare la selezione multipla, utilizziamo il metodo:
public void setMultiSelectionEnabled(boolean b)
27 giu
La definizione di una classe in Javascript avviene utilizzando una funzione come template.
Le classi possono contenere sia proprietà che metodi.
Le proprietà vengono specificate utilizzando la parola chiave this.
I metodi possono essere aggiunto all’oggetto prototype della Function (o si può assegnare ad una proprietà una funzione).
Consideriamo ad esempio l’oggetto Person:
function Person(firstname, lastname) { this.firstname = firstname; this.lastname = lastname; } Person.prototype.formattedName = function() { return this.firstname + " " + this.lastname; };
Tale classe contiene le proprietà firstname e lastname, più il metodo formattedName, aggiunto nel prototipo della function (Prototype-based programming)