Ybadoo - Soluções em Software Livre
Tutoriais
Linguagens Formais e Autômatos

Especifique uma Gramática Livre do Contexto (GLC) que reconheça o conteúdo de um arquivo CSV, utilizando como delimitador de campo os caracteres ponto e vírgula (;), vírgula (,) ou tabulação (\t), como delimitador de texto os caracteres aspas duplas (") ou aspas simples ('), e como delimitador de linha os caracteres \n ou \r\n.

G = ({file, line, word, text, lineDelimiter, fieldDelimiter, textDelimiter, letter, digit},
     {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2,
      3, 4, 5, 6, 7, 8, 9, ;, ,, \t, ", ', \n, \r}, P, file)
P = {<file> ::= <line> <lineDelimiter> <file> | <line>
     <line> ::= <word> <fieldDelimiter> <line> | <word>
     <word> ::= <textDelimiter> <text> <textDelimiter> | <text>
     <text> ::= <letter> <text> | <digit> <text> | ε
     <lineDelimiter> ::= \n | \r\n
     <fieldDelimiter> ::= ; | , | \t
     <textDelimiter> ::= " | '
     <letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m
               |  n | o | p | q | r | s | t | u | v | w | x | y | z
     <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }