如何使用FParsec解析具有不同开始和结束字符的标识符

时间:2014-05-27 13:18:56

标签: f# fparsec

我很难找到解析开头和结尾有不同字符的标识符的最佳方法。例如,让我们说我们的标识符的起始字符可以只是大写和小写,而标识符的中间也可以包括数字和冒号。标识符的结尾可能不是冒号,但可能是撇号。

以下是所有合法标识符:

f, f0, f:', f000:sdfsd:asdf

但以下不是:

0, hello:, he'llo

我无法看到如何最好地处理回溯:中间的冒号很好,但我们需要一些先行来确定我们是否位于标识符的末尾。

编辑:

感谢您的建议。使用正则表达式是一种务实的方法,但我觉得有点令人失望的是,除此之外似乎没有干净/明显的方式。

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式解析器处理此问题

let ident = regex @"[A-Za-z][A-Za-z0-9\:]*[A-Za-z0-9\']"

http://www.quanttec.com/fparsec/reference/charparsers.html

答案 1 :(得分:1)

我也认为你应该使用正则表达式,但我想出了一个不同的模式:

let pattern = regex @"^([a-zA-Z]+[a-zA-Z0-9:]*[a-zA-Z']?)$"

将在第一组中保存您想要的所有匹配。您可以使用在线RegExp tool来验证您的匹配/分组。