检查结构的lex程序(struct)

问题描述

我正在尝试创建程序来检查诸如 struct st{ int j; real i; } 之类的输入是否应该打印正确否则不正确。

但是我有这个错误

    prog.l: In function 'yylex':
gyg.l:10:5: error: expected expression before '{' token

解决方法

LEX 用于创建词法分析器,该分析器将字符序列作为输入并生成符号序列作为输出。在您的示例中,这些符号类似于

STRUCT IDENT { IDENT IDENT ; IDENT IDENT ; }

要分析语法,您需要一个名为 YACC 的不同程序,它是一个解析器生成器。这是关于 LEX 和 YACC 的教程:

https://developer.ibm.com/technologies/systems/tutorials/au-lexyacc/

,

您的模式中有一个未加引号/未转义的空格。 Lex 使用空格将模式与操作分开,因此它认为 ("struct")" "({iden})+ 是您的模式,而您的 C 代码是:

"{"({defs}|({defs})*)"}"";"    {printf(" correct ");}`

显然,第一部分不是有效的 C 代码,这就是您收到编译错误的原因。要解决此问题,请删除空格,将其放在引号中或使用反斜杠将其转义。