.someDiv { width:100%; height:100%; ... more properties ... }
如何在我的解析器中组成一个与上面的字符串匹配的规则?
对我来说似乎不太可能,因为你无法在规则中定义无限数量的属性?有人可以澄清一下,你如何使用FsLex
和FsYacc
做这样的事情?
答案 0 :(得分:2)
如果您正在使用FsLex和FsYacc,那么您可以将{ ... }
内的属性解析为属性列表。假设你有一个能够正确识别所有特殊字符的词法分析器,并且你有一个解析个别属性的规则,你可以编写如下内容:
declaration:
| navigators LCURLY propertyList RCURLY { Declaration($1, $3) }
| navigators LCURLY RCURLY { Declaration($1, []) }
propertyList:
| property SEMICOLON propertyList { $1::$2 }
| property { [$1] }
property:
| IDENTIFIER COLON values { Property($1, $3) }
declaration
规则解析整个声明(您需要为可以在CSS中使用的各种导航器编写解析器,例如div.foo #id
等。)propertyList
规则解析一个属性然后递归调用自身来解析多个属性。
在右侧构建的值将是表示单个属性的值列表。 property
规则解析单个属性分配,例如width:100%
(但您需要完成值的解析,因为它可以是列表或更强制的表达式。)