J'utilise Cocor pour générer un scanner comme java/analyseur:
Je vais avoir quelques problèmes dans la création d'une expression EBNF pour correspondre à un bloc de code:Parsing un bloc de code avec l'expression EBNF
Je suppose un bloc de code est entouré de deux jetons bien connus: < & et &> exemple:
public method(int a, int b) <&
various code
&>
Si je définis un symbole non terminal
codeblock = "<&" {ANY} "&>"
Si le code à l'intérieur des deux symboles contient un caractère '<', le compilateur généré ne le traitera pas, donnant ainsi une erreur de syntaxe.
Un conseil?
Edit:
COMPILER JavaLike
CHARACTERS
nonZeroDigit = "123456789".
digit = '0' + nonZeroDigit .
letter = 'A' .. 'Z' + 'a' .. 'z' + '_' + '$'.
TOKENS
ident = letter { letter | digit }.
PRODUCTIONS
JavaLike = {ClassDeclaration}.
ClassDeclaration ="class" ident ["extends" ident] "{" {VarDeclaration} {MethodDeclaration }"}" .
MethodDeclaration ="public" Type ident "("ParamList")" CodeBlock.
Codeblock = "<&" {ANY} "&>".
J'ai omis certaines productions pour des raisons de simplicité.
Ceci est ma mise en œuvre réelle de la grammaire. Le bug principal est qu'il échoue si le code dans le bloc contient l'un des symboles '>' ou '&'.
Comment définiriez-vous ANY_WITHIN_BLOCK? – nick2k3
Comment définissez-vous ANY? –
ANY est le jeton "jolly" dans CocoR: il correspond à tous les jetons. – nick2k3