FsLex - 2个字符串之间不同

时间:2011-06-30 16:30:55

标签: f# lexical-analysis fslex

我有几个代币:

PNAMEENAME - 两者都是字符串。

现在我想在我的词法分析器中设置2个规则,以匹配这些令牌。

第一条规则PNAME)应该在字符串由字符a-z组成时匹配,并且可选 字符@ /()。

当字符串由字符a-z和可选前缀(#/。)组成时,第二条规则ENAME)应该匹配。

现在我如何在我的词法分析器文件中构成一个只匹配ENAME的规则 - 即使没有前缀?

如果它有任何区别,那么ENAME之后会有一个{字符串,如:(prefix)eName { - 但是这个括号不应该传递给解析器...

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果此问题与your previous question(关于解析CSS)文件有关,那么您应该使用不同的方法。

词法分析器应该只识别简单的令牌,例如#.(令牌名称HASHDOT),花括号(令牌LCURLY和{分别为RCURLY{的{​​1}}以及使用带有任意字符序列}的正则表达式的任何标识符IDENT

其余的处理(例如识别CSS规则a-zA-Z)应该在解析器中完成。在我之前的回答中,我描述了如何解析属性名称列表 - 它假设您有.foo { ... }这是一个语法元素,用于指定HTML元素,例如navigators#name。您可以为这些编写单独的解析规则:

#name .class

有关解析器和解析器的更多信息。词法分析器会看到wikibooks articleChris Smith's blog