3º. 2º cuatrimestre. Itinerario de Computación. Grado en Ingeniería Informática. ULL
En el Repo ULL-ESIT-GRADOII-PL/esprima-pegjs-jsconfeu-talk encontrará el material de varias charlas.
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.
> 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