Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- session_start();
- error_reporting(E_ALL);
- // Define os caracteres especiais da ER
- $delimitador = array("+", "*", "(", ")");
- function debug($a) {
- echo '<pre>';
- print_r($a);
- echo '</pre>';
- }
- // 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.
- function parse($er) {
- // Transforma a ER em um array de caracteres (símbolos)
- $era = explode(" ", $er);
- // Pega os símbolos
- $simbolos = array();
- foreach($era as $s) {
- if(!in_array($s, $delimitador)) {
- if(!in_array($s, $simbolos)) {
- $simbolos[] = $s;
- }
- }
- }
- echo "Simbolos: " . implode(", ", $simbolos) . "<br />";
- // Inclui o símbolo de produções vazias
- array_unshift($simbolos, "Empty");
- // Coloca o automato final
- $aut_final = "f";
- // Gera um afne vazio
- $afne = array();
- echo "<h3>Autômato Finito Não Determinístico com movimentos vazios: </h3>";
- debug($afne);
- }
- // Varre a ER e gera as transições de acordo com os caracteres e/ou subníveis especificados por parenteses
- function er_to_afne($er, $simbolos, $afne) {
- }
- // Retorna os estados correspondentes ao pedaço de ER analisado
- // CONCAT => ab
- function er_concat($ch1, $ch2, $q0, $qf, $simbolos, $afne) {
- // Gera os estados correspondentes ao CONCAT
- $qf = $q0 + 3;
- $q = array();
- for($i = $q0; $i <= $qf; $i++) {
- $q[] = "q" . $i;
- }
- debug($q);
- foreach($q as $qn) {
- $afne[$qn] = array();
- foreach($simbolos as $s) {
- $afne[$qn][$s] = "-";
- }
- }
- // Preenche as transições adequadas ao CONCAT
- $afne[$q[0]][$ch1] = $q[1];
- $afne[$q[1]]["Empty"] = $q[2];
- $afne[$q[2]][$ch2] = $q[3];
- debug($afne);
- }
- // REPEAT => a*
- function er_repeat($ch, $q0, $qf, $simbolos, $afne) {
- // Gera os estados correspondentes ao CONCAT
- $qf = $q0 + 3;
- $q = array();
- for($i = $q0; $i <= $qf; $i++) {
- $q[] = "q" . $i;
- }
- debug($q);
- foreach($q as $qn) {
- $afne[$qn] = array();
- foreach($simbolos as $s) {
- $afne[$qn][$s] = "-";
- }
- }
- // Preenche as transições adequadas ao REPEAT
- $afne[$q[0]]["Empty"] = $q[1] . ";" . $q[3];
- $afne[$q[1]][$ch] = $q[2];
- $afne[$q[2]]["Empty"] = $q[1] . ";" . $q[3];
- debug($afne);
- }
- // UNION => a + b
- function er_union($ch1, $ch2, $q0, $qf, $simbolos, $afne) {
- // Gera os estados correspondentes ao CONCAT
- $qf = $q0 + 5;
- $q = array();
- for($i = $q0; $i <= $qf; $i++) {
- $q[] = "q" . $i;
- }
- debug($q);
- foreach($q as $qn) {
- $afne[$qn] = array();
- foreach($simbolos as $s) {
- $afne[$qn][$s] = "-";
- }
- }
- // Preenche as transições adequadas ao UNION
- $afne[$q[0]]["Empty"] = $q[1] . ";" . $q[3];
- $afne[$q[1]][$ch1] = $q[2];
- $afne[$q[2]]["Empty"] = $q[5];
- $afne[$q[3]][$ch2] = $q[4];
- $afne[$q[4]]["Empty"] = $q[5];
- debug($afne);
- }
- // CHAR => a
- function er_char($ch, $q0, $qf, $simbolos, $afne) {
- // Gera os estados correspondentes ao CHAR
- $qf = $q0 + 1;
- $q = array();
- for($i = $q0; $i <= $qf; $i++) {
- $q[] = "q" . $i;
- }
- debug($q);
- foreach($q as $qn) {
- $afne[$qn] = array();
- foreach($simbolos as $s) {
- $afne[$qn][$s] = "-";
- }
- }
- // Preenche as transições adequadas ao REPEAT
- $afne[$q[0]][$ch] = $q[1];
- debug($afne);
- }
- // Início do Script
- $go = 0;
- if(isset($_POST["expressao"])) {
- $expressao = $_POST["expressao"];
- $go = 1;
- } else if(isset($_SESSION["expressao"])) {
- $expressao = $_SESSION["expressao"];
- $go = 1;
- }
- if(isset($expressao) && $expressao == "") {
- $msg = "Expressão Regular não informada";
- $go = 0;
- }
- ?>
- <html>
- <head><title>Trabalho de LFA</title></head>
- <body>
- <form action="index.php" name="formais" method="post" enctype="multipart/form-data">
- <h2>Trabalho de LFA</h2>
- <h3>Primeira Parte: tradução de ER -> AFNe</h3>
- <br />
- <p><?php echo $msg; ?></p> <br />
- Digite a expressão Regular: <br />
- Exemplo: ( a + b ) a <br />
- <input type="text" name="expressao" /> <input type="submit" value="Enviar" /><br />
- <?php
- if($go) {
- parse($expressao);
- }
- ?>
- </form>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement