PLY从LexToken列表中解析

时间:2015-03-29 03:32:03

标签: python parsing yacc lex ply

我想改变我的词法分析器,用lexer创建的LexToken列表进行解析。 我的词法分析器解析代码并创建一个列表,其中所有令牌类型为CHAR,我想将其更改为类型为LETTER的令牌列表。 (这是一个例子) 这是我想要做的一个例子:

# My code to parse
code = "my text"

# My only token
tokens = ("CHAR",)

# I want to change all token CHAR to LETTER
t_CHAR = r'.{1}'

# My lexer
lexer = lex.lex()

lexer.input(code)

# My list of LexToken
tokens_list = []

# This change all token type to LETTER
for t in lexer:
    # t return LexToken object
    t.type = 'LETTER'

    tokens_list.append(t)

# My parser rules
# [...]
# [...]
# My parser build from a LexToken list
parser = yacc.yacc(myLexTokenList=tokens_list)

# Parse the code
parser.parse(code)

我怎么不能这样做?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

code = "my text"
tokens = ("CHAR",)

def t_CHAR(t):
    r'.{1}'
    t.type = 'LETTER'

lexer = lex.lex()
lexer.input(code)

parser = yacc.yacc()

# Parse the code
parser.parse(code)

答案 1 :(得分:0)

此外,parser.parse可以与tokenfunc参数一起使用

tokens = [...]

def token_func():
   if len(tokens):
       return tokens.pop(0)

parser = yacc.yacc()
parser.parse(code, tokenfunc = token_func)