2012-01-31 87 views
1

我是这样做的:为什么不能LEX识别我的正则表达式定义

/* regular definitions */ 

    DECLARATIONS    declarations 
    ENDDECLARATIONS   (enddeclarations) 
    INT      (int) 
    METHOD     (method) 
    PROGRAM     (program) 

而且

{DECLARATIONS}   {yycolumn+=yyleng;return (DECLARATIONSnum);} 

承认它,但我发现他们不承认... ..如果我这样做:

"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 

程序,类应该被承认为一个保留字,但它们不被识别....

+0

?提供一个完整的.l文件来演示这个问题 - 当我从你的片段中构建一个文件时,它工作得很好,可以识别关键字,而不管它们在哪个表单中。 – 2012-01-31 21:58:31

+0

@ChrisDodd它是lex版本2.5.4。整个文件有点太长了......这个错误是否有可能来自该版本? – faz 2012-01-31 22:24:37

回答

4
DECLARATION    declarations 

单数

{DECLARATIONS}   {yycolumn+=yyleng;return (DECLARATIONSnum);} 

复数

您正在使用什么版本的lex的
+0

谢谢,但实际上它似乎不是关键问题,实际上它不能识别这些定义中的任何一个......而对于“声明”标记,它在我做出复数右后仍然不起作用 – faz 2012-01-31 21:25:46

+0

模式的一部分?如果是的话,他们应该在引号中,如果不是这样,似乎不是他们的理由。 – Kevin 2012-01-31 21:32:05

+0

请向我们展示您正在使用什么输入,您如何分析它以及如何解析它的示例。 – Kevin 2012-01-31 21:34:20