Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.30 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3. using System.Text.RegularExpressions;
  4.  
  5. public class AnalizaZapytania : MonoBehaviour{
  6.     Zapytanie zapytanie;
  7.     Slownik slownik;
  8.  
  9.     string [] substrings;
  10.     char [] tokeny;
  11.     char delimiter = ' ';
  12.  
  13.     public AnalizaZapytania (){
  14.     }
  15.  
  16.     public void dodajZapytanie(Zapytanie doDodania){
  17.         zapytanie = doDodania;
  18.         substrings = zapytanie.getTekstZapytania ().ToLower().Split (delimiter);
  19.         tokeny = new char[10];
  20.     }
  21.  
  22.     public void dodajSlownik(Slownik doDodania){
  23.         slownik = doDodania;
  24.     }
  25.        
  26.     public void znajdzTokeny(){
  27.         int index = 0;
  28.         foreach (string substring in substrings) {
  29.            
  30.             //znajdowanie czasownika podnoszenia
  31.             for (int i = 0; i < slownik.czas_pod.Length; i++) {
  32.                 if (substring.Contains (slownik.czas_pod [i])) {
  33.                     zapytanie.czasownik_podB = true;
  34.                     zapytanie.czasownik_pod = index;
  35.                     tokeny [index] = 'c';
  36.                     zapytanie.liczba_czasownikow++;
  37.                 }
  38.             }
  39.  
  40.             //znajdowanie czasownika opuszczania
  41.             for (int i = 0; i < slownik.czas_opu.Length; i++) {
  42.                 if (substring.Contains (slownik.czas_opu[i])) {
  43.                     zapytanie.czasownik_opuB = true;
  44.                     zapytanie.czasownik_opu = index;
  45.                     tokeny [index] = 'c';
  46.                     zapytanie.liczba_czasownikow++;
  47.                 }
  48.             }
  49.  
  50.             //znajdowanie czasownika przesunięcia
  51.             for (int i = 0; i < slownik.czas_przesun.Length; i++) {
  52.                 if (substring.Contains (slownik.czas_przesun[i])) {
  53.                     zapytanie.czas_przesunB = true;
  54.                     zapytanie.czas_przesun = index;
  55.                     tokeny [index] = 'c';
  56.                     zapytanie.liczba_czasownikow++;
  57.                 }
  58.             }
  59.  
  60.  
  61.             //znajdowanie rodzajów
  62.             for (int i = 0; i < slownik.rodzaje.Length; i++) {
  63.                 if (substring.Contains (slownik.rodzaje [i])) {
  64.                     zapytanie.obiekty_rodzaj.Add (index);
  65.                     tokeny [index] = 'r';
  66.                 }
  67.             }
  68.  
  69.             //znajdowanie kolorów
  70.             for (int i = 0; i < slownik.kolory.Length; i++) {
  71.                 if (substring.Contains (slownik.kolory [i])) {
  72.                     zapytanie.obiekty_kolor.Add (index);
  73.                     tokeny [index] = 'k';
  74.                 }
  75.             }
  76.  
  77.             //znajdowanie liczby
  78.             if (Regex.IsMatch (substring, @"^\d+$")) {
  79.                 float.TryParse (substring, out zapytanie.liczba);
  80.                 tokeny [index] = 'l';
  81.             }
  82.  
  83.             //znajdowanie sektora
  84.             if (Regex.IsMatch (substring, @"^[a-h]{1}[0-9]{1}$")) {
  85.                 zapytanie.sektory.Add (index);
  86.                 Debug.Log ("sektor " + substrings [index]);
  87.             }
  88.  
  89.             //znajdowanie słów obrotu
  90.             for (int i = 0; i < slownik.czas_obrotu.Length; i++) {
  91.                 if (substring.Contains (slownik.czas_obrotu[i])) {
  92.                     zapytanie.obrocB = true;
  93.                     zapytanie.obroc = index;
  94.                     tokeny [index] = 'c';
  95.                     zapytanie.liczba_czasownikow++;
  96.                 }
  97.             }
  98.  
  99.             //znajdowanie słów kierunku
  100.             for (int i = 0; i < slownik.kierunki.Length; i++) {
  101.                 if (substring.Contains (slownik.kierunki[i])) {
  102.                     zapytanie.kierunekB = true;
  103.                     zapytanie.kierunek = index;
  104.                     tokeny [index] = 'j';
  105.                 }
  106.             }
  107.  
  108.             //znajdowanie zaimków
  109.             for (int i = 0; i < slownik.zaimki.Length; i++) {
  110.                 if (substring.Contains (slownik.zaimki[i])) {
  111.                     zapytanie.zaimki.Add (index);
  112.                     tokeny [index] = 'z';
  113.                 }
  114.             }
  115.  
  116.             //znajdowanie sektorów
  117.             for (int i = 0; i < slownik.sektor.Length; i++) {
  118.                 if (substring.Contains (slownik.sektor[i])) {
  119.                     zapytanie.sektory.Add (index);
  120.                 }
  121.             }
  122.  
  123.             //znajdowanie jednostek
  124.             for (int i = 0; i < slownik.jednostki.Length; i++) {
  125.                 if (substring.Contains (slownik.jednostki[i])) {
  126.                     zapytanie.jednostkiB = true;
  127.                     zapytanie.jednostki = index;
  128.                 }
  129.             }
  130.  
  131.  
  132.             index++;
  133.         }
  134.     }
  135.  
  136.     public void CKYstart(){
  137.         CKY parserCYK = new CKY ();
  138.         parserCYK.Parsowanie (tokeny);
  139.     }
  140.  
  141.     public void znajdzPolecenie(){
  142.         zapytanie.trzymaB = CraneManager.Instance.checkJoint ();
  143.         zapytanie.trzymaB = true;
  144.  
  145.         //Debug.Log(zapytanie.zaimki [0]);
  146.  
  147.         // dźwig nic nie trzyma
  148.  
  149.         if (zapytanie.liczba_czasownikow == 1 && zapytanie.obiekty_rodzaj.Count<=1 && zapytanie.sektory.Count<1  && !zapytanie.trzymaB) {
  150.            
  151.             if (zapytanie.obrocB && zapytanie.jednostkiB && zapytanie.liczba != 0) {
  152.                 if (substrings [zapytanie.kierunek].Contains ("lew")) {
  153.                     zapytanie.liczba = zapytanie.liczba * -1f;
  154.                 }
  155.                 float kat = zapytanie.liczba;
  156.                 StartCoroutine (CraneManager.Instance.rotation (kat));
  157.             }
  158.             if (zapytanie.czasownik_opuB && zapytanie.liczba != 0 && zapytanie.jednostkiB && zapytanie.obiekty_rodzaj.Count == 0) {
  159.                 Debug.Log ("Opuszczam hak na wysokość " + zapytanie.liczba + " " + substrings [zapytanie.jednostki]);
  160.                 // wysokość(liczba);
  161.             }
  162.  
  163.             if (zapytanie.czasownik_podB && zapytanie.liczba != 0 && zapytanie.jednostkiB && zapytanie.obiekty_rodzaj.Count == 0) {
  164.                 Debug.Log ("Podnoszę hak na wysokość " + zapytanie.liczba + " " + substrings [zapytanie.jednostki]);
  165.                 // wysokość(liczba);
  166.             }
  167.             if (zapytanie.czasownik_podB && zapytanie.liczba != 0 && zapytanie.jednostkiB && zapytanie.obiekty_rodzaj.Count == 1) {
  168.                 Debug.Log ("Podnoszę przedmiot o " + zapytanie.liczba + " " + substrings [zapytanie.jednostki]);
  169.                 // podnieś(rodzaj, liczba);
  170.             }
  171.  
  172.             if (zapytanie.czasownik_opuB && zapytanie.liczba != 0 && zapytanie.jednostkiB && zapytanie.obiekty_rodzaj.Count > 0) {
  173.                 Debug.Log ("Nie trzymam żadnego obiektu");
  174.             }
  175.             if (zapytanie.czasownik_podB && zapytanie.obiekty_rodzaj.Count == 1) {
  176.                 Debug.Log ("Podnoszę " + substrings[zapytanie.obiekty_rodzaj[0]]);
  177.                 //podnieś(rodzaj);
  178.             }
  179.             if (zapytanie.czasownik_opuB && zapytanie.obiekty_rodzaj.Count == 1) {
  180.                 Debug.Log ("Nie trzyma obiektu " + substrings[zapytanie.obiekty_rodzaj[0]]);
  181.             }
  182.  
  183.             /* to już Mikołaju poprawiłeś
  184.             if (zapytanie.czas_przesunB && zapytanie.liczba != 0 && zapytanie.jednostkiB) {
  185.                 float distance = zapytanie.liczba;
  186.                 if (zapytanie.kierunekB) {
  187.                     if (substrings [zapytanie.kierunek].Contains ("tył")) {
  188.                         distance *= -1;
  189.                         Debug.Log ("Przesuwam hak o " + zapytanie.liczba + " " + substrings [zapytanie.jednostki] + " w tył");
  190.                     } else
  191.                         Debug.Log ("Przesuwam hak o " + zapytanie.liczba + " " + substrings [zapytanie.jednostki] + " w przód");
  192.                 }
  193.             }
  194.             */
  195.  
  196.         }
  197.  
  198.  
  199.         // dźwig coś trzyma
  200.    
  201.         if (zapytanie.liczba_czasownikow == 1 && zapytanie.obiekty_rodzaj.Count<=1 && zapytanie.sektory.Count<1  && zapytanie.trzymaB) {
  202.  
  203.             if (zapytanie.obrocB && zapytanie.jednostkiB && zapytanie.liczba != 0) {
  204.                 if (substrings [zapytanie.kierunek].Contains ("lew")) {
  205.                     zapytanie.liczba = zapytanie.liczba * -1f;
  206.                 }
  207.                 float kat = zapytanie.liczba;
  208.                 StartCoroutine (CraneManager.Instance.rotation (kat));
  209.             }
  210.             if (zapytanie.czasownik_opuB && zapytanie.liczba != 0 && zapytanie.jednostkiB && zapytanie.obiekty_rodzaj.Count == 0) {
  211.                 Debug.Log ("Opuszczam hak na wysokość " + zapytanie.liczba + " " + substrings [zapytanie.jednostki]);
  212.                 // wysokość(liczba);
  213.             }
  214.  
  215.             if (zapytanie.czasownik_podB && zapytanie.liczba != 0 && zapytanie.jednostkiB && zapytanie.obiekty_rodzaj.Count == 0) {
  216.                 Debug.Log ("Podnoszę hak na wysokość " + zapytanie.liczba + " " + substrings [zapytanie.jednostki]);
  217.                 // wysokość(liczba);
  218.             }
  219.             if (zapytanie.czasownik_podB && zapytanie.obiekty_rodzaj.Count == 1) {
  220.                 Debug.Log ("Już trzymam obiekt");
  221.             }
  222.  
  223.             if (zapytanie.czasownik_opuB && zapytanie.obiekty_rodzaj.Count == 1) {
  224.                 Debug.Log ("Opuszczam");
  225.                 //opuść();
  226.             }
  227.  
  228.             if (zapytanie.czas_przesunB && zapytanie.liczba != 0 && zapytanie.jednostkiB) {
  229.                 float distance = zapytanie.liczba;
  230.                 if (zapytanie.kierunekB) {
  231.                     if (substrings [zapytanie.kierunek].Contains ("tył")) {
  232.                         distance *= -1;
  233.                         Debug.Log ("Przesuwam hak o " + zapytanie.liczba + " " + substrings [zapytanie.jednostki] + " w tył");
  234.                     } else
  235.                         Debug.Log ("Przesuwam hak o " + zapytanie.liczba + " " + substrings [zapytanie.jednostki] + " w przód");
  236.                 }
  237.             }
  238.  
  239.         }
  240.  
  241.         //
  242.  
  243.        
  244.         else if (zapytanie.liczba_czasownikow == 1 && zapytanie.obiekty_rodzaj.Count==2) {
  245.             Debug.Log ("Przenoszę A obok B");
  246.         }
  247.  
  248.         else if(zapytanie.liczba_czasownikow == 2 && zapytanie.obiekty_rodzaj.Count==2){
  249.             Debug.Log ("Podnoszę A i kładę obok B");
  250.         }
  251.  
  252.         else if(zapytanie.czasownik_podB&&zapytanie.obiekty_rodzaj.Count==1&&zapytanie.sektory.Count==1){
  253.             Debug.Log ("Podnoszę i umieszczam w sektorze...");
  254.         }
  255.  
  256.         else if(zapytanie.czasownik_opuB&&zapytanie.trzymaB&&zapytanie.sektory.Count==1){
  257.             Debug.Log ("Umieszczam trzymany obiekt w sektorze...");
  258.         }
  259.  
  260.     }
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement