Bonjour ShaiLeTroll
J'ignore quels patterns se cachent derrière le Live Binding de cet article mais les lignes suivantes semblent s'en approcher.
1 2 3
| Expression := TBindings.CreateExpression(Scope, maFormule.Text);
// récupération de l'évaluation de la formule
ValueInt := Expression.Evaluate; |
On peut faire beaucoup de choses avec les patterns et notamment les combiner pour produire quelque chose d'encore plus souple et/ou de plus robuste.
Je citerai par exemple le pluggable factory qui combine abstract factory et prototype si je me souviens bien.
Donc ça ne m'étonnerais pas s'il y avait un petit bout d'interpréteur dans l'évaluateur d'expression du Live Binding.
Je commence d'ailleurs mon tuto en expliquant que "L’interpréteur est couramment utilisé pour analyser des chaînes algébriques et en renvoyer le résultat."
Et pour le SQL, on pourrait effectivement passer par un interpréteur pour analyser la syntaxe ou pourquoi pas carrément exécuter la requête.
Je soupçonne d'ailleurs que c'est le cas ou que ce fut le cas à un moment.
Cette syntaxe issue de la doc de Microsoft se rapproche beaucoup de l'EBNF que j'utilise pour décrire la grammaire du JSON.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <SELECT statement> ::=
[ WITH { [ XMLNAMESPACES ,] [ [,...n] ] } ]
<query_expression>
[ ORDER BY ]
[ ]
[ OPTION ( [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP ( expression ) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { } [ ,...n ] ]
[ WHERE ]
[ ]
[ HAVING < search_condition > ] |
ou encore la documentation de la librairie Microsoft.SqlServer.TransactSql.ScriptDom.
On y retrouve par exemple des classes SelectStatement ou WhereClause héritant d'une classe abtraite TSqlFragment, bref la base du pattern
On y retrouve des énumération comme SortOrder ou SetOptions qui ressemble étrangement aux expressions terminales que je présente et qui forment ensuite les token permettant de vérifier la grammaire.
On y retrouve aussi cette notion de token dans TSqlParserToken dont les propriétés ressemble assez à ce que je décrit dans ma propre classe de jeton.
Donc oui, si on voulait analyser ou exécuter du SQL, on pourrait certainement finir par y arriver avec un pattern interpréteur.
1 |
0 |