GATE:将 Token.string 与宏进行比较

GATE: comparing Token.string to Macro

我想要的是将 'Token.string' 与定义的宏进行比较。

我尝试了什么:

Macro: ADDRESSING_NOUN
({Token.kind == word, Token.string ==~ "(?i)(sir|madam)"})

Rule: Name
(
  {Token.kind == word, Token.string !=~ ADDRESSING_NOUN}
)

遗憾的是,这不起作用。

那么有没有办法比较它们?

这不是您可以在 Jape 规则中使用宏的方式。

这里的宏是为了简化规则,实际上在 Jape 编译时被那里的内容所取代,例如你应该写这样的东西:

Macro: ADDRESSING_NOUN
({Token.kind == word, Token.string ==~ "(?i)(sir|madam)"})

Rule: Name
(ADDRESSING_NOUN):name

将被触发的规则是

 ({Token.kind == word, Token.string ==~ "(?i)(sir|madam)"}):name

Ian Roberts 通过 Gate mailing list 回答了我的问题。

他的回答:

Template: addressing = "(?i)(sir|madam)"

Rule: Name
({Token.kind == word, Token.string !=~ [addressing]})