c - lex 解析器解析用 pascal 编写的程序

标签 c lex

我在使用 Lex 编写 Pascal 分析器时遇到问题,解析后应将有关正确/不正确代码结构的信息以及包含程序行数、使用的变量数、使用的数量的摘要打印到 stdout在 if、while、repeat 等中。

我不知道该怎么办。

最佳答案

考虑这个简短的例子:

  "{"           { return(LCURLY);       }
  "}"           { return(RCURLY);       }
  ","           { return(COMMA);        }
  ":"           { return(COLON);        }
  \.            { return(DOT);          }
  "+"           { return(PLUS);         }
  "-"           { return(MINUS);        }
  "*"           { return(MULTIPLY);     }
  "/"           { return(DIVIDE);       }

每当某个正则表达式模式匹配时,右侧的操作就会发生。只需添加 printf() 即可报告检测到正确的标记。

"/"         { printf("Token %s \n", yytext);return(DIVIDE);     }

最后一行应该是:

 .          { printf("Error not recognized: %s\n", yytext);

最后一行当然意味着任何不正确的标记 -> 我没有编写正则表达式来匹配的任何标记。

关于c - lex 解析器解析用 pascal 编写的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968692/

相关文章:

c - 全局数组是否分配在栈上

c - 理解下面一行

visual-studio-2010 - Visual-Studio 中 lex 和 yacc 的语法高亮显示

c - 我在第二次输入语言时收到错误

c - yacc 缺少左括号的错误处理

C - 字符串到莫尔斯电码程序中的段错误

c++ - Eclipse IDE C++ 不工作 C++

python - 如何忽略 ply.yacc 中的标记

bison - Lex 和 Yacc 可以对自己进行 lex 和解析吗?

c - 如何只扫描整数?