C语言生成lex文件程序编译报lvalue required赋值左值错误如何解决
C代码报错原因与修复方案
错误原因
报错来自getChar函数的条件判断行:if ((nextChar = getc(in_fp)) = EOF),问题出在运算符误用:
- C语言中
=是赋值运算符,要求左侧必须是可修改的左值(即有对应内存地址的变量),而(nextChar = getc(in_fp))是表达式返回的临时右值,不支持被赋值,因此编译器抛出「lvalue required as left operand of assignment」错误。 - 除此之外原有逻辑也存在错误:你实际需要判断的是读取到的字符不等于EOF,才进入字符类型判断分支,原代码的写法逻辑完全相反。
修复方法
将条件判断中的第二个=替换为不等于判断符!=即可,修改后的完整函数代码如下:
/* getChar - a function to get the next character of input and determine its character class */ void getChar() { if ((nextChar = getc(in_fp)) != EOF) { if (isalpha(nextChar)) charClass = LETTER; else if (isdigit(nextChar)) charClass = DIGIT; else charClass = UNKNOWN; } else { charClass = EOF; } }
修正后运行逻辑为:先从输入文件读取字符赋值给nextChar,如果读取结果不是EOF(有效字符)则判断字符类别,否则标记读取到文件结束符,符合词法分析的常规逻辑。
内容的提问来源于stack exchange,提问作者Bella
相关产品推荐
相关产品推荐

