扫描带有嵌套标记的非定界字符串的语言

时间:2019-02-28 21:12:16

标签: regex parsing flex-lexer lex lexer

我想为具有无分隔字符串的语言创建词法分析器/解析器。
语言的哪一部分是字符串由其前面的命令定义。

例如,它具有如下语句:

pause 5
alert Hello world[CRLF] this contains 'pause' once (1) 

在这种情况下,警报可以以任何字符串结尾,包括关键字和数字。 进一步使事情复杂化的是,文本可能包含我也想分开的标签,例如[CRLF]。 理想情况下,我希望将其分解为:

[PAUSE][INT 5]
[ALERT][STR "Hello world"][CRLF][STR " this contains 'pause' once (1)"]

我目前正在使用flex,但是从我收集的信息来看,flex无法实现这种事情。
如何在这里实现我想要的?

1 个答案:

答案 0 :(得分:1)

(由于您的标签之一是“ regex”,我建议您使用非弹性方法。)

从示例中,您似乎可以做到:

  1. 将每一行与^(\w+) (.+)进行匹配,以获取命令和参数文本,然后
  2. 通过在(\[\w+\])上拆分arguments-text来获取单个参数(假设您的正则表达式库的split函数可以返回splitter-strings和split-strings)。

您的实际情况可能更复杂,诸如flex之类的东西更有意义,但到目前为止我还没有真正看到它。