Advertisement
Guest User

Untitled

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