Lista haskell
Procure entender os conceitos de sintaxe concreta e sintaxe abstrata. Explique-os e faça uso de exemplos para mostrar o seu entendimento.
A sintaxe concreta é uma forma de escrever programas sintaticamente bem formados utilizando, para isso, todos os recursos visíveis no código de uma linguagem, tais como parênteses e delimitadores. Entretanto, ao especificar uma semântica, é conveniente concentrar-se apenas na estrutura das frases, sendo para esta finalidade, utilizada a sintaxe abstrata. Através desta última obtêm-se as árvores sintáticas abstratas, onde cada nó representa uma regra de produção e há exatamente uma sub-árvore por sub-frase. Essa gramática não tem como objetivo gerar sentenças, pois símbolos terminais não possuem nenhum papel real na sintaxe abstrata.
Como exemplo, temos:
Sintaxe Concreta
Program ::= single-Command
Command ::= single-Command | Command ';' single-Command
single-Command ::= V-name ':=' Expression | Identifier '(' Expression ')' | 'if' Expression 'then' single-Command 'else' single-Command | 'while' Expression 'do' single-Command | 'let' Declaration 'in' single-Command | 'begin' Command 'end'
. . .
Type-denoter ::= Identifier