J'essaie d'implémenter un analyseur python en utilisant PLY pour le langage Kconfig utilisé pour générer les options de configuration pour le noyau Linux.plusieurs lexeurs pour un parseur avec PLY?
Il y a un mot-clé source appelé qui effectue une inclusion, donc ce que je fais est que lorsque le lexer rencontre ce mot-clé, je change l'état lexer pour créer une nouvelle lexer qui va lex le fichier d'origine:
def t_begin_source(t):
r'source '
t.lexer.begin('source')
def t_source_path(t):
r'[^\n]+\n+'
t.lexer.begin('INITIAL')
global path
source_lexer = lex.lex(errorlog=lex.NullLogger())
source_file_name = (path + t.value.strip(' \"\n'))
sourced_file = file(path + t.value.strip(' \"\n')).read()
source_lexer.input(sourced_file)
while True:
tok = source_lexer.token()
if not tok:
break
ailleurs j'ai cette ligne
lexer = lex.lex(errorlog=lex.NullLogger())
Ceci est le lexer « principal » ou « root » qui va être appelé par l'analyseur.
Mon problème est que je ne sais pas comment dire l'analyseur d'utiliser un lexer différent ou de dire la « source_lexer » pour retourner quelque chose ...
Peut-être la fonction clone doit être utilisé ...
Merci
Vous pouvez utiliser la méthode 'input' de la lexer pour réinitialiser le lexer et fournir une nouvelle entrée. Après le fichier inclus est fait, vous devez revenir au fichier d'origine où vous avez laissé (plus ou moins.) –
oui, mais je ne sais pas comment retourner ces jetons à l'analyseur. – LB40