Aula 17-Ago-24

Você também pode gostar

Você está na página 1de 2

- As constantes so definidas pelo analisador sinttico.

As definioes esto em
json.tab.h

- tab: tabela de deslocamento de reduo, bem sugestivo este nome.

- Ser gerado analisador lxico a partir da gramatica regular. Este arquivo o


json.l.
Ser inserida uma entrada no analisador lxico no qual encaminhado para yylex()
que retorna um inteiro.
- O analisador sinttico (json.y) gerado pela gramtica livre de contesto que
dar um retorno atravs do yylex anterior ao analisador lxico.
H uma varivel chamada yylval que tambm pode comunicar entre analisador lxico e
sinttico. Esta varavel apresenta valor semntico de token

Exemplo: 10 apresenta tipo number, valor "10" e valor semntico 10.

-----------
Quatro tipos de token a trabalhar pelo analisador lxico: number, string, boolean,
mulltype
A produo assim: se tenho uma string s qualquer (s -> <B), a flecha
substituida por um item qualquer (s : <B); e um B que ser executado quando esta
produo for utilizada na derivao.
Se eu tiver mais uma produo (s:g), pode-se fazer (s:<B|g). Se a string for vazia,
coloca-se uma linha em branco (s: ).

No material da parte prtica voc pode encontrar algumas definies, por exemplo,
para definir procedencia de operadores.

Vamos agora escrever a gramtica a partir desta ideia basica de como o Json opera:

Jsonnode um par atributo-valor (atributo:valor).


Atributo uma string que vem do analisador lxico.
Se voc entrar pelo Jsonnode e no for resolvido porque tem mais de um n,
acrescenta-se um jsondata (vrgula) e outro jsonnode.

Quando se contm objeto dentro de objeto, no possvel analisar pela gramtica


regular atravs do analisador lxico.

bison -d json.y
flex json.l
g++ -o json json.tab.c
lex.yy.c -lfl
./json //roda o json

Por padro, a entrada pelo teclado (STDIN). possvel alterar esta entrada
ligando a um arquivo yyin=Fopen(...)

cat arq.json | ./json

o cat STDOUT e o ./json STDIN

-------------------------
Direto na tela de comando:
./json
("Nome": "eleri")

Se der tudo certo vai aparecer que foi validado


------------
Direto na tela de comanddo: cat google.json | ./json

Se der tudo certo vai aparecer que foi validado

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

Ao invs de implementar sua estrutura, voc usa STL.


Todas as linguagens hoje tem bibliotecas bem implementadas e otimizadas.
Dica: antes de implementar biblioteca de dados, verifique se ela j no est
implantada.
STL tem variedade grande de estruturas.

Fazem parte do STL duas estruturas para guardar contedo do ojeto:


- pilha (stack): stack <string> st;
- voc guarda nela pendencias que vao aparecer mais para frente;
so operaes tpicas de pilha: push (adiciona elemento), s=top() (inspeciona
primeiro elemento), pop() (elimina primeiro elemento da pilha), size() (quantos
elementos tem na pilha).

- lista: list <double> l; |0==================N|


se quiser adicionar o elemento no comeo da lista (na posicao 0 ou primeira
vaga) usa-se push_front (). Para eliminar usa-se pop_front().
se quiser adicionar elemento no final da lista push_back(). Para eliminar
pop_back().

------------------------------
Sugesto de exercicios: 4.5, 4.8 e 4.12

Você também pode gostar