我对 GF 的资源语法库还不熟悉,但我想对“年初至今”及其变体(“年初至今”、“今年到目前为止”、“每年”等)等时间表达进行建模。
“今年迄今为止”的词性是什么?我该如何在 GF 的 RGL 中表示“今年迄今为止”?“今年迄今为止”应该是 AP、Adv 还是其他类别?
这是我的第一次尝试:
oper YearToDate : AP = mkAP (mkA "year-to-date") ;
但问题是,这会将短语“年初至今”硬编码为字符串。这意味着其组成部分不可修改(“年初至今”),我不确定如何解释所有变体。
最终,最方便的 RGL 类别取决于您想要如何使用它。如果您查看修饰 CN(“普通名词”)的 RGL 概要,您会发现 AP 和 Adv 都可以修饰 CN,但在英语中,它们将使用不同的词序。Adv 是后置修饰语(house [on the hill]:Adv),而 AP 是前置修饰语([big]:AP house)。根据这些信息,AP 是更好的选择。
在我看来,这些看起来像是不同的词汇条目,因此它们作为不同的函数是有道理的。GF 中的“变体”一词表示自由变体,即“year-to-date”、“year up to now”和“yearly”这几个词真正 100% 可以互换,虽然这三个词都会被解析,但只有其中一个会被线性化。通常你不想以这种方式处理变体;相反,你会将单词作为 GF 语法中的不同词汇条目,但外部应用程序会控制在哪种情况下将哪些单词视为可互换。
也就是说,如果您希望拥有在运行时根据基本单词创建新变体的函数,这绝对是可能的 — 尽管您的特定示例在运行时构建起来有点丑陋,但您需要访问内部内容而不是使用 RGL API。但这肯定是可能的。
我只是在这里粘贴一个示例语法,如果这不是你想要的,请随时要求澄清或指出。
抽象语法
具体语法
语法输出
在 GF shell 中测试如下: