Criar uma palavra-chave foreach com yacc ou Bison e Flex
-
05-07-2019 - |
Pergunta
Eu desenvolvi uma linguagem de programação interpretada. É fortemente baseado em C. O problema é que eu quero adicionar uma directiva foreach
e não têm idéia de como.
Eu estou usando Bison e Flex como o gerador de analisador e lexer.
Solução
Em sua gramática, você iria querer uma expressão que é algo como o seguinte:
foreach := foreach ( name in name ) { statements }
Quando você analisar isso, você deve ser capaz de traduzi-lo diretamente em um loop while em sua AST com uma declaração adicional que atribui uma variável no início.
Esta me parece a maneira mais simples de fazê-lo, mas provavelmente terá limitações com dados múltiplos tipos iteráveis ??(por exemplo, uma lista vs. um array). Neste caso, você pode querer considerar a consolidação de todos os iterables para que eles tenham um método consistente para obter o próximo elemento.