Ste*_*eak 14 python yacc ply lexer
我的目标是像Python一样解析字符串.
问题:如何编写lex以支持以下内容:
"string..."'string...'"""multi line string \n \n end"""'''multi line string \n \n end'''一些代码:
states = (
('string', 'exclusive'),
)
# Strings
def t_begin_string(self, t):
r'(\'|(\'{3})|\"|(\"{3}))'
t.lexer.push_state('string')
def t_string_end(self, t):
r'(\'|(\'{3})|\"|(\"{3}))'
t.lexer.pop_state()
def t_string_newline(self, t):
r'\n'
t.lexer.lineno += 1
def t_string_error(self, t):
print("Illegal character in string '%s'" % t.value[0])
t.lexer.skip(1)
我目前的想法是创建4个独特的状态,将匹配4个不同的字符串案例,但我想知道是否有更好的方法.
谢谢你的帮助!
尝试使用pyparsing 模块。使用此模块,您可以轻松地解析具有良好样式的字符串,而无需使用正则表达式。
下面的示例应该可以帮助您解析诸如"string..."and"""string"""之类的表达式。
from pyparsing import Word, OneOrMore, alphas
string = """string"""
w = OneOrMore('\"') + Word(alphas + '.') + OneOrMore('\"')
w.parseString(string)
Run Code Online (Sandbox Code Playgroud)