[英]Writing grammar rules in SML Using Regular Expressions
我想在SML中将iCalendar转换为CSV。 因此,我需要为此编写语法规则。 我了解可以通过将某些规则定义为datatype
来编写某些规则。 首先,我面临编写正则表达式(终端)规则的问题。
例如,我想用SML编写给定的Regex:
标签→[a-zA-Z0-9-] +
谁能告诉我如何用SML编写此规则?
编辑
到目前为止,我已经声明了一个数据类型variables
,该变量表示语法的各种变量。
datatype variables = Label of String
我已经声明了一个函数isLabel
。 如果它满足给定的正则表达式(通过检查ASCII值是否在给定的范围内),则将其作为输入s
(类型为string
)并返回Label(s)
,否则引发异常。 我感到我已经找到解决方法。
可以在datatype variables.
类似地定义语法的其他符号/ datatype variables.
有关正在使用的SML / NJ正则表达式库的示例,请参见《 使用标准ML进行Unix编程》(第163页)。
添加SML / NJ库。 在smlnj REPL中使用:
CM.make "$/regexp-lib.cm"
制作一个正则表达式引擎:
structure RE = RegExpFn (structure P = AwkSyntax
structure E = BackTrackEngine)
定义label
:
val label = RE.compileString "[a-zA-Z0-9-]+"
定义目标:
val target = "ab9A-f"
将标签与目标匹配:
val match = StringCvt.scanString (RE.find label) target
根据程序逻辑从match
提取值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.