我有几个代币:
PNAME
和ENAME
- 两者都是字符串。
现在我想在我的词法分析器中设置2个规则,以匹配这些令牌。
第一条规则(PNAME
)应该在字符串由字符a-z组成时匹配,并且可选
字符@ /()。
当字符串由字符a-z和可选前缀(#/。)组成时,第二条规则(ENAME
)应该匹配。
现在我如何在我的词法分析器文件中构成一个只匹配ENAME
的规则 - 即使没有前缀?
如果它有任何区别,那么ENAME
之后会有一个{
字符串,如:(prefix)eName {
- 但是这个括号不应该传递给解析器...
有什么建议吗?
答案 0 :(得分:2)
如果此问题与your previous question(关于解析CSS)文件有关,那么您应该使用不同的方法。
词法分析器应该只识别简单的令牌,例如#
和.
(令牌名称HASH
和DOT
),花括号(令牌LCURLY
和{分别为RCURLY
和{
的{1}}以及使用带有任意字符序列}
的正则表达式的任何标识符IDENT
。
其余的处理(例如识别CSS规则a-zA-Z
)应该在解析器中完成。在我之前的回答中,我描述了如何解析属性名称列表 - 它假设您有.foo { ... }
这是一个语法元素,用于指定HTML元素,例如navigators
或#name
。您可以为这些编写单独的解析规则:
#name .class
有关解析器和解析器的更多信息。词法分析器会看到wikibooks article和Chris Smith's blog。