void aba(void); void abx(void); void aby(void); void adca(void); void adcb(void); void adda(void); void addb(void); void addd(void); void anda(void); void andb(void); void asl(void); void asla(void); void aslb(void); void asld(void); void asr(void); void asra(void); void asrb(void); void bcc(void); void bclr(void); void bcs(void); void beq(void); void bge(void); void bgt(void); void bhi(void); void bhs(void); void bita(void); void bitb(void); void ble(void); void blo(void); void bls(void); void blt(void); void bmi(void); void bne(void); void bpl(void); void bra(void); void brclr(void); void brn(void); void brset(void); void bset(void); void bsr(void); void bvc(void); void bvs(void); void cba(void); void clc(void); void cli(void); void clr(void); void clra(void); void clrb(void); void clv(void); void cmpa(void); void cmpb(void); void com(void); void coma(void); void comb(void); void cpd(void); void cpx(void); void cpy(void); void daa(void); void dec(void); void deca(void); void decb(void); void des(void); void dex(void); void dey(void); void eora(void); void eorb(void); void fdiv(void); void idiv(void); void inc(void); void inca(void); void incb(void); void ins(void); void inx(void); void iny(void); void jmp(void); void jsr(void); void ldaa(void); void ldab(void); void ldd(void); void lds(void); void ldx(void); void ldy(void); void lsl(void); void lsla(void); void lslb(void); void lsld(void); void lsr(void); void lsra(void); void lsrb(void); void lsrd(void); void mul(void); void neg(void); void nega(void); void negb(void); void nop(void); void oraa(void); void orab(void); void psha(void); void pshb(void); void pshx(void); void pshy(void); void pula(void); void pulb(void); void pulx(void); void puly(void); void rol(void); void rola(void); void rolb(void); void ror(void); void rora(void); void rorb(void); void rti(void); void rts(void); void sba(void); void sbca(void); void sbcb(void); void sec(void); void sei(void); void sev(void); void staa(void); void stab(void); void std(void); void stop(void); void sts(void); void stx(void); void sty(void); void suba(void); void subb(void); void subd(void); void swi(void); void tab(void); void tap(void); void tba(void); void test(void); void tpa(void); void tst(void); void tsta(void); void tstb(void); void tsx(void); void tsy(void); void txs(void); void tys(void); void wai(void); void xgdx(void); void xgdy(void); #if 0 case Scan::aba1 :{aba();break;} case Scan::abx1 :{abx();break;} case Scan::aby1 :{aby();break;} case Scan::adca1 :{adca();break;} case Scan::adcb1 :{adcb();break;} case Scan::adda1 :{adda();break;} case Scan::addb1 :{addb();break;} case Scan::addd1 :{addd();break;} case Scan::anda1 :{anda();break;} case Scan::andb1 :{andb();break;} case Scan::asl1 :{asl();break;} case Scan::asla1 :{asla();break;} case Scan::aslb1 :{aslb();break;} case Scan::asld1 :{asld();break;} case Scan::asr1 :{asr();break;} case Scan::asra1 :{asra();break;} case Scan::asrb1 :{asrb();break;} case Scan::bcc1 :{bcc();break;} case Scan::bclr1 :{bclr();break;} case Scan::bcs1 :{bcs();break;} case Scan::beq1 :{beq();break;} case Scan::bge1 :{bge();break;} case Scan::bgt1 :{bgt();break;} case Scan::bhi1 :{bhi();break;} case Scan::bhs1 :{bhs();break;} case Scan::bita1 :{bita();break;} case Scan::bitb1 :{bitb();break;} case Scan::ble1 :{ble();break;} case Scan::blo1 :{blo();break;} case Scan::bls1 :{bls();break;} case Scan::blt1 :{blt();break;} case Scan::bmi1 :{bmi();break;} case Scan::bne1 :{bne();break;} case Scan::bpl1 :{bpl();break;} case Scan::bra1 :{bra();break;} case Scan::brclr1 :{brclr();break;} case Scan::brn1 :{brn();break;} case Scan::brset1 :{brset();break;} case Scan::bset1 :{bset();break;} case Scan::bsr1 :{bsr();break;} case Scan::bvc1 :{bvc();break;} case Scan::bvs1 :{bvs();break;} case Scan::cba1 :{cba();break;} case Scan::clc1 :{clc();break;} case Scan::cli1 :{cli();break;} case Scan::clr1 :{clr();break;} case Scan::clra1 :{clra();break;} case Scan::clrb1 :{clrb();break;} case Scan::clv1 :{clv();break;} case Scan::cmpa1 :{cmpa();break;} case Scan::cmpb1 :{cmpb();break;} case Scan::com1 :{com();break;} case Scan::coma1 :{coma();break;} case Scan::comb1 :{comb();break;} case Scan::cpd1 :{cpd();break;} case Scan::cpx1 :{cpx();break;} case Scan::cpy1 :{cpy();break;} case Scan::daa1 :{daa();break;} case Scan::dec1 :{dec();break;} case Scan::deca1 :{deca();break;} case Scan::decb1 :{decb();break;} case Scan::des1 :{des();break;} case Scan::dex1 :{dex();break;} case Scan::dey1 :{dey();break;} case Scan::eora1 :{eora();break;} case Scan::eorb1 :{eorb();break;} case Scan::fdiv1 :{fdiv();break;} case Scan::idiv1 :{idiv();break;} case Scan::inc1 :{inc();break;} case Scan::inca1 :{inca();break;} case Scan::incb1 :{incb();break;} case Scan::ins1 :{ins();break;} case Scan::inx1 :{inx();break;} case Scan::iny1 :{iny();break;} case Scan::jmp1 :{jmp();break;} case Scan::jsr1 :{jsr();break;} case Scan::ldaa1 :{ldaa();break;} case Scan::ldab1 :{ldab();break;} case Scan::ldd1 :{ldd();break;} case Scan::lds1 :{lds();break;} case Scan::ldx1 :{ldx();break;} case Scan::ldy1 :{ldy();break;} case Scan::lsl1 :{lsl();break;} case Scan::lsla1 :{lsla();break;} case Scan::lslb1 :{lslb();break;} case Scan::lsld1 :{lsld();break;} case Scan::lsr1 :{lsr();break;} case Scan::lsra1 :{lsra();break;} case Scan::lsrb1 :{lsrb();break;} case Scan::lsrd1 :{lsrd();break;} case Scan::mul1 :{mul();break;} case Scan::neg1 :{neg();break;} case Scan::nega1 :{nega();break;} case Scan::negb1 :{negb();break;} case Scan::nop1 :{nop();break;} case Scan::oraa1 :{oraa();break;} case Scan::orab1 :{orab();break;} case Scan::psha1 :{psha();break;} case Scan::pshb1 :{pshb();break;} case Scan::pshx1 :{pshx();break;} case Scan::pshy1 :{pshy();break;} case Scan::pula1 :{pula();break;} case Scan::pulb1 :{pulb();break;} case Scan::pulx1 :{pulx();break;} case Scan::puly1 :{puly();break;} case Scan::rol1 :{rol();break;} case Scan::rola1 :{rola();break;} case Scan::rolb1 :{rolb();break;} case Scan::ror1 :{ror();break;} case Scan::rora1 :{rora();break;} case Scan::rorb1 :{rorb();break;} case Scan::rti1 :{rti();break;} case Scan::rts1 :{rts();break;} case Scan::sba1 :{sba();break;} case Scan::sbca1 :{sbca();break;} case Scan::sbcb1 :{sbcb();break;} case Scan::sec1 :{sec();break;} case Scan::sei1 :{sei();break;} case Scan::sev1 :{sev();break;} case Scan::staa1 :{staa();break;} case Scan::stab1 :{stab();break;} case Scan::std1 :{std();break;} case Scan::stop1 :{stop();break;} case Scan::sts1 :{sts();break;} case Scan::stx1 :{stx();break;} case Scan::sty1 :{sty();break;} case Scan::suba1 :{suba();break;} case Scan::subb1 :{subb();break;} case Scan::subd1 :{subd();break;} case Scan::swi1 :{swi();break;} case Scan::tab1 :{tab();break;} case Scan::tap1 :{tap();break;} case Scan::tba1 :{tba();break;} case Scan::test1 :{test();break;} case Scan::tpa1 :{tpa();break;} case Scan::tst1 :{tst();break;} case Scan::tsta1 :{tsta();break;} case Scan::tstb1 :{tstb();break;} case Scan::tsx1 :{tsx();break;} case Scan::tsy1 :{tsy();break;} case Scan::txs1 :{txs();break;} case Scan::tys1 :{tys();break;} case Scan::wai1 :{wai();break;} case Scan::xgdx1 :{xgdx();break;} case Scan::xgdy1 :{xgdy();break;} case Scan::end1 :{;break;} nextSymbol(); break; #endif #if 0 void Parse::aba(void) { } void Parse::abx(void) { } void Parse::aby(void) { } void Parse::adca(void) { } void Parse::adcb(void) { } void Parse::adda(void) { } void Parse::addb(void) { } void Parse::addd(void) { } void Parse::anda(void) { } void Parse::andb(void) { } void Parse::asl(void) { } void Parse::asla(void) { } void Parse::aslb(void) { } void Parse::asld(void) { } void Parse::asr(void) { } void Parse::asra(void) { } void Parse::asrb(void) { } void Parse::bcc(void) { } void Parse::bclr(void) { } void Parse::bcs(void) { } void Parse::beq(void) { } void Parse::bge(void) { } void Parse::bgt(void) { } void Parse::bhi(void) { } void Parse::bhs(void) { } void Parse::bita(void) { } void Parse::bitb(void) { } void Parse::ble(void) { } void Parse::blo(void) { } void Parse::bls(void) { } void Parse::blt(void) { } void Parse::bmi(void) { } void Parse::bne(void); void Parse::bpl(void); void Parse::bra(void); void Parse::brclr(void); void Parse::brn(void); void Parse::brset(void); void Parse::bset(void); void Parse::bsr(void); void Parse::bvc(void); void Parse::bvs(void); void Parse::cba(void); void Parse::clc(void); void Parse::cli(void); void Parse::clr(void); void Parse::clra(void); void Parse::clrb(void); void Parse::clv(void); void Parse::cmpa(void); void Parse::cmpb(void); void Parse::com(void); void Parse::coma(void); void Parse::comb(void); void Parse::cpd(void); void Parse::cpx(void); void Parse::cpy(void); void Parse::daa(void); void Parse::dec(void); void Parse::deca(void); void Parse::decb(void); void Parse::des(void); void Parse::dex(void); void Parse::dey(void); void Parse::eora(void); void Parse::eorb(void); void Parse::fdiv(void); void Parse::idiv(void); void Parse::inc(void); void Parse::inca(void); void Parse::incb(void); void Parse::ins(void); void Parse::inx(void); void Parse::iny(void); void Parse::jmp(void); void Parse::jsr(void); void Parse::ldaa(void); void Parse::ldab(void); void Parse::ldd(void); void Parse::lds(void); void Parse::ldx(void); void Parse::ldy(void); void Parse::lsl(void); void Parse::lsla(void); void Parse::lslb(void); void Parse::lsld(void); void Parse::lsr(void); void Parse::lsra(void); void Parse::lsrb(void); void Parse::lsrd(void); void Parse::mul(void); void Parse::neg(void); void Parse::nega(void); void Parse::negb(void); void Parse::nop(void); void Parse::oraa(void); void Parse::orab(void); void Parse::psha(void); void Parse::pshb(void); void Parse::pshx(void); void Parse::pshy(void); void Parse::pula(void); void Parse::pulb(void); void Parse::pulx(void); void Parse::puly(void); void Parse::rol(void); void Parse::rola(void); void Parse::rolb(void); void Parse::ror(void); void Parse::rora(void); void Parse::rorb(void); void Parse::rti(void); void Parse::rts(void); void Parse::sba(void); void Parse::sbca(void); void Parse::sbcb(void); void Parse::sec(void); void Parse::sei(void); void Parse::sev(void); void Parse::staa(void); void Parse::stab(void); void Parse::std(void); void Parse::stop(void); void Parse::sts(void); void Parse::stx(void); void Parse::sty(void); void Parse::suba(void); void Parse::subb(void); void Parse::subd(void); void Parse::swi(void); void Parse::tab(void); void Parse::tap(void); void Parse::tba(void); void Parse::test(void); void Parse::tpa(void); void Parse::tst(void); void Parse::tsta(void); void Parse::tstb(void); void Parse::tsx(void); void Parse::tsy(void); void Parse::txs(void); void Parse::tys(void); void Parse::wai(void); void Parse::xgdx(void); void Parse::xgdy(void); #endif // peek((int&)nextSymbol); // if(Scan::colon1==nextSymbol) // { // insertSymbols(ParseSymbol(Scan::colon1)); // expect(Scan::name1); // removeSymbols(ParseSymbol(Scan::colon1)); // insertSymbols(mStatementSymbols); // expect(Scan::colon1); // removeSymbols(mStatementSymbols); // emit(label2); // } // else syntaxCheck(); { for(int index=0;index=sizeof(chBuffer))return FALSE; chBuffer[chIndex++]=mChar; readch(); } if('h'==mChar){value=hex(chBuffer,chIndex);readch();} else if('b'==mChar){value=binary(chBuffer,chIndex);readch();} else value=decimal(chBuffer,chIndex); emit(numeral1,value); return TRUE; } #endif #include #include #include #include Parse::Parse(PureViewOfFile &srcView,PureViewOfFile &dstView) : Emit(srcView,dstView), mNumeralValue(0), mIsInError(FALSE), mLastMessage("Success"), mLastLineNumber(FirstLine), mLineNumber(FirstLine), mCurrentSymbolType(Scan::unknown1), mOrigin(0), mLogFile("parse.log",FileHandle::Write,FileHandle::ShareRead,FileHandle::Overwrite) { createSimpleExpressionSymbols(); createExpressionSymbols(); createStatementSymbols(); createFactorSymbols(); createTermSymbols(); createMathSymbols(); createAddSymbols(); createSignSymbols(); } Parse::~Parse() { } void Parse::parse(void) { nextSymbol(); // emit(codestart2); insertSymbols(ParseSymbol(Scan::endtext1)); while(Scan::endtext1!=currentSymbolType()&&!isInError())statement(); removeSymbols(ParseSymbol(Scan::endtext1)); resolve(); // emit(codeend2); } void Parse::statement(void) { if(Scan::label1==currentSymbolType())labelStatement(); else if(Scan::directive1==currentSymbolType())directiveStatement(); else if(Scan::name1==currentSymbolType()) { switch(mCurrentSymbol->symbolType()) { case Symbol::KeywordSymbol : keywordStatement(); break; case Symbol::DirectiveSymbol : directiveStatement(); break; case Symbol::UserSymbol : userStatement(); break; } } else syntaxCheck(); // else errorExpect(Scan::name1); // else if(Scan::startliteral1==mSymbol)userStatement(); // else syntaxCheck(); } void Parse::labelStatement(void) { Label codeLabel; SmartPointer