的PLY一个解析器的几个词法分析器?

我正在尝试使用PLY实现用于Kconfig语言的python解析器,该语言用于生成linux内核的配置选项.

有一个名为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”返回某些信息.

也许应该使用克隆功能…

谢谢

解决方法:

我不了解PLY的详细信息,但是在我构建的其他类似系统中,使用单个词法分析器管理包含文件堆栈是最有意义的.因此,词法分析器将返回统一的令牌流,并在遇到遇到的文件时打开和关闭包含文件.

上一篇:java-什么是合适的词法生成器,可用于从许多语言源文件中剥离标识符?


下一篇:是否有JavaScript词法分析器/令牌生成器(在PHP中)?