问题描述
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?)