Je souhaite analyser certaines affectations, où je me soucie uniquement de l'affectation dans son ensemble. Pas à propos de quoi dans la mission. Une affectation est indiquée par ':='
. (EDIT: Avant et après les travaux d'autres choses peuvent venir)Affectations d'analyse ANTLR
Quelques exemples:
a := TRUE & FALSE;
c := a ? 3 : 5;
b := case
a : 1;
!a : 0;
esac;
Actuellement, je fais une différence entre les affectations contenant un « cas » et d'autres missions. Pour les missions simples que j'ai essayé quelque chose comme ~('case' | 'esac' | ';')
mais antlr plaignais jetons inégalés (comme '='
).
assignment :
NAME ':='! expression ;
expression :
(simple_expression | case_expression) ;
simple_expression :
((OPERATOR | NAME) & ~('case' | 'esac'))+ ';'! ;
case_expression :
'case' .+ 'esac' ';'! ;
J'ai essayé remplacer par ce qui suit, parce que l'eclipse-interprète ne semble pas aimer le ((OPERATOR | NAME) & ~('case' | 'esac'))+ ';'! ;
en raison de la 'and'
.
(~(OPERATOR | ~NAME | ('case' | 'esac')) |
~(~OPERATOR | NAME | ('case' | 'esac')) |
~(~OPERATOR | ~NAME | ('case' | 'esac'))) ';'!
Mais cela ne fonctionne pas. Je reçois
« erreur (139): /AntlrTutorial/src/foo/NusmvInput.g:78:5: complément ensemble est vide | ---> ~ (~ OPÉRATEUR | ~ NOM | ('case' | 'esac'))) EOC!
Comment puis-je l'analyser?
je n'avais pas bien compris la mécanique de l'analyseur et lexer, donc ce que je devrais travailler ^^. Votre solution m'a certainement donné quelques idées, merci. –