代码之家  ›  专栏  ›  技术社区  ›  Xethen

用C语言进行Lex编码

  •  0
  • Xethen  · 技术社区  · 10 年前

    我想使用Lex获取和打印双引号内的文本。

    ["]?([A-Z]*[a-z]*[0-9]*)*["]? {
    printf("STR(%s ),yytext");
    return 1;
    }
    

    我用了这个,但有些地方我想不通。

    例子:

    输入

    "CNG230 ASN1 Average"
    

    输出

    STR("CNG230 ASN1 Average")
    

    示例2:

    输入

     "CNG230/492 Global average"
    

    输出

     STR("CNG230/492 Global average")
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   user207421    10 年前

    你实际上并没有说你的任何一个例子有什么问题,我假设

    printf("STR(%s ),yytext");
    

    只是一个拼写错误

    printf("STR(%s )",yytext);
    

    但我可以看到两个问题。

    1. 如果您正确指定了问题,那么只要不是另一个报价,您就不在乎报价中的内容。所以你的规则减少到

      \"[^"]*\" { ... }
      
    2. 如果没有规则匹配,默认操作是回显输入。因此,您需要另一个规则来使用与此规则不匹配的所有内容。之后放置:

      .|\n {}
      
        2
  •  0
  •   Jonathan Leffler    10 年前

    您的主要问题似乎是您的模式不允许空格作为有效字符。你也不需要对你的匹配如此复杂:

    ["]?[A-Za-z0-9 ]*["]? {
        printf("STR(%s)\n", yytext);
        return 1;
    }
    

    注意,我还提供了 printf() 并在末尾输出一个换行符,这样您就可以及时看到信息。