#ifndef _AS68HC11_SCAN_HPP_ #define _AS68HC11_SCAN_HPP_ #ifndef _COMMON_BLOCK_HPP_ #include #endif #ifndef _AS68HC11_EMIT_HPP_ #include #endif class Table; class Scan : public Emit { public: enum ScanSymbols{unknown1,name1,asterisk1,apostrophe1,equ1,origin1,rmb1,comma1,label1,literal1,leftbracket1,rightbracket1,numeral1, char1,divide1,plus1,minus1,leftparen1,rightparen1,newline1,endtext1, ix1,iy1,aba1,abx1,aby1,adca1,adcb1,adda1,addb1,addd1,anda1,andb1,asl1,asla1,aslb1, asld1,asr1,asra1,asrb1,bcc1,bclr1,bcs1,beq1,bge1,bgt1,bhi1,bhs1,bita1,bitb1,ble1,blo1, bls1,blt1,bmi1,bne1,bpl1,bra1,brclr1,brn1,brset1,bset1,bsr1,bvc1,bvs1,cba1,clc1,cli1,clr1, clra1,clrb1,clv1,cmpa1,cmpb1,com1,coma1,comb1,cpd1,cpx1,cpy1,daa1,dec1,deca1,decb1,des1, dex1,dey1,eora1,eorb1,fdiv1,idiv1,inc1,inca1,incb1,ins1,inx1,iny1,jmp1,jsr1,ldaa1,ldab1, ldd1,lds1,ldx1,ldy1,lsl1,lsla1,lslb1,lsld1,lsr1,lsra1,lsrb1,lsrd1,mul1,neg1,nega1,negb1, nop1,oraa1,orab1,psha1,pshb1,pshx1,pshy1,pula1,pulb1,pulx1,puly1,rol1,rola1,rolb1,ror1, rora1,rorb1,rti1,rts1,sba1,sbca1,sbcb1,sec1,sei1,sev1,staa1,stab1,std1,stop1,sts1,stx1, sty1,suba1,subb1,subd1,swi1,tab1,tap1,tba1,test1,tpa1,tst1,tsta1,tstb1,tsx1,tsy1,txs1, tys1,wai1,xgdx1,xgdy1,end1}; Scan(PureViewOfFile &srcView,PureViewOfFile &dstView,Table &symbolTable); virtual ~Scan(); void analyze(void); private: enum {SpaceChar=32,TabChar=9}; void readch(void); void skipSeparators(void); BOOL scanNumeral(void); void scanNewLine(void); void scanWord(void); void scanComment(void); void scanCharacter(void); void scanUnknown(void); void hex(char chBuffer[],int chIndex); void binary(char chBuffer[],int chIndex); void decimal(char chBuffer[],int chIndex); BOOL isKeySymbol(void)const; BOOL isInHex(int chr)const; WORD mUserSymbols; Table &mSymbolTable; String mWordString; BOOL mIsInError; int mChar; }; inline void Scan::readch(void) { mChar=read(); } inline BOOL Scan::isKeySymbol(void)const { return (' '==mChar||','==mChar||'['==mChar||']'==mChar||':'==mChar||'*'==mChar||'/'==mChar||'+'==mChar||'-'==mChar||'('==mChar||')'==mChar); } inline BOOL Scan::isInHex(int chr)const { if('A'==chr||'B'==chr||'C'==chr||'D'==chr||'E'==chr||'F'==chr|| 'a'==chr||'b'==chr||'c'==chr||'d'==chr||'e'==chr||'f'==chr)return TRUE; return FALSE; } inline void Scan::scanUnknown(void) { readch(); emit(unknown1); } #endif