如果我有一个关键字,一旦遇到关键字,我怎样才能获取它,只需抓住该行的其余部分并将其作为字符串返回?一旦遇到行尾,就返回该行的所有内容。
以下是我正在查看的专栏:
description here is the rest of my text to collect
因此,当词法分析器遇到描述时,我希望“这是我要收集的其余文本”作为字符串返回
我定义了以下内容,但它似乎抛出了一个错误:
states = (
('bcdescription', 'exclusive'),
)
def t_bcdescription(t):
r'description '
t.lexer.code_start = t.lexer.lexpos
t.lexer.level = 1
t.lexer.begin('bcdescription')
def t_bcdescription_close(t):
r'\n'
t.value = t.lexer.lexdata[t.lexer.code_start:t.lexer.lexpos+1]
t.type="BCDESCRIPTION"
t.lexer.lineno += t.valiue.count('\n')
t.lexer.begin('INITIAL')
return t
这是返回错误的一部分:
File "/Users/me/Coding/wm/wm_parser/ply/lex.py", line 393, in token
raise LexError("Illegal character '%s' at index %d" % (lexdata[lexpos],lexpos), lexdata[lexpos:])
ply.lex.LexError: Illegal character ' ' at index 40
最后,如果我想为多个令牌使用此功能,我该如何实现?
感谢您的时间
答案 0 :(得分:0)
为什么你需要在没有进一步信息的情况下使用词法分析器/解析器,这是不明显的。
>>> x = 'description here is the rest of my text to collect'
>>> a, b = x.split(' ', 1)
>>> a
'description'
>>> b
'here is the rest of my text to collect'
答案 1 :(得分:0)
您的代码没有大问题,事实上,我只是复制您的代码并运行它,它运作良好
import ply.lex as lex
states = (
('bcdescription', 'exclusive'),
)
tokens = ("BCDESCRIPTION",)
def t_bcdescription(t):
r'\bdescription\b'
t.lexer.code_start = t.lexer.lexpos
t.lexer.level = 1
t.lexer.begin('bcdescription')
def t_bcdescription_close(t):
r'\n'
t.value = t.lexer.lexdata[t.lexer.code_start:t.lexer.lexpos+1]
t.type="BCDESCRIPTION"
t.lexer.lineno += t.value.count('\n')
t.lexer.begin('INITIAL')
return t
def t_bcdescription_content(t):
r'[^\n]+'
lexer = lex.lex()
data = 'description here is the rest of my text to collect\n'
lexer.input(data)
while True:
tok = lexer.token()
if not tok: break
print tok
结果是:
LexToken(BCDESCRIPTION,' here is the rest of my text to collect\n',1,50)
所以也许你可以查看代码的其他部分
如果我想要这个功能用于多个令牌,那么你可以简单地捕获单词,当这些令牌中出现一个单词时,开始通过上面的代码捕获剩余的内容。