You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:54:05