السلام عليكم ورحمة الله
صباحكم / مساءكم < فُـــــــــــل
لو سمحتوا اريد شرح للدوال scanner و parser
بداية دالة سكانر
tokentype scanner()
{char in_char,c;
clear_buffer();
if(infile.eof()) {element="THE END"; return EndOFile;}
While (!infile.eof())
{
infile.get(in_char);
if(isspace(in_char)) infile.get(in_char);
else if ( in_char=='(' ) {element="( "; return LPAREN;}
else if ( in_char==')' ) {element=") "; return RPAREN;}
else if ( in_char==';' ) {element="; "; return SEMICOLON;}
else if ( in_char==',' ) {element=", "; return COMMA;}
else if ( in_char=='+' ) {element="+ "; return PLUSOP;}
else if ( in_char=='.' ) {element=". "; return DOT;}
else if (in_char==':'){
infile.get(c);
if (c== '=') { element= ":= "; return ASSIGNOP; } else infile.putback(c);
}
else if (in_char=='-') { infile.get(c);
if (c== '-') do infile.get(in_char); While (in_char !='\n';
else { infile.putback(c); element="- ";}
}
else if (isalpha(in_char))
{i=0; bufffer_char(in_char);
for (c=infile.get(); isalnum (c) || c =='_'; infile.get(c) ) {i=i+1; buffer_char(c); }
infile.putback(c);
return check();
}
else if (isdigit(in_char))
{i=0; buffer_char (in_char);
for(c=infile.get(); isdigit(c); c=infile.get() ) {i=i+1; buffer_char(c);}
infile.putback(c);
element=this_token;
return INTLITERAL;
}
else if (infile.eof()) {element="THE END"; return EndOFile;}
else f2 <<"ERROR " <<in_char<<"is an illegal character "<<endl;
}
element="THE END"; return EndOFile;
}
//-----------------------------------------------------------------------------------------------------------------------------------------
void make_token_file()
{
tokentype t;
int test=1;
while (test)
{
t=scanner(); if(t==EndOFile) test=0;
elementRecord.tokeName=t; elementRecord.tokenSpelling=element;
file.write (reinterpret_cast<char *> (&elementRecord), sizeof (tokenRecord ));
}
}هذه دالة الـ scanner بعد ما افهمها بنزل دالة parser انتظركم ولكم الأجر