词法分析器是否可以识别两个标记而中间没有空格?

时间:2019-04-02 03:30:31

标签: flex-lexer lexical-analysis

我想使用Flex模拟一个词法分析器。

该程序的一部分将识别由五个字符组成的形状名称,[ABCDE]所有组合,但仅当字母的数量为一,三或四时。在这种情况下,它将打印输入和单词“ shape”。

例如,如果输入为“ A”,“ BCD”,“ CDBE”,则将打印“ A:形状”。我的问题是,给定诸如“ AB”之类的输入并将两个字符粘在一起,如果整体上看,这不是有效的字母数,那么真正的词法分析器会做什么?将“ A”识别为形状,然后将“ B”识别为形状,还是认为它是错误?

1 个答案:

答案 0 :(得分:0)

这取决于规则的编写方式。如果所有有效的单个字母都有一个简单的规则“ [ABCDE]”,则“ AB”将被识别为两个有效的标记“ A”和“ B”。我认为那是不正确的,对吧?

我不是词法分析器和语法分析器的专家。这只是一个粗略的想法。

^[ABCDE]{4}$ { /* do sth. */ return TOKEN4; }
^[ABCDE]{3}$ { /* do sth. */ return TOKEN3; }
^[ABCDE]{1}$ { /* do sth. */ return TOKEN1;}
^.*$         { /* report error or throw the input. */ ; }