2 votes

EBNF : opérateur de type préfixe et suffixe dans la production de codes d'assemblage

J'essaie d'écrire 6809 assemblage en EBNF pour écrire un arbre-sitter parser.

Je suis bloqué sur une certaine production. En assembleur 6809, vous pouvez utiliser un registre comme opérande et en plus le dé- ou l'incrémenter :

LDA 0,X+     ; loads A from X then bumps X by 1
LDD ,Y++     ; loads D from Y then bumps Y by 2
LDA 0,-U     ; decrements U by 1 then loads A from address in U
LDU ,--S     ; decrements S by 2 then loads U from address in S

Attention au premier opérande "manquant" dans la deuxième ligne de code. Voici les productions que j'ai écrites :

instruction = opcode, [operand], ["," , register_exp];
...
register_exp = [{operator}], register | register, [{operator}];
register = "X" | "Y" | "U" | etc. ;
operator = "+" | "-";

Le problème est que register_exp = ... . Je pense qu'il pourrait y avoir une manière plus élégante de définir cette production. De plus, que se passe-t-il si un seul registre est donné à register_exp ?

2voto

bipll Points 7287

Vous avez probablement besoin

register_exp = [{operator}], register | register, [{operator}] | register;

pour permettre les noms de registres sans opérateurs. Pourquoi trouvez-vous que ce n'est pas très élégant ? C'est plutôt descriptif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X