anterior arriba atrasadelante (solo si previamente se ha ido atras)

A.1.8. Gramática BNF

Las reglas en notación BNF que damos a continuación formalizan los convenios sintácticos que hemos descrito hasta ahora informalmente. Debe entenderse que no es una gramática completa de Prolog, ya que carece de muchas construcciones, algunas de las cuales veremos en los Apartados siguientes.

Dado que el alfabeto del lenguaje incluye algunos símbolos terminales que coinciden con símbolos del metalenguaje BNF (como «[» y «]» ), seguimos aquí el convenio de entrecomillar a todos los símbolos terminales.

    <programa> ::= <clausula>{<clausula>}  
    <clausula> ::= <hecho>|<regla>|<consulta>  
    <hecho> ::= <cabeza>"."  
    <regla> ::= <cabeza> ":-"<cuerpo>"."  
    <consulta> ::= <cuerpo>"."  
    <cabeza> ::= <predicado>  
    <cuerpo> ::= <literal>{","<literal>}  
    <predicado> ::= <nombre>"("<termino>{","<termino>}")"  
    <literal> ::= <predicado>| "not" <predicado>  
    <funcion> ::= <nombre>"("<termino>{","<termino>}")"  
    <termino> ::= <atomo>|<estructura>  
    <atomo> ::= <cte_num>|<cte_simb>|<variable>  
    <estructura> ::= <funcion>|<lista>  
    <lista> ::= "[""]"|"["<atomo>{","<atomo>}"]"|  
                ".""("<atomo>","<lista>")"|  
                "["<atomo>{","<atomo>}"|"<lista>"]"  
    <cte_num> ::= ["+"|"-"]<num>  
    <num> ::= <entero>|<real>  
    <entero> ::= <digito>{<digito>}  
    <real> ::= <entero>"."<entero>  
    <digito> ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"  
    <cte_simb> ::= <nombre>|""’<caracteres>""’  
    <nombre> ::= <min>|{<alfanum>}  
    <variable> ::= <may>{<alfanum>}|"_"{<alfanum>}  
    <alfanum> ::= "_"|<min>|<may>|<digito>  
    <caracteres> ::= <alfanum>|","|";"|"$"|...  
    <min> ::= "a"|"b"|"c"|....|"z"  
    <may> ::= "A"|"B"|"C"|....|"Z"

Hemos definido separadamente «<predicado>» y «<función>» porque, como ya sabemos, semánticamente son diferentes, pero como aquí estamos definiendo la sintaxis hubiera sido más correcto definirlas con una sola regla (y un nombre único), ya que sintácticamente son la misma categoría.

anterior arriba atrasadelante (sólo si previamente se ha ido atras)


algunos derechos reservados DIT-ETSIT-UPM
Portada