Aqui vai mais um exemplo de um cliente simples que pega as instruções em linguagem de montagem da linha de comando.
Esse cliente chama parse()
e coloca os apelidos definids através de IS
na tabela de apelidos (alias_table
).
Para exibir a tabela de símbolos fiz a chamada:
stable_visit(alias_table, &visite_st);
onde visite_st
é a função que ensina stable_visit()
como imprimir o conteúdo de um item de alias_table
.
Fora isso, todas as linhas abaixo foram foram impressas pelo cliente.
meu_prompt> ./parse_test "m IS \$1 ; linha 0" \ "n IS \$1; linha 1" \ "rx IS \$252 ; linha 2" \ "euclid DIVU rx,n,m ; linha 3" Instrucao 0 = 'm IS $1 ; linha 0' parse(): instrucao valida pos = 0 lineno = 0 label = 'm' operador = { name = 'IS' opcode = 0xffffffff opd_types = { opds[0] == REGISTER ($1) opds[1] == NULL opds[2] == NULL } } Instrucao 1 = 'n IS $1; linha 1' parse(): instrucao valida pos = 0 lineno = 0 label = 'n' operador = { name = 'IS' opcode = 0xffffffff opd_types = { opds[0] == REGISTER ($1) opds[1] == NULL opds[2] == NULL } } Instrucao 2 = 'rx IS $252 ; linha 2' parse(): instrucao valida pos = 0 lineno = 0 label = 'rx' operador = { name = 'IS' opcode = 0xffffffff opd_types = { opds[0] == REGISTER ($252) opds[1] == NULL opds[2] == NULL } } Instrucao 3 = 'euclid DIVU rx,n,m ; linha 3' parse(): instrucao valida pos = 0 lineno = 0 label = 'euclid' operador = { name = 'DIVU' opcode = 0x36 opd_types = { opds[0] == REGISTER ($252) opds[1] == REGISTER ($1) opds[2] == REGISTER ($1) } } Conteudo da ST alias_stable: 0: key = 'rx', (REGISTER) $252 1: key = 'n', (REGISTER) $1 2: key = 'm', (REGISTER) $1