Criando grafo explícito em parsing

1 resposta
J

Expressão:
(x AND ( Y OR (K AND Z))) -> (A AND (B OR C))

Vamos identificar os elementos que me interessam.Expressão com nodos identificados:
(x[1] AND[2] ( Y[3] OR[4] (K[5] AND[6] Z[7]))) -> (A[8] AND[9] (B[10] OR[11] C[12]))

Nesta expressão eu faço distinção entre “átomos lógicos” e “conectivos lógicos”. Por exemplo, o elemento 1 é um “átomo lógico” e o elementos 2 é um “conectivo lógico”.

Eu queria fazer um parsing de expressões deste tipo e montar um grafo explícito com ela. Eu já tenho toda a estrutura do grafo pronta. Consigo inclusive elaborar (à mão!) uma expressão como esta no grafo e manipular estas informações. No entanto, eu queria oferecer uma entrada usando esta linguagem e, fazer um parsing para criar meu grafo.

Até sei fazer o parsing das expressões codificadas nesta linguagem, mas não consegui pensar em uma maneira inteligente de ir montando o grafo à medida que faço o parsing. Para entender o que quero fazer, vamos supor uma expressão menor:

(x[1] AND[2] (y[3] OR[4] z[5]))

Lembrando que os números entre colchetes só estão aí para identificarmos os elementos que interessam. A saída seria um grafo de 5 nodos, onde:
2(AND) é pai de 1 e 4
4[OR] é pai de 3 e 5

É importante notar que os nodos “átomso lógicos” são sempre terminais.

Alguém tem alguma ideia de como posso ir gerando esta estrutura à medida que faço o parsing?

Agradeço desde já.

1 Resposta

J

Nenhuma ideia pessoal?

Criado 19 de agosto de 2010
Ultima resposta 19 de ago. de 2010
Respostas 1
Participantes 1