Initial
This commit is contained in:
93
as68hc11/Scan.hpp
Normal file
93
as68hc11/Scan.hpp
Normal file
@@ -0,0 +1,93 @@
|
||||
#ifndef _AS68HC11_SCAN_HPP_
|
||||
#define _AS68HC11_SCAN_HPP_
|
||||
#ifndef _COMMON_BLOCK_HPP_
|
||||
#include <common/block.hpp>
|
||||
#endif
|
||||
#ifndef _AS68HC11_EMIT_HPP_
|
||||
#include <as68hc11/emit.hpp>
|
||||
#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,Block<String> &includePath=Block<String>());
|
||||
Scan(PureViewOfFile &srcView,PureViewOfFile &dstView,Table &symbolTable,CodePointer &codePointer,Block<String> &includePath=Block<String>());
|
||||
virtual ~Scan();
|
||||
bool analyze(void);
|
||||
const String &lastMessage(void)const;
|
||||
private:
|
||||
enum {SpaceChar=32,TabChar=9};
|
||||
void readch(void);
|
||||
void skipSeparators(void);
|
||||
bool scanNumeral(void);
|
||||
void scanNewLine(void);
|
||||
bool 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 scanInclude(void);
|
||||
bool isKeySymbol(void)const;
|
||||
bool isInHex(int chr)const;
|
||||
bool getIncludeFile(const String &fileName,String &pathFileName);
|
||||
|
||||
|
||||
Block<String> mIncludePath;
|
||||
WORD mUserSymbols;
|
||||
Table &mSymbolTable;
|
||||
String mWordString;
|
||||
String mLastMessage;
|
||||
bool mIsInError;
|
||||
bool mEmitEndText;
|
||||
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);
|
||||
}
|
||||
|
||||
inline
|
||||
const String &Scan::lastMessage(void)const
|
||||
{
|
||||
return mLastMessage;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user