如何使用 Flex 强制执行空格分隔?

问题描述 投票:0回答:1

如何强制使用 Flex 时关键字应以空格分隔?

例如,如果

cat
dog
是关键字,则应接受
cat dog
,但不应接受
catdog

使用尾随上下文(见下文)是可行的,但将其添加到每个关键字感觉不方便且丑陋。有更好的办法吗?

cat/[ \t\n\r] { return CAT; }
dog/[ \t\n\r] { return DOG; }
bison flex-lexer
1个回答
0
投票

通常,您还有另一个匹配非关键字的字母数字序列的规则,可能如下所示:

[a-zA-Z_][a-zA-Z0-9_]' { return IDENTIFIER; }

如果有的话,

catdog
将被识别为标识符,而不是两个关键字(根据最大咀嚼规则)。

如果您的语言没有标识符之类的东西,您仍然可以执行相同的操作来显式将非关键字标记为无效:

[a-z]+ { /* produce an appropriate error message here */ }
© www.soinside.com 2019 - 2024. All rights reserved.