Sei sulla pagina 1di 4

ESERCIZIO 1

Scrivere un automa che riconosca il seguente linguaggio e, nel caso esso sia
deterministico, l’analizzatore lessicale in codice Java:

L = {(a+b+)ncmbq(a+b+)* | 0<m<n, q>0 }


ESERCIZIO 2

Scrivere un automa riconoscitore per il seguente linguaggio:

L = { pc md qe ( p* | p+)* s+ma pb | c + d + e ≥ a + b, c, b >=0, e, d, a >0}

PDA:

p, Z0 / CZ0
p, C / CC m, D / DD
q, E / EE
p, E / E
m, Z0 / DZ0 q, D / ED p, E / E
q0 q1 q2
m, C / DC q3

s, E / E

s, E / E
s, E / E
q4
p, C / ε
p, D/ ε
p, E/ ε
m, E / ε
q6 q5

p, D / ε m, E / ε
p, E/ ε m, D/ ε
p, C/ ε m, C/ ε

import java.util.Vector;
public class PDALex
{
Vector P;
private final static int Q0=0, Q1=1, Q2=2,………Q6=6;
private int currentStatus;
private String Z0=”Z0”, D=”D”, E=”E”, C=”C”;

public PDALex()
{
currentStatus = Q0;
P=new Vector();
P.add(Z0);
}//costruttore

public boolean isMember(String token)


{
boolean error=false;
int i=0;

while(i < token.length() && error==false)


{
error=handler ( token.charAt(i), (String) P.lastElement() );
i++;
}
If (i== token.length() && error==false && isFinalStatus()==true)
return true;
else return false;
}//isMember

public boolean handler(Char x, String symb)


{
boolean error=true;

switch(currentStatus)
{

case Q0: if (x == 'p' && symb.equals(Z0))


{
P.add(C);
become(Q0);
}
else
if(x == 'm' && symb.equals(Z0) || x == 'm' && symb.equals(C))
{
become(Q1);
P.add(D);
}
else error=true;
break;

case Q1: if(x == 'm' && symb.equals(D) )


become(Q1);
else
if(x == 'q' && symb.equals(D))
{
become(Q2);
P.add(E);
}
else error=true;
break;
//e così via per tutti gli stati del PDA
case Q6: if(x == 'p' && symb.equals(D) ||
x == 'p' && symb.equals(E) ||
x==’p’ && symb.equals(C))
{
become(Q6);
P.remove(P.size()-1);
}
else error = true;

break;

}// switch

return error;
} //handler

} // class PDALex

Potrebbero piacerti anche