我正在尝试使用PLY实现Python解析器,用于Kconfig语言的解析。该语言用于生成Linux内核的配置选项。
有一个名为"source"的关键字可以执行包含操作。当词法分析器遇到此关键字时,我会改变词法分析器的状态,创建一个新的词法分析器来对被包含的文件进行词法分析:
有一个名为"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”返回什么...
也许应该使用克隆函数...
谢谢