我正在尝试使用 PLY 为用于生成 linux 内核配置选项的 Kconfig 语言实现 python 解析器。
有一个名为 source 的关键字执行包含,所以我所做的是当词法分析器遇到这个关键字时,我更改词法分析器状态以创建一个新的词法分析器,它将对源文件进行 lex:
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”返回一些东西......
也许应该使用克隆功能......
谢谢