检查结构(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,将其放在引号中或使用反斜杠将其转义。
我正在尝试创建程序来检查 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,将其放在引号中或使用反斜杠将其转义。