在Flex中定义模板

时间:2018-11-24 11:12:05

标签: compilation flex-lexer lexical-analysis lexical

我想在flex中定义一个“ KEYER”,它是“ []”中的一个“ KEY”。 “ KEY”以字母和一串字母,数字和以下字符开头:“〜_'?$。-”。 我发现:

keyChar         ([a-zA-z0-9~_'?$. \-])
letter          ([a-zA-Z])
key             ({letter}{keyChar}+)
keyer           ("["{key}"]") 

和:

<*>{keyer}        print("KEYER");

以某种方式输入:

[keyer1] [keyer2] [keyer 3]

被读为一个KEYER,而不是三个。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您在A-z的模式中写了A-Z而不是keyChar[A-z]包含Za之间的字符,并包含方括号。

总的来说,最好在不需要时避免使用范围表达式。我会写:

keyChar         ([[:alnum:]~_'?$. -])
key             ([[:alpha:]]{keyChar}+)
keyer           ("["{key}"]")