问题描述
我正在尝试创建程序来检查诸如 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 代码,这就是您收到编译错误的原因。要解决此问题,请删除空格,将其放在引号中或使用反斜杠将其转义。