我想改变我的词法分析器,用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)
我怎么不能这样做?
答案 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)