No funciona ésta clase. “The media could not be loaded, either because the server or network failed or because the format is not supported.”
Ya intenté con tres navegadores. Desde mi celular y la computadora de mi hermana.
Introducción al desarrollo de intérpretes y lenguajes de programación
Aprende a desarrollar lenguajes de programación con intérpretes
Desarrolla LPP o Lenguaje de Programación Platzi
Construcción del lexer o tokenizador
¿Qué es análisis léxico? Funcionamiento del lexer y tokens
Estructura y definición de tokens en Python
Lectura de caracteres y tokens
Tokens ilegales, operadores de un solo carácter y delimitadores
Reconocimiento y diferenciación entre letras y números
Declaración y ejecución de funciones
Extensión del lexer: condicionales, operaciones y booleanos
Operadores de dos caracteres
Primera versión del REPL con tokens
Construcción del parser o analizador sintáctico
¿Qué es un parser y AST?
Estructura y definición de nodos del AST en Python
Parseo del programa o nodo principal
Parseo de assignment statements
Parseo de let statements
Parseo de errores
Parseo del return statement
Técnicas de parsing y pratt parsing
Pruebas del AST
Implementación del pratt parser
Parseo de Identifiers: testing
Parseo de Identifiers: implementación
Parseo de enteros
Prefix operators: negación y negativos
Infix operators y orden de las operaciones: testing
Infix operators y orden de las operaciones: implementación
Parseo de booleanos
Desafío: testing de infix operators y booleanos
Parseo de expresiones agrupadas
Parseo de condicionales: testing y AST
Parseo de condicionales: implementación
Parseo de declaración de funciones: testing
Parseo de declaración de funciones: AST e implementación
Parseo de llamadas a funciones: testing y AST
Parseo de llamadas a funciones: implementación
Completando los TODOs o pendientes del lexer
Segunda versión del REPL con AST
Evaluación o análisis semántico
Significado de símbolos
Estrategias de evaluación para intérpretes de software
Representación de objetos
Evaluación de expresiones: enteros
Evaluación de expresiones: booleanos y nulos
Evaluación de expresiones: prefix
Evaluación de expresiones: infix
Evaluación de condicionales
Evaluación del return statement
Manejo de errores
Ambiente
Bindings
Evaluación de funciones
Llamadas a funciones
Mejora del intérprete
Implementación de strings
Operaciones con strings
Built-in functions: objeto y tests
Built-in functions: evaluación
Siguientes pasos
Retos para expandir tu intérprete
Continúa con el Curso de Creación de Compiladores de Software
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Aportes 7
Preguntas 1
No funciona ésta clase. “The media could not be loaded, either because the server or network failed or because the format is not supported.”
Ya intenté con tres navegadores. Desde mi celular y la computadora de mi hermana.
No sé si está bien que haga esto pero lo paso igual, si está mal me lo pueden comentar y no lo vuelvo a hacer nunca más y borro el comentario, bueno la cosa que esta es mi implementación del reto pero con mi lenguaje hecho en Rust:
use ezcript_ast::ast::Program;
use ezcript_ast::expressions::{Expressions, Integer};
use ezcript_ast::statements::{ReturnStatement, Statements};
use ezcript_lexer::tokens::{Literal, Token, TokenKind};
#[test]
fn test_ast_return_statement() {
let resource: &str = "return 0";
let program: Option<Program> =
Program::new(vec![Statements::ReturnStatement(ReturnStatement::new(
Token {
kind: TokenKind::Keyword,
lexeme: "return".to_string(),
literal: None,
line: 1,
},
Some(Expressions::Integer(Integer::new(
Token {
kind: TokenKind::Number,
lexeme: "0".to_string(),
literal: Some(Literal::Number(0.0)),
line: 1,
},
0,
1,
))),
1,
))]);
is_not_none!(program);
let program_str = program.unwrap().to_string();
assert_eq!(program_str, "return 0".to_string());
}
el video no se ve!!!
Listo, para mi test lo único que hice fue moduificar el mismo test de let jajaja, pero únicamente cambié el token que debería regresar y su return value:
def test_return_statement(self) -> None:
program: Program = Program(statements=[
ReturnStatement(
token=Token(TokenType.RETURN, literal="regresa"),
return_value=Identifier(
token=Token(TokenType.IDENT, literal="mi_var"),
value="mi_var"
)
)
])
program_str = str(program)
self.assertEquals(program_str, "regresa mi_var;")
En este caso, el return_value
de la clase ReturnStatement
recibe una expresion,pero como la clase Identifier
extiende de la misma clase Expresion
entonces puedo pasarle un Identifier
sin problemas 😄
from unittest import TestCase
from frl.ast import ReturnStatement
from frl.token import (
Token,
TokenType
)
class ASTTest(TestCase):
def test_return_statement(self): -> None:
program: Program = Program(statements=[
ReturnStatement(
token=Token(TokenType.RETURN, literal="regresa"),
return_value=Identifier(
token=Token(TokenType.IDENT, literal="mi_var"),
value="mi_var"
)
)
])
program_str = str(program)
self.assertEquals(program_str, "regresa mi_var;")
Aquí esta mi solución al reto 😃
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?