Procesadores de Lenguajes

3º. 2º cuatrimestre. Itinerario de Computación. Grado en Ingeniería Informática. ULL


Organization ULL-ESIT-PL-1920   Github Classroom ULL-ESIT-PL-1920   Campus Virtual PL   Chat Chat   Profesor Casiano

Table of Contents

Clase del Martes 04/02/2020

En la metodología que seguiremos este curso trabajará usando esta organización GitHub:

Vamos a trabajar de modo que todos - alumnos y profesores de esta asignatura - usaremos repos en esta organización para las prácticas.

Para la puesta en marcha necesitamos hacer algunas tareas

Rellenar Cuestionario para identificar la Relación entre el usuario GitHub y el usuario STIC

Rellena el Cuestionario DSI: Relación GitHub-AluXXXX dentro de la tarea cuestionarios iniciales.

Que es GitHub Classroom

GitHub Classroom is a GitHub service for education allowing teachers to distribute assignments with starter code.

Instrucciones para el Estudiante para las tareas asignadas via GitHub ClassRoom

Google Plus: Comunidad PL

Date de alta en la comunidad Google + de PL.

La Bibliografía

La mayor parte de los libros están accesible via el PuntoQ de la BULL.

Usaremos bastante estos libros:

En el repo GH:

encontrarás recursos adicionales.

Evaluación

La Evaluación de la asignatura se rige por el Reglamento de Evaluación y Calificación de la Universidad de La Laguna (BOC de 19 de enero de 2016), o el que la Universidad tenga vigente, además de por lo establecido en la Memoria de Verificación inicial o posteriores modificaciones.

What is a Compiler?

Talk Parsing, Compiling, and Static Metaprogramming at JSConfEU 2013 by Patrick Dubroy

Repo ULL-ESIT-GRADOII-PL/esprima-pegjs-jsconfeu-talk

En el Repo ULL-ESIT-GRADOII-PL/esprima-pegjs-jsconfeu-talk encontrará el material de varias charlas.

  1. Parsing, Compiling, and Static Metaprogramming at JSConfEU 2013 by Patrick Dubroy.
  2. Master the Art of the AST and Take Control of Your JS by Yonatan Mevorach.
  3. Talk on the same topic at Javascript Israel by Yonatan Mevorach

Esprima/Espree Examples

Espree started out as a fork of Esprima v1.2.2, the last stable published released of Esprima before work on ECMAScript 6 began. Espree is now built on top of Acorn, which has a modular architecture that allows extension of core functionality. The goal of Espree is to produce output that is similar to Esprima with a similar API so that it can be used in place of Esprima.

REPL example

> esprima = require('esprima')
{ parse: [Function: parse],
  parseModule: [Function: parseModule],
  parseScript: [Function: parseScript],
  tokenize: [Function: tokenize],
  Syntax: 
   { ... },
  version: '4.0.1' }

> esprima.tokenize('answer = 42', { range: true })
[ { type: 'Identifier', value: 'answer', range: [ 0, 6 ] },
  { type: 'Punctuator', value: '=', range: [ 7, 8 ] },
  { type: 'Numeric', value: '42', range: [ 9, 11 ] } ]

> esprima.parseScript('const answer = 42', { tokens: true })
Script {
  type: 'Program',
  body: 
   [ VariableDeclaration {
       type: 'VariableDeclaration',
       declarations: [Array],
       kind: 'const' } ],
  sourceType: 'script',
  tokens: 
   [ { type: 'Keyword', value: 'const' },
     { type: 'Identifier', value: 'answer' },
     { type: 'Punctuator', value: '=' },
     { type: 'Numeric', value: '42' } ] }

> inspect = require('util')
{ ... }

> console.log(util.inspect(esprima.parseScript('answer = 42'), {depth: null}))
Script {
  type: 'Program',
  body: 
   [ ExpressionStatement {
       type: 'ExpressionStatement',
       expression: 
        AssignmentExpression {
          type: 'AssignmentExpression',
          operator: '=',
          left: Identifier { type: 'Identifier', name: 'answer' },
          right: Literal { type: 'Literal', value: 42, raw: '42' } } } ],
  sourceType: 'script' }
undefined
> 

If we want to parse code written using the latest versions of JS we use espree:

> espree = require('espree')
> code3 = "const f = (x) => (<h1>x</h1>)"
'const f = (x) => (<h1>x</h1>)'
> espree.parse(code3, {ecmaVersion:6, ecmaFeatures: { jsx: true }})
Node {
  type: 'Program',
  start: 0,
  end: 29,
  body: [
    Node {
      type: 'VariableDeclaration',
      start: 0,
      end: 29,
      declarations: [Array],
      kind: 'const'
    }
  ],
  sourceType: 'script'
}

See the AST of const f = (x) => (<h1>x</h1>) at astexplorer.net

ASTExplorer

Your Comments

Comment with Disqus