El proyecto consiste en crear un Analizador Sintáctico para el lenguaje Mini_Python cuya sintaxis se detalla en el archivo adjunto. Este lenguaje es un subconjunto de lenguaje al estilo Python por lo que NO debe entenderse que el funcionamiento deba ser el mismo tanto en esta como en las etapas posteriores. El objetivo en esta etapa es realizar la fase de análisis sintáctico del compilador para dicho lenguaje en donde se espera concluir con las subfases de “scanning” “parsing” y AST. Para el desarrollo de esta etapa será necesario la utilización de la herramientas ANTLR4.
Grammar for mini-Python:
- program : statement (statement)*
- statement : defStatement | ifStatement | returnStatement | printStatement | whileStatement | assignStatement | functionCallStatement
- defStatement : def identifier ( argList ) : sequence
- argList : identifier moreArgs | ε
- moreArgs : (, identifier)*
- ifStatement : if expression : sequence else : sequence
- whileStatement : while expression : sequence
- returnStatement : return expression NEWLINE
- printStatement : print ( expression ) NEWLINE
- assignStatement : identifier = expression NEWLINE
- functionCallStatement : primitiveExpression ( expressionList ) NEWLINE
- sequence : NEWLINE INDENT moreStatement DEDENT
- moreStatement : statement (statement)*
- expression : additionExpression comparison
- comparison : ((<|>|<=|>=|==) additionExpression)*
- additionExpression : multiplicationExpression additionFactor
- additionFactor : ((+|-) multiplicationExpression)*
- multiplicationExpression : elementExpression multiplicationFactor
- multiplicationFactor : ((|/) elementExpression)
- elementExpression : primitiveExpression elementAccess
- elementAccess : ([ expression ])*
- functionCallExpression : identifier ( expressionList )
- expressionList : expression moreExpressions | ε
- moreExpressions : (, expression)*
- primitiveExpression : Integer | String | identifier | Char | ( expression ) | listExpression | len ( expression ) | functionCallExpression
- listExpression : [ expressionList ]