C 为什么可以';lex无法识别我的正则表达式定义
我是这样做的:C 为什么可以';lex无法识别我的正则表达式定义,c,lex,C,Lex,我是这样做的: /* regular definitions */ DECLARATIONS declarations ENDDECLARATIONS (enddeclarations) INT (int) METHOD (method) PROGRAM (program) 及 但我发现他们没有
/* regular definitions */
DECLARATIONS declarations
ENDDECLARATIONS (enddeclarations)
INT (int)
METHOD (method)
PROGRAM (program)
及
但我发现他们没有被认出。。。。。如果我这样做:
"declarations" {yycolumn+=yyleng;return (DECLARATIONSnum);}
成功了。我真的不明白为什么
示例输入如下所示:
program p2;
class Test {
method void main()
declarations
int x;
program p2
5 1 SEMInum
class Test
6 1 LBRACEnum
method void main
7 1 LPARENnum
现在是这样的:
program p2;
class Test {
method void main()
declarations
int x;
program p2
5 1 SEMInum
class Test
6 1 LBRACEnum
method void main
7 1 LPARENnum
程序、类应被识别为保留字,但它们不被识别
DECLARATION declarations
奇异的
{DECLARATIONS} {yycolumn+=yyleng;return (DECLARATIONSnum);}
复数
奇异的
{DECLARATIONS} {yycolumn+=yyleng;return (DECLARATIONSnum);}
复数谢谢,但实际上这似乎不是关键问题,实际上它无法识别这些定义中的任何一个。。。对于“声明”标签,在我做了复数后,它仍然不起作用。你是说,帕伦夫妇是模式的一部分吗?如果是这样的话,它们应该在引号中,如果不是的话,它们似乎没有理由。请向我们展示一个你正在使用的输入的示例,你希望它如何被解析,以及它是如何被解析的。我重新编辑了这个问题,当前的问题是它无法识别以这种方式编写的{声明}谢谢,但实际上,这似乎不是关键问题,实际上它无法识别这些定义中的任何一个。。。对于“声明”标签,在我做了复数后,它仍然不起作用。你是说,帕伦夫妇是模式的一部分吗?如果是这样的话,它们应该在引号中,如果不是的话,它们似乎没有理由。请向我们展示一个示例,说明您正在使用什么输入,您希望它如何被解析,以及它是如何被解析的。我重新编辑了这个问题,当前的问题是它无法识别以这种方式编写的{声明}您使用的是什么版本的lex?提供一个完整的.l文件来演示这个问题——当我从您的片段构建一个时,它工作得很好,可以识别关键字,而不管它们以何种形式出现。@chrisdd它是lex版本2.5.4。整个文件有点太长了…这个错误是否可能来自版本?您使用的是什么版本的lex?提供一个完整的.l文件来演示这个问题——当我从您的片段构建一个时,它工作得很好,可以识别关键字,而不管它们以何种形式出现。@chrisdd它是lex版本2.5.4。整个文件有点太长…是否有可能此错误来自版本?