Pontos vírgulas desnecessários não geram erros de compilação, nem em tempo de execução
4 respostas
levimendes
Olá pessoal,
comecei a estudar para a certificação pelo livro SCJP,
nos primeiros códigos que eu estou executando encontrei pontos e vírgulas em lugares desnecessários
no final da linha do método main por exemplo e logo após o loop.
O programa compilou e rodou normalmente.
Aguém sabe explicar o que acontece?
Porque o compilador não reclama?
E pior ainda (eu acho), roda sem problemas?
Em outras linguagens isso também ocorre, cara.
Na verdade, isso tem a ver com as definições sintáticas da linguagem. O autômato que interpreta esse bichinho aí entende que ; é um lexema que leva a um estado final válido. O lexema anterior é um espaço ou uma expressão que já foi avaliada como válida e não interfere nela. Logo, estado inicial e final são válidos - e o “caminho” entre eles é sempre o mesmo, ou seja, é determinístico.
Então, não teria por quê criar uma regra sintática só pra validar que o ; está “desacompanhado”. A complexidade na interpretação aumentaria (com relação à expressões regulares e autômatos finitos) e o benefício é zero.
Abraço!
leoramos
Ah, e talvez eu tenha falado alguma besteira. Cursei compiladores há algum tempo, de repente já me esqueci ou confundi com boa parte desse trem.
Então, se queres mesmo entender esse negócio a fundo, procure sobre análise sintática em compiladores.
Abraço!
Observe que não é em todo lugar em que você encontra um “;” que você pode repeti-lo à vontade. Por exemplo, dentro de um for , deve haver exatamente 2 “;”, mesmo que haja alguns lugares vazios. As seguintes declarações são todas válidas.
for(inti=0; i < 10; ++i)
...
for(; i > 20; --i)
...
for(; ; )
...
for(inti=0; i < 10; )