我的提取字符串的token函数是:
def t_STRING(t): r'\"([^\"]|\\.)*\"' t.value = t.value[1:-1] return t
有个办法是:
t.value=t.value.decode("string-escape")
但是这样并不能处理
\n, \t ,等复杂些的和自定义的转义
根据此文http://inst.eecs.berkeley.edu/~cs164/sp10/TA.d/flex-start-conditions.html,貌似应该用state.
怎么用ply来做这个事情呢 ?
ES = r"""(\\(['"\?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F0-9]+))""" STR = r'\"([^"\\\n]|'+ES+')*\"' @TOKEN(STR) def t_STRING(t): t.value = t.value[1:-1] return t
来自 ANSIC grammer
欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。 温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。