📄 ada.l
字号:
%{
#include "y.tab.h"
extern int yylineno;
extern void exit();
static int last_token;
%}
A [a-zA-Z]
D [0-9]
H [a-fA-F0-9]
E [Ee][+-]?{D}(_?{D})*
%%
"&" { last_token = '&'; return '&'; }
"(" { last_token = '('; return '('; }
")" { last_token = ')'; return ')'; }
"*" { last_token = '*'; return '*'; }
"+" { last_token = '+'; return '+'; }
"," { last_token = ','; return ','; }
"-" { last_token = '-'; return '-'; }
"." { last_token = '.'; return '.'; }
"/" { last_token = '/'; return '/'; }
":" { last_token = ':'; return ':'; }
";" { last_token = ';'; return ';'; }
"<" { last_token = '<'; return '<'; }
"=" { last_token = '='; return '='; }
">" { last_token = '>'; return '>'; }
"!" | /* alternate character */
"|" { last_token = '|'; return '|'; }
"**" { last_token = EXP_; return EXP_; }
".." { last_token = DBLDOT_; return DBLDOT_; }
"/=" { last_token = NOTEQL_; return NOTEQL_; }
":=" { last_token = ASSIGN_; return ASSIGN_; }
"<<" { last_token = L_LBL_; return L_LBL_; }
"<=" { last_token = LTEQ_; return LTEQ_; }
"<>" { last_token = BOX_; return BOX_; }
"=>" { last_token = ARROW_; return ARROW_; }
">=" { last_token = GTEQL_; return GTEQL_; }
">>" { last_token = R_LBL_; return R_LBL_; }
"'" {
/* is it an attribute tic? */
switch ( last_token ) {
case ')' :
case ALL_ :
case identifier :
case string_literal :
case character_literal :
last_token = '\'';
return '\'';
default :
;
}
/* must be a character literal */
{
int c = input();
if ( c != '\n' ) {
c = input();
if ( c == '\'' ) {
last_token = character_literal;
return character_literal;
} else {
fprintf( stderr,
"malformed character literal on line %d\n",
( c != '\n' ) ? yylineno : --yylineno );
exit( 1 );
}
} else {
fprintf( stderr, "malformed character literal on line %d\n", --yylineno );
exit( 1 );
}
}
}
{A}(_?({A}|{D}))* {
extern char yytext[];
extern int reserved_word();
last_token = reserved_word( yytext );
return last_token;
}
{D}(_?{D})*([.]{D}(_?{D})*)?({E})? |
{D}(_?{D})*:{H}(_?{H})*([.]{H}(_?{H})*)?:({E})? | /* alternate character */
{D}(_?{D})*#{H}(_?{H})*([.]{H}(_?{H})*)?#({E})? {
last_token = numeric_literal;
return numeric_literal;
}
\%([^%"]|\%\%)*\% | /* alternate character */
\"([^"]|\"\")*\" {
last_token = string_literal;
return string_literal;
}
"--".* ;
[ \f\n\r\t\v] ;
. {
fprintf( stderr, "illegal character on line %d\n", yylineno );
exit( 1 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -