|
@@ -0,0 +1,58 @@
|
|
|
|
+import { Component } from '@angular/core';
|
|
|
|
+declare var vcat: any;
|
|
|
|
+
|
|
|
|
+@Component({
|
|
|
|
+ selector: 'app-vcat',
|
|
|
|
+ templateUrl: './vcat.component.html',
|
|
|
|
+ styleUrls: ['./vcat.component.css']
|
|
|
|
+})
|
|
|
|
+export class VcatComponent {
|
|
|
|
+
|
|
|
|
+ public textCode = `
|
|
|
|
+ programa {
|
|
|
|
+
|
|
|
|
+ funcao inicio () {
|
|
|
|
+ inteiro a <- 0
|
|
|
|
+ para a de 0 ate 10 {
|
|
|
|
+ se (a%2 == 0) {
|
|
|
|
+ escreva("eh par: "+a)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ `;
|
|
|
|
+
|
|
|
|
+ public run (): void {
|
|
|
|
+ try {
|
|
|
|
+ console.log(vcat)
|
|
|
|
+ const ast = vcat.SemanticAnalyser.analyseFromSource(this.textCode);
|
|
|
|
+ const proc = new vcat.IVProgProcessor(ast);
|
|
|
|
+ // Registrando um objeto que fornece o minimo necessário para o processador
|
|
|
|
+ // Vê: src/io/ouput.js
|
|
|
|
+ proc.registerOutput({
|
|
|
|
+ sendOutput: console.log,
|
|
|
|
+ });
|
|
|
|
+ // IVProgProcessor.interpretAST é uma função assíncrona
|
|
|
|
+ // Ela devolve o estado final do programa (valores finais das variáveis declaradas dentro da função "inicio" ou no escopo global)
|
|
|
|
+ // A classe Store em src/processor/store/store.ts descreve o parametro mas no contexto atual ele é totalmente irrelevante
|
|
|
|
+ proc.interpretAST().then((_finalProgramState: any) => {
|
|
|
|
+ console.log("Programa executado com sucesso!")
|
|
|
|
+ });
|
|
|
|
+ } catch (error: any) {
|
|
|
|
+ // Caso haja erro de sintaxe ou semântico, antes ou durante a interpretação do código uma exceção será lançada
|
|
|
|
+ // Todo objeto error derivado dos erros citados acima possuem esses campos definidos
|
|
|
|
+ // Adicionei a pedido da ultima pessoa que trabalho com essa integração da interface acessível
|
|
|
|
+ // Caso o objeto error nao possua essas propriedades, algo bastante inexperado aconteceu e deve indicar problema interno
|
|
|
|
+ // Vê: src/ast/error/syntaxError.js, src/processor/error/runtimeError.js, src/processor/error/semanticError.js e seus respectivos factories
|
|
|
|
+ // NOTA: Em alguns casos a informação de linha e coluna podem nao estar disponivel
|
|
|
|
+ // id representa o identificador unico do erro, linha e coluna onde no codigo textual ocorreu o problema
|
|
|
|
+ if (error.id && error.context)
|
|
|
|
+ console.error(error.id, error.context.line, error.context.column);
|
|
|
|
+ else
|
|
|
|
+ console.error(error)
|
|
|
|
+ // a linha e coluna foi a estrategia pensada para poder associar o erro com o elemento visual que o gerou
|
|
|
|
+ // uma vez que seria possivel associar seções do texto com o elemento que o gerou
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+}
|