GIRL词法
文件girl.l按照lex的规则定义了GIRL的词法。下面给出其内容及相应的解释(斜体字):
D [0-9]
L [A-Za-z]
B [ \t\n]+
H [A-Fa-f]
%%
module return _MODULE_;
version return _VERSION_;
import return _IMPORT_;
type return _TYPE_;
integer return _INTEGER_;
float return _FLOAT_;
string return _STRING_;
color return _COLOR_;
cursor return _CURSOR_;
font return _FONT_;
pixmap return _PIXMAP_;
bmp return _BMP_;
jpeg return _JPEG_;
png return _PNG_;
ppm return _PPM_;
ps return _PS_;
tiff return _TIFF_;
xpm return _XPM_;
widget return _WIDGET_;
signal return _SIGNAL_;
dataslot return _DATASLOT_;
receiver return _RECEIVER_;
table return _TABLE_;
null return _NULL_;
"$"{D}+ return TABLEITEM;
[+-]?{D}+\.{D}+ return FLOAT;浮点数
[+-]?{D}+[Ee]{D}+ return FLOAT;浮点数
[+-]?{D}+\.{D}+[Ee]{D}+ return FLOAT;浮点数
[+-]?[1-9]{D}* return INTEGER;十进制整数
[+-]?0[0-7]* return INTEGER;八进制整数
[+-]?0[xX]({D}|{H})+ return INTEGER;十六进制整数
\"([^\"]|\\\"|\"\")*\" return STRING;字符串
({L}|_)({L}|{D}|_)* return IDENTIFIER;标识符
"=" return EQUAL;
"." return DOT;
"," return COMMA;
":" return COLON;
";" return SEMICOLON;
"<-" return SENDSLOT;
"->" return LINKSLOT;
"(" return LPAREN;
")" return RPAREN;
"[" return LBRACKET;
"]" return RBRACKET;
"{" return LBRACE;
"}" return RBRACE;
"#{" ;读出字符直到遇到"#}",并且读出的字符写入生成的头文件.i.h中。
"%{" ;读出字符直到遇到"%}",并且把读出的字符写入生成的C源文件.i.c中。
"%%{" ;读出字符直到遇到"%%}",并且把读出的字符写入生成的C++源文件.i.cpp中。
"//".*$ ;忽略注解。
"/*" ;忽略注解,直到遇到"*/"。
{B} ;忽略空白。