Práctica: Analizador Léxico para Un Subconjunto de JavaScript
Vamos a trabajar a partir de este repo de Douglas Crockford:
- https://github.com/douglascrockford/TDOP
- Autor: Douglas Crockford, douglas@crockford.com en la Wikipedia
- Fecha que figura en el repo: 2010-11-12
Descripción:
- tdop.html contains a description of Vaughn Pratt’s Top Down Operator Precedence, and describes the parser whose lexer we are going to write in this lab. Is a simplified version of JavaScript.
- The file
index.html
parsesparse.js
and displays its AST. - The page depends on on
parse.js
andtokens.js
. - The file
parse.js
contains the Simplified JavaScript parser. - tokens.js produces an array of token objects from a string. This is the file we are going to work in this lab.
Douglas Crockford escribió su analizador léxico sin usar expresiones regulares. Eso hace que sea extenso (268 líneas). Su analizador es un subconjunto de JS que no tiene - entre otras cosas - expresiones regulares ya que uno de sus objetivos era que el analizador se analizara a si mismo.
Requisitos
- Douglas Crockford escribió su analizador léxico sin usar expresiones
regulares. Reescriba el analizador léxico en tokens.js usando expresiones regulares.
- No se limite a copiar el fichero
tokens.js
: estúdielo, entiéndalo y vaya modificando eltokens.js
original de Crockford hasta obtener una solución basada en expresiones regulares
- No se limite a copiar el fichero
- Evite que se hagan copias de la cadena siendo procesada. Muévase
dentro de la misma cadena usando
lastIndex
. Tiene una solución dada por el profesor en - Mejore la solución de Crockford usado regexps en tokens.js
- Haga el despliegue de su aplicación en Heroku o en la máquina virtual del iaas
- Complete los apuntes en su GitBook describiendo las expresiones regulares y lo aprendido en esta práctica
- Opcional: Use
sessions
para controlar quien accede a sus apuntes. Puede ver un ejemplo de como hacerlo en los ficheros:- ULL-ESIT-PL-1617/evaluar-manejo-de-cookies-y-sessions-en-expressjs
- staticauth.js (el servidor)
- gbookexample (el libro gitbook)
- gbuild (script para compilar el libro)
- Cuando haga la entrega indique los enlaces a los repos (apuntes y analizador) así como a los despliegues
Recursos
- Una solución a esta práctica se encuentra en:
- https://github.com/crguezl/ull-etsii-grado-pl-minijavascript/tree/gh-pages en github.
- Veala en funcionamiento en http://crguezl.github.io/ull-etsii-grado-pl-minijavascript/
- No se limite a copiar el fichero
tokens.js
: estúdielo, entiéndalo y vaya modificando eltokens.js
original de Crockford hasta obtener una solución basada en expresiones regulares
- El método
tokens
original retorna el array de tokens. Puede encontrarlo en https://github.com/crguezl/ull-etsii-grado-pl-minijavascript/blob/gh-pages/tokens.js - Para esta práctica es necesario familiarizarse con la forma en que funciona la OOP en JS. Vea este jsfiddle
- Apuntes: Expresiones Regulares
- Eloquent JS: Chapter 9: Regular Expressions
Notas para el Profesor
[~/srcPLgrado/lexical_analysis_top_down_operator_precedence(gh-pages)]$ pwd -P
/Users/casiano/local/src/javascript/PLgrado/lexical_analysis_top_down_operator_precedence