Existe alguma terminologia oficial sobre algo como aspas "" a gramática?
-
29-09-2020 - |
Pergunta
Em muitos linguagem de programação de seqüência de caracteres é um token.
Por exemplo:
token ::= '"' string
| digit nat
string ::= char string
| '"'
nat ::= digit nat
| ϵ
Este é um LL(1) gramática para alguma linguagem de programação da toke gramática.
Ao analisar um string
, não há necessidade de verificar siga conjunto, porque há uma "
no final de cada string
.
Comparando com nat
, string
é mais fácil de analisar.
A minha pergunta é
Existe alguma terminologia oficial sobre esse tipo de gramática?
Obrigado.
Edição:
Houve algum erro no original gramática, obrigado @rici para apontar meus erros.
Solução
FOLLLOW conjuntos não são utilizados na análise de string
ou nat
.Em ambos os casos, o analisador simplesmente precisa determinar se a entrada é um conjunto de símbolos válidos.No caso de nat
, os símbolos válidos são dígitos;no caso de string
, eles são caracteres que "
.(Em línguas verdadeiras, o analisador também seria de verificação para \
).Mas em ambos os casos, uma verificação é necessário, e não existe um bom critério para se dizer: um teste é "mais simples" do que outro.(Na prática, ambas as verificações são susceptíveis de ser uma simples tabela de pesquisa.Então eles são O(1).)
SIGA conjuntos são necessárias somente quando a gramática contém ε produções.Mesmo assim, o analisador ações não são complicados.O que é mais complicado, é a construção do analisador, algo que só acontece uma vez.Ele não é realmente o que de um grande negócio, mas é suficientemente notável que "ε-livre gramáticas" são uma coisa.Eu não acho que há qualquer vocabulário comum para descrever a diferença entre explicitamente e implicitamente terminada a repetição, e de qualquer forma, a distinção será muito difícil de definir de forma rigorosa.O seu string
gostaria de ser analisado por um analisador, que usou uma regra diferente para recolher o final "
, e é bem possível que os dois analisadores de acabar com a mesma implementação.