Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.80 KB | None | 0 0
  1. <?
  2. session_start();
  3. error_reporting(E_ALL);
  4.  
  5. // Define os caracteres especiais da ER
  6. $delimitador = array("+", "*", "(", ")");
  7.  
  8. function debug($a) {
  9.    echo '<pre>';
  10.    print_r($a);
  11.    echo '</pre>';
  12. }
  13.  
  14. // LIMPA A EXPRESSÃO DE ENTRADA E SEPARA OS VALORES RELEVANTES DE UMA MANEIRA QUE A FUNÇÃO ER_TO_AFNE() POSSA REALIZAR A TRADUÇÃO.
  15. function parse($er) {
  16.    global $delimitador;
  17.  
  18.    // Transforma a ER em um array de caracteres (símbolos)
  19.    $era = explode(" ", $er);
  20.  
  21.    echo "ERA: <br />";
  22.    debug($era);
  23.  
  24.    //echo "Delimitador: <br />";
  25.    //debug($delimitador);
  26.  
  27.    // Pega os símbolos
  28.    $simbolos = array();
  29.    foreach($era as $s) {
  30.       if(!in_array($s, $delimitador)) {
  31.          if(!in_array($s, $simbolos)) {
  32.             $simbolos[] = $s;
  33.          }
  34.       }
  35.    }
  36.  
  37.    echo "Simbolos: " . implode(", ", $simbolos) . "<br />";
  38.  
  39.    // Inclui o símbolo de produções vazias
  40.    array_unshift($simbolos, "Empty");
  41.  
  42.    // Coloca o automato final
  43.    $aut_final = "f";
  44.  
  45.    // Gera um afne vazio
  46.    $afne = array();
  47.  
  48.  
  49.  
  50.  
  51.    echo "<h3>Autômato Finito Não Determinístico com movimentos vazios: </h3>";
  52.    debug($afne);
  53.  
  54. }
  55.  
  56. // Varre a ER e gera as transições de acordo com os caracteres e/ou subníveis especificados por parenteses
  57. function er_to_afne($era, $simbolos, $afne) {
  58.    if()
  59. }
  60.  
  61. // Retorna os estados correspondentes ao pedaço de ER analisado
  62. // CONCAT => ab
  63. function er_concat($ch1, $ch2, $q0, $qf, $simbolos, $afne) {
  64.    // Gera os estados correspondentes ao CONCAT
  65.    $qf = $q0 + 3;
  66.    $q = array();
  67.    for($i = $q0; $i <= $qf; $i++) {
  68.       $q[] = "q" . $i;
  69.    }
  70.    debug($q);
  71.  
  72.    foreach($q as $qn) {
  73.       $afne[$qn] = array();
  74.       foreach($simbolos as $s) {
  75.          $afne[$qn][$s] = "-";
  76.       }
  77.    }
  78.  
  79.    // Preenche as transições adequadas ao CONCAT
  80.    $afne[$q[0]][$ch1] = $q[1];
  81.    $afne[$q[1]]["Empty"] = $q[2];
  82.    $afne[$q[2]][$ch2] = $q[3];
  83.  
  84.    debug($afne);
  85. }
  86.  
  87. // REPEAT => a*
  88. function er_repeat($ch, $q0, $qf, $simbolos, $afne) {
  89.    // Gera os estados correspondentes ao CONCAT
  90.    $qf = $q0 + 3;
  91.    $q = array();
  92.    for($i = $q0; $i <= $qf; $i++) {
  93.       $q[] = "q" . $i;
  94.    }
  95.    debug($q);
  96.  
  97.    foreach($q as $qn) {
  98.       $afne[$qn] = array();
  99.       foreach($simbolos as $s) {
  100.          $afne[$qn][$s] = "-";
  101.       }
  102.    }
  103.  
  104.    // Preenche as transições adequadas ao REPEAT
  105.    $afne[$q[0]]["Empty"] = $q[1] . ";" . $q[3];
  106.    $afne[$q[1]][$ch] = $q[2];
  107.    $afne[$q[2]]["Empty"] = $q[1] . ";" . $q[3];
  108.  
  109.    debug($afne);
  110. }
  111.  
  112. // UNION => a + b
  113. function er_union($ch1, $ch2, $q0, $qf, $simbolos, $afne) {
  114.    // Gera os estados correspondentes ao CONCAT
  115.    $qf = $q0 + 5;
  116.    $q = array();
  117.    for($i = $q0; $i <= $qf; $i++) {
  118.       $q[] = "q" . $i;
  119.    }
  120.    debug($q);
  121.  
  122.    foreach($q as $qn) {
  123.       $afne[$qn] = array();
  124.       foreach($simbolos as $s) {
  125.          $afne[$qn][$s] = "-";
  126.       }
  127.    }
  128.  
  129.    // Preenche as transições adequadas ao UNION
  130.    $afne[$q[0]]["Empty"] = $q[1] . ";" . $q[3];
  131.    $afne[$q[1]][$ch1] = $q[2];
  132.    $afne[$q[2]]["Empty"] = $q[5];
  133.    $afne[$q[3]][$ch2] = $q[4];
  134.    $afne[$q[4]]["Empty"] = $q[5];
  135.  
  136.    debug($afne);
  137. }
  138.  
  139. // CHAR => a
  140. function er_char($ch, $q0, $qf, $simbolos, $afne) {
  141.    // Gera os estados correspondentes ao CHAR
  142.    $qf = $q0 + 1;
  143.    $q = array();
  144.    for($i = $q0; $i <= $qf; $i++) {
  145.       $q[] = "q" . $i;
  146.    }
  147.    debug($q);
  148.  
  149.    foreach($q as $qn) {
  150.       $afne[$qn] = array();
  151.       foreach($simbolos as $s) {
  152.          $afne[$qn][$s] = "-";
  153.       }
  154.    }
  155.  
  156.    // Preenche as transições adequadas ao REPEAT
  157.    $afne[$q[0]][$ch] = $q[1];
  158.  
  159.    debug($afne);
  160. }
  161.  
  162.  
  163. // Início do Script
  164. $go = 0;
  165. if(isset($_POST["expressao"])) {
  166.    $expressao = $_POST["expressao"];
  167.    $go = 1;
  168. } else if(isset($_SESSION["expressao"])) {
  169.    $expressao = $_SESSION["expressao"];
  170.    $go = 1;
  171. }
  172. if(isset($expressao) && $expressao == "") {
  173.    $msg = "Expressão Regular não informada";
  174.    $go = 0;
  175. }
  176. ?>
  177. <html>
  178. <head><title>Trabalho de LFA</title></head>
  179. <body>
  180. <form action="index.php" name="formais" method="post" enctype="multipart/form-data">
  181. <h2>Trabalho de LFA</h2>
  182. <h3>Primeira Parte: tradução de ER -> AFNe</h3>
  183. <br />
  184. <p><? echo $msg; ?></p> &nbsp; <br />
  185. Digite a expressão Regular: <br />
  186. Exemplo: ( a + b ) a <br />
  187. <input type="text" name="expressao" /> &nbsp;  &nbsp;  &nbsp; <input type="submit" value="Enviar" /><br />
  188. </form>
  189. <?
  190.  
  191. if($go) {
  192.    parse($expressao);
  193. }
  194.  
  195. ?>
  196. <h3>Debug:</h3>
  197. <?
  198. echo "er_concat <br />";
  199. er_concat("a", "b", 10, 0, array("a", "b", "c"), array());
  200.  
  201. echo "er_repeat <br />";
  202. er_repeat("a", 10, 0, array("a", "b", "c"), array());
  203.  
  204. echo "er_union <br />";
  205. er_union("a", "b", 10, 0, array("a", "b", "c"), array());
  206.  
  207. echo "er_char <br />";
  208. er_char("a", 10, 0, array("a", "b", "c"), array());
  209.  
  210. ?>
  211. </body>
  212. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement