Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Progettare e implementare un DFA con alfabeto {/, * , a} che riconosca il linguag-
- gio di “commenti” delimitati da /* (all’inizio) e *\/ (alla fine): cioè l’automa deve accettare le
- stringhe che contengono almeno 4 caratteri che iniziano con /* , che finiscono con *\/, e che con-
- tengono una sola occorrenza della sequenza *\/, quella finale (dove l’asterisco della sequenza *\/
- non deve essere in comune con quello della sequenza /* all’inizio, ). Quindi l’automa deve ac-
- cettare le stringhe “\/****\/”, “\/*a*a*\/”, “\/*a\/**\/”, “\/**a\/\/\/a\/a**\/”, “\/**\/” e “\/*\/*\/”
- ma non “\/*\/”, oppure “\/**\/***\/”.
- ----------------------------------------------------------------------------*/
- public class Esercizio1_10 {
- public static boolean scan(String s) {
- int state = 0, i = 0;
- while(state>=0 && i<s.length()){
- final char c=s.charAt(i++);
- switch(state){
- case 0:
- if(c=='/'){
- state = 1;
- }else{
- state=-1;
- }
- break;
- case 1:
- if(c=='*'){
- state=2;
- }else{
- state= -1;
- }
- break;
- case 2:
- if(c=='*'){
- state=3;
- }else if(c=='a' || c=='/'){
- state = 2;
- }else{
- state = -1;
- }
- break;
- case 3:
- if(c=='/'){
- state=4; //finale
- }else if(c=='*'){
- state=3;
- }else if(c=='a'){
- state=2;
- }else{
- state = -1;
- }
- break;
- case 4:
- state=-1;
- break;
- }
- }
- return (state==4);
- }
- public static void main(String [] args){
- System.out.println(scan(args[0])? "La stringa è accettata" : "La stringa non è accettata");
- //System.out.println(args[0]);
- }
- ///**/ è un carattere speciale che rimanda alle applicazioni quindi va inserita fra \ o fra " "
- //es \/\*aa\*\/ = /*aa*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement