正则表达式 – 正则表达式与Haskell中的词法分析器
发布时间:2020-12-14 06:03:56 所属栏目:百科 来源:网络整理
导读:我开始使用 Haskell,我正在尝试使用 Alex工具创建正则表达式,我有点迷失;我的第一个不便是编译部分.我如何用Alex编译文件?然后,我认为我必须将alex生成的模块导入我的代码,但不确定.如果有人可以帮助我,我会非常感激! 解决方法 您可以在Alex中指定正则表达
我开始使用
Haskell,我正在尝试使用
Alex工具创建正则表达式,我有点迷失;我的第一个不便是编译部分.我如何用Alex编译文件?然后,我认为我必须将alex生成的模块导入我的代码,但不确定.如果有人可以帮助我,我会非常感激!
解决方法
您可以在Alex中指定正则表达式函数.
例如,Alex中的正则表达式匹配浮点数: $space = [ txa0] $digit = 0-9 $octit = 0-7 $hexit = [$digit A-F a-f] @sign = [-+] @decimal = $digit+ @octal = $octit+ @hexadecimal = $hexit+ @exponent = [eE] [-+]? @decimal @number = @decimal | @decimal . @decimal @exponent? | @decimal @exponent | 0[oO] @octal | 0[xX] @hexadecimal lex :- @sign? @number { strtod } 当我们匹配浮点数时,我们调度到解析函数来操作捕获的字符串,然后我们可以将其作为解析函数包装并向用户公开: readDouble :: ByteString -> Maybe (Double,ByteString) readDouble str = case alexScan (AlexInput 'n' str) 0 of AlexEOF -> Nothing AlexError _ -> Nothing AlexToken (AlexInput _ rest) n _ -> case strtod (B.unsafeTake n str) of d -> d `seq` Just $! (d,rest) 使用Alex进行此正则表达式匹配的一个很好的结果是性能良好,因为正则表达式引擎是静态编译的.它也可以作为使用cabal构建的常规Haskell库公开.有关完整实施,请参阅bytestring-lexing. 关于何时使用词法分析器而不是正则表达式匹配器的一般建议是,如果你有一个你想要匹配的词汇的语法,就像我为浮点所做的那样,使用Alex.如果不这样做,并且结构更加临时,请使用正则表达式引擎. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏
- Vue.js——60分钟webpack项目模板快速入门
- c# – 无法在Web Api 2中的BadRequest上收到错误消息
- ruby-on-rails – 如何将Rails开发服务器设置为webbrick而不
- Flex
- Xcode 7 GM缺少iOS 7模拟器
- XMLSpy编写DTD出错:Character 'D' is grammatical
- objective-c – 归档/取消归档导致initForReadingWithData难
- postgresql 创建数据表。临时表
- ruby-on-rails – 未定义的方法`remote_function’