
ID [aA-zZ][aA-zZ-0-9_]* keyword if|else|when|whileinteger [0-9]+real integer\.integer
..但是有一些问题,分析师不能得到一个关键字,例如,如果我给“else”这个词,它将它视为一个ID(我得到一个警告,像规则也不能匹配.
此外,如果我尝试给出一个实数,例如1.2
链接器将其视为整数分隔符整数,而不是真实的.我虽然不擅长regural表达式语言,但我认为对于实数/整数的区分来设置一个规则(“读取一个不以数字结尾的数字.它是一个整数,否则它是一个数字“)但我怎么能把它放在reg中.语言.
Flex是一个词法分析器,它读取输入文件并使用您希望它检查的任何正则表达式检查当前字符串.你必须始终记住驱动其字符串匹配系统的两个基本规则:
>最长的最佳比赛;
>优先规则;
“最长的最佳匹配”告诉Flex,读取输入必须与最长的模式匹配; LBM规则优先工作得更好.
优先级规则告诉Flex,如果输入匹配多于一个正则表达式,则只需考虑第一个正则表达式.
在编写代码时,必须将关键字视为关键字而不是ID,然后您应该在其他任何事情之前编写关键字的正则表达式:如果某些内容与“关键字”正则表达式不匹配,则表示我们正在阅读其他内容,例如ID或函数的名称.
我会写这样的东西:
keyword "if"|"else"|"when"|"while"ID [a-zA-Z][a-zA-Z0-9_-]*nat [0-9]|([1-9][0-9]*)integer [+|-]*{nat}real {integer}[.]{integer} 关键字第一;如果我们不读取关键字,它可能是一个ID;如果只有数字,让我们看看它是什么类型的数字.优先规则会让Flex读取’else’,’if’和其他关键字作为’关键字’标记,最长匹配将确保像1.2这样的数字被视为’真实’而不是两个’nat’被点分隔.
总结以上是内存溢出为你收集整理的在c和正则表达式中使用flex全部内容,希望文章能够帮你解决在c和正则表达式中使用flex所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)