Parcourir la source

Sample Angular App for VCAT

Lucas de Souza il y a 1 an
Parent
commit
8351c18eaf

+ 1 - 1
angular.json

@@ -30,7 +30,7 @@
             "styles": [
               "src/styles.css"
             ],
-            "scripts": []
+            "scripts": ["vcat/main.js"]
           },
           "configurations": {
             "production": {

+ 2 - 1
src/app/app.component.ts

@@ -1,8 +1,9 @@
 import { Component } from '@angular/core';
+import { VcatComponent } from './vcat/vcat.component';
 
 @Component({
   selector: 'app-root',
-  templateUrl: './app.component.html',
+  template: `<app-vcat></app-vcat>`,
   styleUrls: ['./app.component.css']
 })
 export class AppComponent {

+ 3 - 1
src/app/app.module.ts

@@ -3,10 +3,12 @@ import { BrowserModule } from '@angular/platform-browser';
 
 import { AppRoutingModule } from './app-routing.module';
 import { AppComponent } from './app.component';
+import { VcatComponent } from './vcat/vcat.component';
 
 @NgModule({
   declarations: [
-    AppComponent
+    AppComponent,
+    VcatComponent
   ],
   imports: [
     BrowserModule,

+ 0 - 0
src/app/vcat/vcat.component.css


+ 6 - 0
src/app/vcat/vcat.component.html

@@ -0,0 +1,6 @@
+<p>Codigo exemplo</p>
+<div>
+    <pre>{{textCode}}</pre>
+</div>
+
+<button (click)="run()">Rodar codigo</button>

+ 23 - 0
src/app/vcat/vcat.component.spec.ts

@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { VcatComponent } from './vcat.component';
+
+describe('VcatComponent', () => {
+  let component: VcatComponent;
+  let fixture: ComponentFixture<VcatComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [ VcatComponent ]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(VcatComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 58 - 0
src/app/vcat/vcat.component.ts

@@ -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
+    }
+    
+  }
+}

Fichier diff supprimé car celui-ci est trop grand
+ 2 - 0
vcat/main.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
vcat/main.js.map