00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "debug.h"
00043 #include "cw_iparser_spec.h"
00044 #include "iparser_spec.hh"
00045
00046 class EbnfNode;
00047
00048 IParserSpec *cw_parserSpec = NULL;
00049
00050 CLINK void IParserSpec_addProduction (char *name,
00051 char *retTypeName,
00052 int retTypeLine,
00053 char *formalArgs,
00054 int formalArgsLine,
00055 char *exceptList,
00056 int exceptListLine,
00057 char *preambleCode,
00058 int preambleCodeLine,
00059 void *expansion)
00060 {
00061 ASSERT(cw_parserSpec != NULL, "Parser spec wrapper not initialized.");
00062
00063 if (retTypeName == NULL) retTypeName = "";
00064 if (formalArgs == NULL) formalArgs = "";
00065 if (exceptList == NULL) exceptList = "";
00066 if (preambleCode == NULL) preambleCode = "";
00067
00068 try {
00069 cw_parserSpec->addProduction(string(name), string(retTypeName),
00070 Position(retTypeLine),
00071 string(formalArgs),
00072 Position(formalArgsLine),
00073 string(exceptList),
00074 Position(exceptListLine),
00075 string(preambleCode),
00076 Position(preambleCodeLine),
00077 static_cast<EbnfNode*>(expansion),
00078 Position(yylineno));
00079 } catch (ParseException &pex)
00080 {
00081 die(formatError(Position(yylineno), pex));
00082 }
00083 }
00084
00085
00086 CLINK void IParserSpec_setPreambleCode (char *block)
00087 {
00088 ASSERT(cw_parserSpec != NULL, "Parser spec wrapper not initialized.");
00089
00090 cw_parserSpec->setPreambleCode(string(block), Position(yylineno));
00091 }
00092
00093
00094 CLINK void IParserSpec_setClassName (char *className)
00095 {
00096 ASSERT(cw_parserSpec != NULL, "Parser spec wrapper not initialized.");
00097
00098 cw_parserSpec->setClassName(string(className));
00099 }
00100
00101
00102 CLINK void IParserSpec_setInheritance (char* inheritance)
00103 {
00104 ASSERT(cw_parserSpec != NULL, "Parser spec wrapper not initialized.");
00105
00106 cw_parserSpec->setInheritance(string(inheritance), Position(yylineno));
00107 }
00108
00109
00110 CLINK void IParserSpec_addCodeBlock (char *block)
00111 {
00112 ASSERT(cw_parserSpec != NULL, "Parser spec wrapper not initialized.");
00113
00114 cw_parserSpec->addCodeBlock(string(block), Position(yylineno));
00115 }