首先,我们需要一份C--的Grammar,基于这个Grammar,进行代码的编写:
在这里,INT和FLOAT都是无符号的,也就是说是非负的。其次,对于INT的实现,可以加入八进制和十六进制的实现,FLOAT的实现,可以加入指数形式的实现。这些都是很简单的,将正则表达式写对就OK了。
Flex输入文件包括3个部分,通过“%%”隔开,如下面代码所示:
{definition}
%%
{rules}
%%
{user subroutines}
其中,{definition}是定义部分,实际上就是在给某些后面可能经常用到的正则表达式取一个别名,从而简化词法规则的书写。定义部分的格式一般为:
name definition
如: digit [0-9] 或者 letter [_a-zA-Z]
Flex源代码的第二部分为规则部分。它由正则表达式和相应的响应函数组成,格式为:
pattern {action}
pattern为正则表达式,其书写规则与声明部分的正则表达式相同。action为将要进行的具体操作,这些操作可以用一段C代码表示。Flex将按照这一部分给出的内容依次尝试每一个规则,尽可能匹配最长的输入串。如果有些内容不匹配任何规