tutorial programacion lenguaje español aprender parsing compiler-construction

parsing - programacion - Parsers y compiladores para Dummies. ¿Donde empezar?



lenguaje de programacion lua pdf (3)

Esta pregunta ya tiene una respuesta aquí:

Este es un buen listado , pero ¿cuál es el mejor para un newb completo en esta área? Uno para alguien que proviene de un fondo de nivel superior (VB6, C #, Java, Python), que no está familiarizado con C o C ++. Estoy mucho más interesado en el análisis escrito a mano frente a Lex / Yacc en esta etapa.

Si acabara de graduarme en Ciencias de la Computación en lugar de Psicología, podría haber tomado una clase sobre esto en la universidad. Oh bien.


Si eres un n00b completo, el recurso más accesible (en ambos sentidos del término) es probablemente el tutorial de Jack Crenshaw . No es ni mucho menos exhaustivo, pero para empezar, no puedo pensar en nada cercano excepto en libros que están agotados desde hace mucho tiempo.



Por favor, eche un vistazo a: aprender a escribir un compilador

También es interesante:

Y hay más sobre el tema. Pero puedo dar una breve introducción:

El primer paso es el análisis léxico. Una secuencia de caracteres se traduce a una secuencia de tokens. Los tokens pueden ser simples como == <= + - (etc) y pueden ser complejos como identificadores y números. Si quieres puedo profundizar en esto.

El siguiente paso es traducir el tokenstream en un syntaxtree u otra representación. Esto se llama paso de análisis sintáctico.

Antes de que pueda crear un analizador, debe escribir la gramática. Por ejemplo, creamos un analizador de expresiones:

Tokens

addOp = ''+'' | ''-''; mulOp = ''*'' | ''/''; parLeft = ''(''; parRight = '')''; number = digit, {digit}; digit = ''0''..''9''; Each token can have different representations: + and = are both addOp and 23 6643 and 223322 are all numbers.

El idioma

exp = term | exp, addOp, term; // an expression is a series of terms separated by addOps. term = factor | term, mulOp, factor; // a term is a series of factors separated by mulOps factor = addOp, factor | parLeft, exp, parRight | number; // a factor can be an addOp followed by another factor, // an expression enclosed in parentheses or a number.

El lexer

Creamos un motor de estado que recorre la secuencia de char, creando un token

s00 ''+'', ''-'' -> s01 // if a + or - is found, read it and go to state s01. ''*'', ''/'' -> s02 ''('' -> s03 '')'' -> s04 ''0''..''9'' -> s05 whitespace -> ignore and retry // if a whitespace is found ignore it else ERROR // sorry but we don''t recognize this character in this state. s01 found TOKEN addOp // ok we have found an addOp, stop reading and return token s02 found TOKEN mulOp s03 found TOKEN parLeft s04 found TOKEN parRight s05 ''0''..''9'' -> s05 // as long as we find digits, keep collecting them else found number // last digit read, we have a number

Analizador

Ahora es el momento de crear un analizador / evaluador simple. Esto está completo en el código. Normalmente se crean usando tablas. Pero lo mantenemos simple. Lee los tokens y calcula el resultado.

ParseExp temp = ParseTerm // start by reading a term while token = addOp do // as long as we read an addop keep reading terms if token(''+'') then temp = temp + ParseTerm // + so we add the term if token(''-'') then temp = temp - ParseTerm // - so we subtract the term od return temp // we are done with the expression ParseTerm temp = ParseFactor while token = mulOp do if token(''*'') then temp = temp * ParseFactor if token(''/'') then temp = temp / ParseFactor od return temp ParseFactor if token = addOp then if token(''-'') then return - ParseFactor // yes we can have a lot of these if token(''+'') then return ParseFactor else if token = parLeft then return ParseExpression if not token = parRight then ERROR else if token = number then return EvaluateNumber // use magic to translate a string into a number

Este fue un simple ejemplo. En ejemplos reales, verá que el manejo de errores es una gran parte del analizador.

Espero que esto se aclare un poco ;-).