Pergunta

Estou aprendendo Bison e neste momento a única coisa que eu era o rpcalc exemplo, mas agora eu quero implementar uma função de impressão (como printf de C), mas eu don' t sabe como fazer isso e estou planejando para ter uma sintaxe como esta print ("Something here");, mas eu não sei como construir a função de impressão e eu não sei como criar esse ; como um fim da linha.
Obrigado por sua ajuda.

Foi útil?

Solução

Você primeiro precisa perguntar a si mesmo:
Quais são os [sub] partes do meu 'print ( 'algo');' sintaxe?

Depois de identificar essas partes, "simplesmente" descrevê-los na forma de regras de sintaxe gramatical, juntamente com regras de produção aplicáveis. E depois deixá-Bison gerar o analisador para você; Isso é sobre ele.

Para colocá-lo em seu caminho :
A semi-coluna é provavelmente um elemento que irá utilizar para separar statemements (a uma "chamada" como imprimir a partir de outra).
'Print' em si é provavelmente uma palavra-chave , ou, de preferência um nome de função nativa do seu idioma.
O declaração de impressão parece ter um string literal como [um dos] os seus argumentos. uma string literal começa e termina com aspas duplas (e, provavelmente, permitir citações escaparam dentro de si)
etc. O em negrito e itálico expressões acima são algumas das entidades (os 'símbolos' na linguagem do analisador) é provável que você precise definir na sintaxe para o seu idioma. Por que você vai usar regras de gramática Bison, como

stmt : print_stmt ';' | input_stmt ';'| some_other_stmt ';' ;
prnt_stmt : print '(' args ')' 
     { printf( $3 ); }
    ;

args : arg ',' args;
...

Uma vez que a pergunta sobre o semi-coluna, talvez alguma confusão foi a partir dos diferentes usos dos mesmos; ver, por exemplo acima como o ';' pertencem a sintaxe do seu idioma em que o; (Sem aspas) no final de cada regra gramatical fazem parte da linguagem de Bison.

Nota: este é, naturalmente, uma implementação simplista, que visa mostrar o essencial. Também a sintaxe Bison pode ser um off tat (esteve lá / feito isso, mas um longo tempo atrás ;-) Eu, então, "conheci" ANTLR para nunca mais voltar a Bison, embora eu ver como a sua leveza e totalmente auto-contido natureza pode torná-lo apropriado em alguns casos)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top