Je crée une spécification formelle pour un langage de règles très simple, très simple. Je veux utiliser EBNF car c'est une norme mais je ne peux pas comprendre comment spécifier l'ordre des opérations. Voici la spécification jusqu'à présent.Ordre des opérations étendu Backus-Naur Form
rule = statement, { (‘AND’|’OR’), statement};
variable = ‘$’,alphabetic character, {alphabetic character | digit};
statement = variable, [ ‘count’,[white space ],’>’,[white space],number ];
alphabetic character = "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" ;
number = [ "-" ] , digit , { digit } ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
white space = ? white space characters ? ;
La question que j'ai est de savoir comment montrer que les choses entre parenthèses doivent être évaluées en premier. donc quelque chose comme ça
$strap AND ($greenSticker count > 5 OR ($greenSticker AND $redSticker))
Il semble comme une caractéristique commune à la plupart des langues, mais mes compétences Google me parvient pas et je ne peux pas sembler trouver un exemple.
En exprimant la priorité dans les règles de grammaire, je ne vois pas pourquoi vous faites une distinction entre l'analyse descendante et ascendante. Comme vous l'avez dit, il s'agit de produire l'arbre d'analyse correct, et vous construisez juste ce top-down ou bottom-up, pour arriver finalement au même résultat. Bien sûr, cela a quelques implications, mais ce n'est pas évident pour moi comment vous reliez la technique d'analyse syntaxique à (cette sorte de) préséance. S'il vous plaît, expliquez. – Gunther
Cette grammaire d'expression fonctionnera aussi bien dans un analyseur ascendant que dans un analyseur LL top-down, et pas seulement dans les analyseurs syntaxiques de descente récursive. Un parser Pratt est récursif-descendant et de haut en bas aussi. Votre deuxième paragraphe n'a vraiment aucun sens pour moi. – EJP
Pour répondre à vos deux problèmes, je viens d'enlever le paragraphe confus. J'espère que le reste de ma réponse est bénéfique! –