Linuxカーネルの構成オプションを生成するために使用されるKconfig言語のPLYを使用して、pythonパーサーを実装しようとしています。
包含を実行する source というキーワードがあるので、レクサーがこのキーワードに遭遇すると、レクサーの状態を変更して、ソースファイルをレクシングする新しいレクサーを作成します。
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
他のどこかにこの行があります
lexer = lex.lex(errorlog=lex.NullLogger())
これは、パーサーによって呼び出される「メイン」または「ルート」レクサーです。
私の問題は、パーサーに別のレクサーを使用するように指示する方法や、「source_lexer」に何かを返すように指示する方法がわからないことです...
たぶん、クローン機能を使用する必要があります...
ありがとう