编写一个 lex 程序来检测并计算全部大写字母的单词

问题描述 投票:0回答:1
%{
    int capital_count = 0;
%}

%%
[A-Z]+[^a-z][ \t\n]   { capital_count++; }

.       ;   // Ignore other characters

%%

int main() {
    yylex();
    printf("Number of capital words: %d\n", capital_count);
    return 0;
}

这是我的代码,用于检测全部大写字母的单词,但是当单词是“tODAY”,“ToDAY”,“TOdAY”等类型时,此代码将是错误的。

如何编写检测全大写字母的单词的正则表达式

lex
1个回答
0
投票

大写单词的正则表达式就是

[A-Z]+

问题是它也会匹配不完全大写的单词部分。 为了防止 lex 中出现此类情况,您制定了第二条规则来捕获所有单词

[A-Za-z]+
。 (它需要在大写规则之后。) Lex 总是尝试找到最长的匹配,如果它一次适合多个规则,它会选择最早的一个,因此只有当较长的单词无法通过使用小写字符来匹配时,它才会匹配第一个规则。

© www.soinside.com 2019 - 2024. All rights reserved.