【问题标题】:Errors in definitions in Flex and LexFlex 和 Lex 中的定义错误
【发布时间】:2023-02-04 01:13:04
【问题描述】:

我正在为带有玩具关键字的玩具编程语言编写词法分析器。我希望为分析器遇到的每个关键字打印“关键字”。为了使我的代码更清晰,我为规则部分上方的所有关键字定义了术语“关键字”。

%{
  #include <stdio.h>
%}
keyword program | begin | ... | end

... 表示其余关键字。

在规则部分,我写了以下规则:

{keyword} {
   printf("keyword\n");
}

最后我写了main函数和yywrap函数。 但是,当我编译生成的lex.yy.c 文件时,出现以下错误。

use of undeclared identifier 'keyword'
    {keyword} {
     ^

请帮我解决这个错误,我是这种扫描仪生成语言的新手。

【问题讨论】:

    标签: flex-lexer lex lexical-analysis


    【解决方案1】:

    如果您将程序的精确文本复制并粘贴到您的问题中,您将在此处获得更好的答案。否则,您会强迫任何回答者猜测原文是什么。这是我的猜测:

    可能被抱怨的行在您的 flex 输入文件中缩进了。确保所有规则都从左边距开始。 (任何缩进的文本都被逐字复制到输出文件中,就好像它是 C 代码一样。此功能最常见的用途是将 cmets 添加到您的 Flex 规则中。)

    此外,您不能在宏定义中使用不带引号的空格;你需要:

    keyword  program|begin|...|end
    

    否则,flex 在扩展宏时会抛出错误。 (在这种情况下它没有扩展宏,大概是因为第一个问题。)

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多