Flex / Bison匹配2种不同的图案,它们之间没有空格

时间:2014-02-26 11:04:00

标签: regex bison yacc lex flex-lexer

我是Flex和Bison的初学者,我有一个问题,因为regexp领域对我来说是新的。

我有像“LOL TATA 93.00”那样的字符串扫描 但问题是,白色空间是两个带字母的单词之间的强制性,但是单词与字母/单词和数字之间是可选的。 我可以有类似的字符串 “LOL TATA93.00” “LOL TATA 93.00” 但绝不是“LOLTATA 93.00”。

我的问题是,当有空格时我可以轻松扫描和分析。 (找到LOL然后TATA然后93.00) 但是当我有TATA93.00时,它会失败,它需要TATA93.00作为1个单词,但我希望它首先将TATA识别为单词,然后将93.00识别为另一个单词。

我不能像[A-Z] + [0-9。] +那样在Flex文件中添加规则,因为如果我必须提供所有可能性,它将永远不会结束。

我的问题是:Bison是否能够将TATA93.00视为我分别由[A-Z] {4}和[0-9。] +定义的2个单词?

1 个答案:

答案 0 :(得分:3)

flex始终识别与模式最长的匹配。所以如果你的模式是:

[A-Z]+
[0-9.]+

并且(当前)输入为LOLTATA93.00,然后flex将匹配LOLTATA,然后匹配93.00,这似乎是您想要的。假设你忽略了空格,那么输入LOLTATA 93.00就会发生同样的事情。

您需要更准确地了解您认为的“单词”。最多四个字母长吗?它可以包含数字吗? (我认为第二个问题的答案是“不”,但问题并不清楚。)只有精确地确定你想要匹配的东西才能写出一个精确正确的模式来匹配它。