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 }