我是JFlex的新手.我已经收集到JFlex是一个解析器生成器.但是,我仍然不清楚以下内容,需要对此进行澄清.
这与使用正则表达式进行模式识别和数据隔离以及使用JFlex的其他好处有何不同.
JFlex对正则表达式有用的任何特定用例.
它是否对文本/ xml文件的一般解析有用?
提前致谢.
JFlex不是解析器生成器,而是扫描器生成器.它标记输入.将它与CUP或BYACC/J等解析器生成器结合使用.
扫描程序和解析器之间存在重要差异:
你的问题:
1)和2)假设您必须将输入的字符流转换为令牌流,并给出以下模式:
[0-9]+(不同于\.下面的内容)则它是无符号整数.发送"INTEGER"到输出.[0.9]+\.[0-9]*则它是无符号浮点数.发送"FLOAT"到输出.请注意,它们共享一个公共前缀.如果要使用正则表达式扫描输入,则必须将它们拆分为公共前缀(除非您希望它非常慢,因为正则表达式很昂贵).在运行时,您必须首先评估前缀,如果匹配,然后评估后面的内容,如果^\.,您有一个积分并将重新开始,如果\.您将不得不评估以下文本是否是浮点的尾数数.如果是这样,你有一个FLOAT.
基本上你必须构建的是一个有限状态自动机,其中状态是决策点并反映到目前为止看到的输入,并且转换是对输入中看到的当前字符的评估.
JFlex(与许多其他扫描程序生成器一样)将允许您通过仅提供正则表达式(基本上)自动生成此类自动机的代码.并将为它生成非常有效的代码.
3)您可以使用生成的扫描程序和生成的解析器来识别任何无上下文的语言.比如编程语言.尽管应该可以用它解析XML(我从未尝试过),但是特定用途的解析器通常用于XML(例如SAX,StAX等等),因为XML具有众所周知的结构,因此不需要以生成一个解析器.
顺便说一句,请记住,您无法使用Regex解析XML.;)
问候.
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |