• Non ci sono risultati.

Appendice B : Definizione Lexer Jflex

N/A
N/A
Protected

Academic year: 2021

Condividi "Appendice B : Definizione Lexer Jflex"

Copied!
4
0
0

Testo completo

(1)

94

Appendice B : Definizione Lexer Jflex

import java_cup.runtime.*; %% %class prova %unicode %cup %line %column %{

StringBuffer string = new StringBuffer();

private Symbol symbol(int type) {

return new Symbol(type, yyline, yycolumn); }

private Symbol symbol(int type, Object value) {

return new Symbol(type, yyline, yycolumn, value); } %} Terminatori = \r|\n|\r\n InputC = [^\r\n] Spazio = {Terminatori} | [ \t\f]* /*Commenti*/

Commenti = {Tradizionali} | {FineLinea} | {Documentazione} Tradizionali = "/*" [^*] ~"*/" | "/*" "*"+ "/"

FineLinea = "//" {InputC}* {Terminatori} Documentazione = "/**" {Contenuti} "*"+ "/"

(2)

95

Contenuti = ( [^*] | \*+ [^/*] )*

Identificatori = [a-zA-Z] [a-zA-Z0-9]*

Digits = [0-9]+ Char = '.' bool = true|false InteriDec = 0 | [1-9][0-9]* Razionali = {Digits}"."{Digits} %state TKSTRING %% <YYINITIAL> { /*Booleani*/

{bool} { return symbol(sym.TKBOOL, new Boolean(yytext())); }

/*Interi decimali*/

{InteriDec} { return symbol(sym.TKINT, new Integer(yytext())); }

/*Stringhe*/

\" { string.setLength(0); yybegin(TKSTRING); }

/*Singoli caratteri*/

{Char} { return symbol(sym.TKCHAR,new Character(yycharat(1))); }

/*Razionali*/

{Razionali} { return symbol(sym.TKREAL,

(3)

96 /*Simboli*/ ":=" { return symbol(sym.UPDATE); } "[" { return symbol(sym.LBRACK); } "]" { return symbol(sym.RBRACK); } "(" { return symbol(sym.LPAREN); } ")" { return symbol(sym.RPAREN); } "." { return symbol(sym.DOT); } "," { return symbol(sym.COMMA); } "=" { return symbol(sym.EQ); } "^" { return symbol(sym.EXT); } "let" { return symbol(sym.LET); } "in" { return symbol(sym.IN); } ":" { return symbol(sym.COLON); } "->" { return symbol(sym.ARROW); } ";" { return symbol(sym.SEMI); }

"INT" { return symbol(sym.INT); } "REAL" { return symbol(sym.REAL); } "STRING" { return symbol(sym.STRING); } "CHAR" { return symbol(sym.CHAR); } "BOOL" { return symbol(sym.BOOL); } "Type" { return symbol(sym.Type); } "epyT" { return symbol(sym.epyT); }

/*Identificatori*/

{Identificatori} { return symbol(sym.IDE, new String(yytext())); }

/*Commenti*/ {Commenti} { /* ignore */ } /*Spazio*/ {Spazio} { /* ignore */ } } <TKSTRING> {

(4)

97 \" { yybegin(YYINITIAL); return symbol(sym.TKSTRING, string.toString()); } [^\n\r\"\\]+ { string.append( yytext() ); } \\t { string.append( '\t' ); } \\n { string.append( '\n' ); } \\r { string.append( '\r' ); } \\\" { string.append( '\"' ); } \\ { string.append( '\\' ); } } /* Errore */ .|\n {

throw new RuntimeException("Carattere illegale \"" +yytext()+ "\" at line "+yyline+", column "+yycolumn); }

/*Fine file*/

Riferimenti

Documenti correlati

% programma per il calcolo del gradiente di luminosità all’interno della % zona di trattamento della cella a gradiente;. close all clear all

Una volta creata la funzione obiettivo, essa deve essere richiamata nel file principale; per fare questo si scrive nella prima posizione all’interno della parentesi tonda del comando

In questa maniera, ad esempio per un sistema costituito da una vite in grado di traslare e da una madrevite in grado di ruotare, il sistema di cunei equivalenti si riduce a

all;

Coordinate atomiche frazionarie per i cinque raffinamenti strutturali eseguiti.. Coordinate atomiche frazionarie per i cinque raffinamenti

Infatti, salvo limitare le oscillazioni di campo ad un range molto ridotto in prossimità dello zero, si osserverebbe la presenza di un significativo comportamento isteretico del

90; esso % costituisce un adattamento del metodo delle DIREZIONI % CONIUGATE, modificando la direzione di ricerca al nuovo % passo iterativo con una matrice che approssimi l'inversa

Anche in questo caso la sola presenza della spray bar genera una componente della velocità lungo l’asse z nel piano