/** @file
Parser: compiler part of request class.
Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
*/
static const char* IDENT_COMPILE_C="$Date: 2003/04/02 14:16:18 $";
#include "pa_opcode.h"
#include "pa_request.h"
#include "compile_tools.h"
extern int yydebug;
extern int yyparse (void *);
VStateless_class& Request::compile(VStateless_class* aclass, const char* source, uint file_no) {
// prepare to parse
parse_control pc(*this, aclass, source, file_no);
// parse=compile!
//yydebug=1;
if(yyparse(&pc)) { // error?
if(pc.col==0) { // expecting something after EOL means they've expected it BEFORE
// step back. -1 col means EOL
pc.line--;
pc.col=-1;
}
throw Exception("parser.compile",
0,
"%s(%d:%d): %s", file_list[file_no].cstr(), 1+pc.line, pc.col, pc.error);
}
// result
return *pc.cclass;
}
E-mail: