Как использовать символы / знаки препинания в дискриминационных союзах - PullRequest
3 голосов
/ 17 июня 2010

Я пытаюсь создать различающееся объединение для части речевых тегов и других меток, возвращаемых синтаксическим анализатором естественного языка.

Обычно в C # / Java для них используются либо строки, либо перечисления, но в F # более подходящими являются дискриминационные объединения, потому что это разные значения только для чтения.

В справочнике по языку я обнаружил, что этот символ ``...`` может использоваться для разделения ключевых слов / зарезервированных слов. Это работает для

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

Однако теги содержат такие символы, как $, например,

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

``...`` не работает для WP $ или символов типа (

Кроме того, у меня есть интересная проблема, заключающаяся в том, что синтаксический анализатор возвращает `` в качестве значимого символа, поэтому мне также необходимо его избежать.

Есть ли другой способ сделать это, или это просто невозможно с дискриминационным союзом?

Сейчас я получаю сообщения об ошибках типа

  • Неверное имя пространства, имени модуля, типа или объединенного регистра
  • Дискриминационные случаи объединения и ярлыки исключений должны быть в верхнем регистре.

Полагаю, я мог бы как-то переопределить toString для этих глупых случаев и заменить символы каким-либо буквенно-цифровым эквивалентом?

Ответы [ 2 ]

1 голос
/ 17 июня 2010

Исходя из моего опыта, идентификаторы двойных обратных кавычек полностью поддерживаются только в элементах let Bindings или type. Таким образом, это означает, что вы можете поместить любую последовательность символов внутрь (за исключением символа @, который зарезервирован для F # codegen).

Когда вы хотите использовать их в качестве идентификаторов в определении случаев модуля, типа или DU, это не очень хорошо, так как некоторые символы не поддерживаются.

например. ., /, *, +, $, [, ], \ или & генерируют ошибку «Неверное имя пространства имен модуля, типа или объединения» .

1 голос
/ 17 июня 2010

В спецификации неясно, какие символы могут быть экранированы в двойных обратных чертах в каких контекстах.

Я думаю, что вам лучше всего использовать стандартные идентификаторы для случаев DU и переопределить ToString, как вы предлагаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...