-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcompilador.php
84 lines (74 loc) · 2.07 KB
/
compilador.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
require 'autoload.php';
use App\Lexico\AnalisLexico as Lexico;
use App\GeradorCodigo\GeradorCodigo as Gerador;
use App\Lexico\TabelaSimbolos;
use App\Codigo\Codigo;
use App\Sintatico\AnalSintatico as sintatico;
use App\Semantico\Semantico;
$erroLexico = "";
$erroSintatico = "";
if (isset($_POST['codigo'])) {
$inputCodigo = $_POST['codigo'];
$codigo = trim($inputCodigo);
$codigo = $codigo . " EOF";
/**
* Separo a string em um array de caracteres
* exemplo de código:
* var a b c d
* if
* Resultado:
* Array
* (
* [0] => v
* [1] => a
* [2] => r
* [3] =>
* [4] => a
* [5] =>
* [6] => b
* [7] =>
* [8] => c
* [9] =>
* [10] => d
* [11] =>
* [12] =>
*
* [13] => i
* [14] => f
* [15] =>
* [16] => E
* [17] => O
* [18] => F
* )
*/
$arrayCodigo = str_split($codigo);
//App\Lexico\Teste\Teste::pre($arrayCodigo);
// carrega a tabela de simbolos
TabelaSimbolos::setSimbolos();
// carrega o array com palavras reservadas
TabelaSimbolos::setPalavrasReservadas();
$lexico = new Lexico(new Codigo($arrayCodigo));
do {
// reinicializa o atributo token
$lexico->setToken("");
$lexico->nextToken();
//$lexico->imprime();
} while ($lexico->getToken() !== "EOF" && !$lexico->getExisteCaracterInvalido());
if (!$lexico->getExisteCaracterInvalido()) {
new Sintatico($lexico->getArrayTokens(), $lexico->getArrayTokensLinha());
$erroSintatico = Sintatico::getMsgError();
// Se não tiver erro sintático, inicia o semantico.
if ($erroSintatico == "") {
$semantico = new Semantico($lexico->getArrayTokens(), $lexico->getArrayTokensLinha());
$erroSemantico = Semantico::getMsgError();
$existeErroSemantico = $semantico->existeErro();
if (!$existeErroSemantico) {
Gerador::escrever();
}
}else{
Gerador::apagarDadosArquivo();
}
}
}
include("index.php");