2011-05-03 3 views
0

Je cherche un moyen d'analyser juste une partie particulière d'un fichier. Par exemple, permet de voir:Jeton Bison Flex pour chaque jeton non défini lu

if {$cpf_step == "pre_restruct"} { 
create_power_domain  -name domain_GPU_SW \ 
      -shutoff_condition "!$mali_pso_condition_pin" \ 
      -instances "$GPU_SW_instances_list" 
} else { 
create_power_domain  -name domain_GPU_SW \ 
      -shutoff_condition "!$mali_pso_condition_pin" 
}    

Je suis intéressé par les commandes create_power_domain. J'ai une règle avec le jeton différent utilisé dedans. Voici la règle que j'utilise [EDIT] Bien sûr, il y a des choses avant et après cet extrait aswell que d'autres create_power_domain commandes que je suis intéressé par l'analyse syntaxique [/ EDIT]

file :list_of_statement 
; 

list_of_statement: statement 
    | list_of_statement statement 
    ; 

statement: power_domain 
| T_EVERY_OTHER_THING_I_READ 
; 

power_domain: K_CREATE_POWERDOMAIN K_NAME K_IDENTIFIER options_list 

Maintenant, comme vous pouvez le comprendre, je veux vérifier seulement que chaque domaine de puissance correspond à la syntaxe et je ne veux pas m'occuper de tout le reste.

Dans mon tokenizer flex, j'ai essayé
.* {return T_EVERY_OTHER_THING_I_READ; } , mais je me suis souvenu que Lex essaie de trouver la plus longue correspondance expression régulière qui implique que tout va maintenant être un jeton T_EVERY_OTHER_THING_I_READ et je ne peut pas trouver mon K_CREATE_POWERDOMAIN par exemple.

Ma question est alors comment puis-je ignorer tout ce qui ne fait pas partie de la règle qui m'intéresse?

Si vous avez d'autres questions, n'hésitez pas à demander.

Merci

Répondre

1

En supposant que power_domain est délimité par l'espace, tabulation ou retour à la ligne, à l'exclusion de ceux T_EVERY_OTHER_THING_I_READ devraient aider, essayer quelque chose comme [^\n\r\t ]* {return T_EVERY_OTHER_THING_I_READ; } (non testé)

+0

Cela semble faire l'affaire. Je vous remercie. Maintenant, je ne peux que prendre en compte ce que je suis intéressé, je dois juste trouver comment ignorer quelque chose comme un K_NAME en dehors d'un power_domain. Pour l'instant j'ai choisi de l'ajouter comme 'statement: power_domain \t | list_of_identifier \t | K_NAME' mais je vais essayer de trouver simplement comment définir chaque token à un T_EVERY_OTHER_THING_I_READ si je n'ai pas trouvé de K_CREATE_POWERDOMAIN avant! Merci encore – djfoxmccloud

+0

Je retourne sur mon tokenizer et il semble en fait que cette règle ne fonctionne pas bien avec mes autres jetons. Trop d'entre eux sont classés comme T_EVERY_OTHER_THING_I_READ – djfoxmccloud

Questions connexes