请求实现过滤语言Token匹配:匹配列表片段并返回未匹配Token
开发自定义过滤语言Linter的Token匹配功能
最近我受委托为某供应商使用的自定义过滤语言开发一款代码检查工具(Linter),目前已经完成了Token化的核心步骤,现在需要实现完整Token序列与Token片段的匹配逻辑,最终返回未匹配的Token。
示例过滤规则
先给大家展示下目标过滤语言的示例规则:
({HL7:MSH.21-1} != 'ADT') and ({HL7:MSH.4-1} != 'TRI') and ( or ({HL7:MSH.21-1} == 'LAB') or ({HL7:MSH.21-1} == 'RAD') or ({HL7:MSH.21-1} == 'TRN') )
已完成的Token化工作
我已经成功将上述规则解析成了结构化的Token序列,示例片段如下:
[$, (, {, HL7, :, MSH, ., 21, -, 1, }, !=, ', ADT, ', ), $, and, $, (, {, HL7, :, MSH, ., 4, -, 1, }, !=, ', TRI, ', ), $, and, $, (, $, or, (, {, HL7, :, MSH, ., 21, -, 1, }, ==, ', LAB, ', ), $, ...]
(注:$在这里作为Token之间的分隔符使用)
当前需要实现的核心功能
现在要落地的匹配逻辑需求很明确:
- 接收两个输入:完整Token列表和待匹配的Token片段列表
- 执行匹配逻辑(可根据需求选择精确位置匹配或内容匹配)
- 返回所有未被匹配到的Token:包括完整列表中不在片段内的Token,以及片段中无法在完整列表找到对应项的Token
内容的提问来源于stack exchange,提问作者Verscon
相关产品推荐
相关产品推荐

