/**
 * 
 */
package Parser;

import java.util.LinkedHashMap;
import java.util.Scanner;
import DataStructures.*;

/**
 * @author Giorgio Ravera
 *
 */
public class Parser 
{
	private Scanner read = new Scanner(System.in);
	private LinkedHashMap<String, Symbol> dictionary = new LinkedHashMap<String,Symbol>();
	
	/**
	 * Costruttore: inizializza il dizionario
	 *
	 */
	public Parser()
	{
		dictionary.put("budino", new Word("budino"));
		dictionary.put("budino", new Numero("42"));
	}
	
	/**
	 * Funzione che da il via all'analisi sintattica.<br />Questa viene effettuata una parola alla volta.
	 */
	public void start()
	{
		while(read.hasNext())
		{
			String s = read.next();
			System.out.println(s);
			Symbol sy = dictionary.get(s);
			if(sy!=null)
			{
				System.out.println("Trovato " + sy.getType() + " " + (sy.getClass()).toString());
				// C' quindi so cosa sia.
				// Lo aggiungo alla lista di elaborazione. (DA FARE)
			}
			else
			{
				System.out.println("NON Trovato");
				sy=castNumber(s);
				if(sy==null)
					sy=find(s);//Cerca su google?
				System.out.println("Trovato " + sy.getType() + " " + (sy.getClass()).toString());
			}
		}
	}
	
	/*
	 * Verifica se la cifra inserita  un numero
	 */
	private Symbol castNumber(String s)
	{
		try
		{
			float n = Float.parseFloat(s);
		}
		catch(NumberFormatException nfe)
		return new Numero(n);
	}
	
	/*
	 * Cerca su google o similari che cosa sia il simbolo appena rilevato che non appartiene al proprio dizionario.
	 */
	private Symbol find(String s)
	{
		//cerca su google e ottiene un id;
		int id=6;
		Symbol simbolo = null;
		switch(id)
		{
			case 1:
			{
				simbolo = new Word(s);
				break;
			}
			case 6:
			{
				simbolo = new Numero(s);
				break;
			}

		}
		
		dictionary.put(s, simbolo);
		return simbolo;
	}
}