gpt4 book ai didi

grammar - 命名语法规则的元对象规则是什么

转载 作者:行者123 更新时间:2023-12-04 13:21:55 26 4
gpt4 key购买 nike

this issue 所示,一些标记名称与语法的类层次结构中的方法名称冲突(包括 MatchCaptureCoolAny 和显然 My .)。例如,`Mu.item

grammar g {
token TOP { <item> };
token item { 'defined' }
};
say g.parse('defined');

发出这样的错误:
Too many positionals passed; expected 1 argument but got 2␤  
in regex item at xxx

item is part of Any s methods, too ;我没有在其他类中发现任何其他方法的名称通常失败,但是没有定义子类(除了 item );大多数是乘数或实际定义为 method .

当像 TWEAK 这样的子方法时也会发生这种情况的 BUILD用于 token 名称,但在这种情况下的错误是不同的:
Cannot find method 'match': no method cache and no .^find_method␤
at xxx

但是,其他子方法如 FALLBACK完全没有问题:
grammar g { 
token TOP { <FALLBACK> };
token FALLBACK { 'defined' }
};
say g.parse('defined') # OUTPUT: «「defined」␤ FALLBACK => 「defined」␤»

Grammar 的类层次结构中的其他一些方法也是如此,例如 rand 或者,一般来说,大多数方法都是这样定义的。

有问题的名称似乎有一个共同点,即它们被声明为 sub。但情况并非总是如此: CREATE 最初导致整个问题的 被声明为 method .所以我完全不清楚应该避免哪些名称,哪些可以合法使用。有人可以澄清吗?

最佳答案

另请注意,语法中的 FALLBACK 标记执行与 FALLBACK method 类似的功能。在类里面。当在语法中遇到未知标记时,会使用标记名称调用它。

稍微改变你的例子:

grammar g { 
token TOP { <blah> };
token FALLBACK($name) { {note "$name called" } 'defined' }
};
say g.parse('defined')

生产
blah called
「defined」
blah => 「defined」

关于grammar - 命名语法规则的元对象规则是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50545534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com