SKIP:{ " " | "\t" | "\n" | "\r" | "\r\n"}
时间: 2024-05-24 15:07:54 浏览: 48
SKIP:{ " " | "\t" | "\n" | "\r" | "\r\n"} 是Ply库中Lex模块的一个规则。它的作用是在解析程序时,跳过输入中的空格、制表符、换行符等空白字符。这样可以使得我们在编写词法解析器时,能够更加简洁、高效地解析输入的字符串,从而更好地完成语义解析的任务。以下是一个使用PLY实现的SKIP规则的示例代码:
```python
import ply.lex as lex
tokens = (
'NAME',
'NUMBER',
)
t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*'
t_NUMBER = r'\d+'
# 定义SKIP规则
t_ignore = ' \t\n\r'
# 定义错误处理函数
def t_error(t):
print("Illegal character '%s'" % t.value)
t.lexer.skip(1)
# 构建lexer
lexer = lex.lex()
# 测试代码
data = 'hello 123 world'
lexer.input(data)
for token in lexer:
print(token)
```
在这个例子中,我们定义了两个token:NAME和NUMBER。对于NAME,它的正则表达式为“[a-zA-Z_][a-zA-Z0-9_]*”,表示由字母和下划线组成的标识符;对于NUMBER,它的正则表达式为“\d+”,表示一个或多个数字。我们还定义了一个SKIP规则“t_ignore = ' \t\n\r'”,用来跳过空格、制表符、换行符等空白字符。在解析输入字符串时,lexer会自动忽略这些空白字符,并且不生成任何token。最后,我们使用lexer.input()方法将输入字符串传入lexer中,并使用for循环遍历lexer生成的所有token,将它们打印出来。运行这个程序,输出如下:
```
LexToken(NAME,'hello',1,0)
LexToken(NUMBER,'123',1,6)
LexToken(NAME,'world',1,10)
```
阅读全文