3

我正在尝试为自然语言解析器返回的词性标签和其他标签创建一个有区别的联合。

在 C#/Java 中通常使用字符串或枚举来表示它们,但在 F# 中区分联合似乎更合适,因为它们是不同的只读值。

在语言参考中,我发现这个符号 ``...`` 可以用来分隔关键字/保留词。这适用于

type ArgumentType =
| A0 // subject
| A1 // indirect object
| A2 // direct object
| A3 //
| A4 //
| A5 //
| AA //
| ``AM-ADV``

但是,标签包含像 $ 这样的符号,例如

type PosTag =
| CC // Coordinating conjunction
| CD // Cardinal Number
| DT // Determiner
| EX // Existential there
| FW // Foreign Word
| IN // Preposision or subordinating conjunction
| JJ // Adjective
| JJR // Adjective, comparative
| JJS // Adjective, superlative
| LS // List Item Marker
| MD // Modal
| NN // Noun, singular or mass
| NNP // Proper Noun, singular
| NNPS // Proper Noun, plural
| NNS // Noun, plural
| PDT // Predeterminer
| POS // Possessive Ending
| PRP // Personal Pronoun
| PRP$ //$ Possessive Pronoun
| RB // Adverb
| RBR // Adverb, comparative
| RBS // Adverb, superlative
| RP // Particle
| SYM // Symbol
| TO // to
| UH // Interjection
| VB // Verb, base form
| VBD // Verb, past tense
| VBG // Verb, gerund or persent participle
| VBN // Verb, past participle
| VBP // Verb, non-3rd person singular present
| VBZ // Verb, 3rd person singular present
| WDT // Wh-determiner
| WP // Wh-pronoun
| WP$ //$ Possessive wh-pronoun
| WRB // Wh-adverb
| ``#``
| ``$``
| ``''``
| ``(``
| ``)``
| ``,``
| ``.``
| ``:``
| `` //not sure how to escape/delimit this

``...`` 不适用于 WP$ 或 (

另外,我有一个有趣的问题,解析器返回 `` 作为一个有意义的符号,所以我也需要转义它。

有没有其他方法可以做到这一点,或者这是不可能的歧视工会?

现在我遇到了类似的错误

  • 无效的命名空间、模块、类型或联合案例名称
  • 可区分的联合案例和异常标签必须是大写标识符

我想我可以以某种方式覆盖这些愚蠢的情况下的 toString 并用一些等效的字母数字替换符号?

4

2 回答 2

1

该规范似乎并不清楚在什么情况下允许在双反引号中转义哪些字符。

我认为您最好的选择是对 DU 案例使用标准标识符,并ToString按照您的建议进行覆盖。

于 2010-06-16T23:36:27.990 回答
1

根据我的经验,双反引号标识符/似乎仅在 let 绑定或类型成员中完全受支持。这意味着您可以在其中放置任何字符序列(@为 F# codegen 保留的字符除外)。

当您想将它们用作模块、类型或 DU 案例定义中的标识符时,由于不支持某些字符,因此效果不佳。

例如., /, *, +, $, [, ],\& 生成“无效的命名空间、模块、类型或联合案例名称”错误。

于 2010-06-17T00:32:44.223 回答