⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lab3.l

📁 c—语言的句法分析器。读入一个C--语言程序
💻 L
字号:
%{
#include "lab3.h"
#include "lab3.tab.h"

lineno = 1;
%}

/* name definition */
delim        [ \t]
ws           {delim}+
letter       [A-Za-z]
digit        [0-9]
id           {letter}({letter}|{digit})*
number       {digit}+
char_const   '(.|\\n|\\t)'
string       \"(.)*\"
comment      (\/\*([^*]|\n|(\*+([^*/]|\n)))*\*+\/)|(\/\/[^\n]*)

%%

"\n"         { lineno++; }
{comment}    {
                  int i;

                  for (i = 0; yytext[i] != '\0'; i++) {
                      if (yytext[i] == '\n') {
                          lineno++;
                      }       
                  }
             }
{ws}         { /* do nothing and return nothing */ }
"__cdecl"    { return (CDECL); }
"__stdcall"  { return (STDCALL); }
"char"       { return (CHAR); }
"else"       { return (ELSE); }
"if"         { return (IF); }
"int"        { return (INT); }
"return"     { return (RETURN); }
"void"       { return (VOID); }
"while"      { return (WHILE); }
{id}         {
                  yylval.id = InsertID(yytext);
                  return (ID);
             }
{number}     {    
                  yylval.id = InsertID(yytext);
                  return (NUM);
             }
{char_const} {
                  yylval.id = InsertID(yytext);
                  return (CHAR_LITERAL);
             }
{string}     {
                  yylval.id = InsertID(yytext);
                  return (STRING_LITERAL);
             }
"..."        { return (ELLIPSIS); }
"!="         {
                  strcpy(yylval.op, yytext);
                  return (NE);
             }
"<"          {
                  strcpy(yylval.op, yytext);
                  return (LT);
             }
"<="         {
                  strcpy(yylval.op, yytext);
                  return (LE);
             }
"=="         { 
                  strcpy(yylval.op, yytext);
                  return (EQ);
             }
">"          {
                  strcpy(yylval.op, yytext);
                  return (GT);
             }
">="         {
                  strcpy(yylval.op, yytext);
                  return (GE);
             }
";"          { return (';'); }
"{"          { return ('{'); }
"}"          { return ('}'); }
","          { return (','); }
"="          { return ('='); }
"("          { return ('('); }
")"          { return (')'); }
"["          { return ('['); }
"]"          { return (']'); }
"+"          { return ('+'); }
"-"          { return ('-'); }
"*"          { return ('*'); }
"/"          { return ('/'); }
"%"          { return ('%'); }
.            { yyerror("unknown character"); }

%%

int yywrap()
{
    return (1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -