检查结构(struct)的 Lex 程序

Lex program to check the structure(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/

您的模式中有一个 unquoted/unescaped space。 Lex 使用 spaces 将模式与动作分开,因此它认为 ("struct")" "({iden})+ 是您的模式而您的 C 代码是:

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

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