尽管文档说明使用
以下是一个简化的测试。在一个模块文件中:
<.foo>
代替<foo>
来调用标记/规则/正则表达式将使它们不捕获,但似乎在范围方面存在差异,但我不确定这是否是有意的。以下是一个简化的测试。在一个模块文件中:
unit module Foo;
my token y { y }
my token a is export { x <y> }
my token b is export { x <.y> }
在另一个脚本文件中:
grammar A {
use Foo;
token TOP { <a> }
}
grammar B {
use Foo;
token TOP { <b> }
}
如果我们调用A.parse("xy")
一切都会按预期运行,但是调用B.parse("xy")
会导致错误No such method 'y' for invocant of type 'B'
。这是预期的行为还是潜在的错误?
grammar g { my method foo {} }
中,foo
可以合理地被称为“语法方法”。我知道你的意思。我也没有想到过。话虽如此,我仍然处于从惊讶到新推测的第一阶段。显然,它可以朝任何方向发展,Larry 确保了可以朝任何方向发展。但如果是另一种方式呢?我注意到的一件事是,按照现有的规定,只需在现有的规则声明中添加一个my
就可以将规则调用从后期绑定转换为早期绑定。 - raiphmy rule bar
是在语法的内部作用域之外创建的,但它优先于该内部作用域中的内容。好处是我现在做的可能不是最常见的,而且很可能只限于模块开发人员:我基本上创建了一个导入令牌的模块,以进行明确的封装(角色混合是jnhtn最初建议的方法,但我不喜欢那里潜在的歧义方法名称[尽管我知道它可以被澄清],并且它不允许在语法之外使用令牌)。 - user0721090601