如何解决使用 Pest.rs,如果 PUSH 是可选的,如何避免“在空堆栈上调用 peek”?
Pest.rs 能够推送和查看堆栈。这在用户提供定界符时很有用,例如 Perl 和 PostgreSQL(双美元语法)中的自定义引用。如果项目可能不在堆栈中,我该怎么做。例如,Exim 配置文件指出,
也可以使用换行符和其他控制字符(代码值小于 32 的字符,加上 DEL)作为列表中的分隔符。 必须在处理列表时按字面意思提供此类分隔符。对于字符串扩展的选项,您可以使用普通转义序列编写分隔符。这将在字符串被解释为列表之前由扩展器处理。例如,如果一个以换行符分隔的域列表是通过查找生成的,您可以直接通过这样的一行来处理它:
chromatic = ['C','C#','D','D#','E','F','F#','G','G#','A','A#','B','C','B']
def major(tom):
major_scale = [2,2,1,1]
step = 0
t = chromatic.index(tom)
m = []
while len(m) < 8:
m.append(chromatic[t])
if len(m) == 8:
break
t += major_scale[step]
step += 1
return m
x = major('D')
print(x)
您可以在此处看到覆盖 domains = <\n ${lookup mysql{.....}}
的默认分隔符的令牌 <\n
是可选的。你可以看到这里的语法本质上是,
:
但是当我跑步时,我得到了,
peek 在空栈上被调用
无论如何,是否可以使用 PEG 来提供此操作,以便将列表作为字符串呈现给用户,但作为元素标记的实际列表?
解决方法
我已经开始采用的一种方法是确保 PUSH
始终发生。甚至似乎可选的 PUSH
应该是编译器错误,
而不是
~ PUSH(list_sep)?
这样做,
~ PUSH(list_sep?)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。