如何在PetitParser中创建一个空格但不是行分隔符的解析器?

时间:2013-06-28 14:22:04

标签: whitespace dart petitparser

PetitParserDart中有一个内置的whitespace()解析器,用于检查字符:

(9 <= value && value <= 13) || (value == 32) || (value == 160)
  || (value == 5760) || (value == 6158) || (8192 <= value && value <= 8202) || (value == 8232)
  || (value == 8233) || (value == 8239) || (value == 8287) || (value == 12288)

现在我想要一个whitespace()解析器的自定义空白解析器,但不接受行分隔符\n

如何做到这一点,我不想复制和修改whitespace()内的代码。有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

有多种方法可以做到这一点。

重用现有解析器的一种方法是:

char('\n').not().seq(whitespace()).pick(1);

另一种方法是创建一个新的字符模式:

pattern('\t\f\r ');

这与whitespace()接受的所有unicode空格不完全匹配,但对于大多数用例来说可能已足够。或者,您也可以添加unicode范围:

pattern('\t\f\r \u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000');