📄 lex.c
字号:
#include <ctype.h>#define EXTERN#include "a.h"#include "y.tab.h"voidmain(int argc, char *argv[]){ char *p; int nout, nproc, status, i, c; thechar = '2'; thestring = "68020"; memset(debug, 0, sizeof(debug)); cinit(); outfile = 0; include[ninclude++] = "."; ARGBEGIN { default: c = ARGC(); if(c >= 0 || c < sizeof(debug)) debug[c] = 1; break; case 'o': outfile = ARGF(); break; case 'D': p = ARGF(); if(p) Dlist[nDlist++] = p; break; case 'I': p = ARGF(); setinclude(p); break; } ARGEND if(*argv == 0) { print("usage: %ca [-options] file.s\n", thechar); errorexit(); } if(argc > 1 && systemtype(Windows)){ print("can't assemble multiple files on windows\n"); errorexit(); } if(argc > 1 && !systemtype(Windows)) { nproc = 1; if(p = getenv("NPROC")) nproc = atol(p); /* */ c = 0; nout = 0; for(;;) { while(nout < nproc && argc > 0) { i = myfork(); if(i < 0) { i = mywait(&status); if(i < 0) errorexit(); if(status) c++; nout--; continue; } if(i == 0) { print("%s:\n", *argv); if(assemble(*argv)) errorexit(); exits(0); } nout++; argc--; argv++; } i = mywait(&status); if(i < 0) { if(c) errorexit(); exits(0); } if(status) c++; nout--; } } if(assemble(argv[0])) errorexit(); exits(0);}intassemble(char *file){ char ofile[100], incfile[20], *p; int i, of; strcpy(ofile, file); p = utfrrune(ofile, pathchar()); if(p) { include[0] = ofile; *p++ = 0; } else p = ofile; if(outfile == 0) { outfile = p; if(outfile){ p = utfrrune(outfile, '.'); if(p) if(p[1] == 's' && p[2] == 0) p[0] = 0; p = utfrune(outfile, 0); p[0] = '.'; p[1] = thechar; p[2] = 0; } else outfile = "/dev/null"; } p = getenv("INCLUDE"); if(p) { setinclude(p); } else { if(systemtype(Plan9)) { sprint(incfile,"/%s/include", thestring); setinclude(strdup(incfile)); } } of = mycreat(outfile, 0664); if(of < 0) { yyerror("%ca: cannot create %s", thechar, outfile); errorexit(); } Binit(&obuf, of, OWRITE); pass = 1; pinit(file); for(i=0; i<nDlist; i++) dodefine(Dlist[i]); yyparse(); if(nerrors) { cclean(); return nerrors; } pass = 2; outhist(); pinit(file); for(i=0; i<nDlist; i++) dodefine(Dlist[i]); yyparse(); cclean(); return nerrors;}struct{ char *name; ushort type; ushort value;} itab[] ={ "SP", LSP, D_AUTO, "SB", LSB, D_EXTERN, "FP", LFP, D_PARAM, "PC", LPC, D_BRANCH, "TOS", LTOS, D_TOS, "CCR", LTOS, D_CCR, "SR", LTOS, D_SR, "SFC", LTOS, D_SFC, "DFC", LTOS, D_DFC, "CACR", LTOS, D_CACR, "USP", LTOS, D_USP, "VBR", LTOS, D_VBR, "CAAR", LTOS, D_CAAR, "MSP", LTOS, D_MSP, "ISP", LTOS, D_ISP, "FPCR", LTOS, D_FPCR, "FPSR", LTOS, D_FPSR, "FPIAR", LTOS, D_FPIAR, "TC", LTOS, D_TC, "ITT0", LTOS, D_ITT0, "ITT1", LTOS, D_ITT1, "DTT0", LTOS, D_DTT0, "DTT1", LTOS, D_DTT1, "MMUSR", LTOS, D_MMUSR, "URP", LTOS, D_URP, "SRP", LTOS, D_SRP, "R0", LDREG, D_R0+0, "R1", LDREG, D_R0+1, "R2", LDREG, D_R0+2, "R3", LDREG, D_R0+3, "R4", LDREG, D_R0+4, "R5", LDREG, D_R0+5, "R6", LDREG, D_R0+6, "R7", LDREG, D_R0+7, ".W", LWID, 0, ".L", LWID, 4, "A0", LAREG, D_A0+0, "A1", LAREG, D_A0+1, "A2", LAREG, D_A0+2, "A3", LAREG, D_A0+3, "A4", LAREG, D_A0+4, "A5", LAREG, D_A0+5, "A6", LAREG, D_A0+6, "A7", LAREG, D_A0+7, "F0", LFREG, D_F0+0, "F1", LFREG, D_F0+1, "F2", LFREG, D_F0+2, "F3", LFREG, D_F0+3, "F4", LFREG, D_F0+4, "F5", LFREG, D_F0+5, "F6", LFREG, D_F0+6, "F7", LFREG, D_F0+7, "ABCD", LTYPE1, AABCD, "ADDB", LTYPE1, AADDB, "ADDL", LTYPE1, AADDL, "ADDW", LTYPE1, AADDW, "ADDXB", LTYPE1, AADDXB, "ADDXL", LTYPE1, AADDXL, "ADDXW", LTYPE1, AADDXW, "ADJSP", LTYPE5, AADJSP, "ANDB", LTYPE1, AANDB, "ANDL", LTYPE1, AANDL, "ANDW", LTYPE1, AANDW, "ASLB", LTYPE1, AASLB, "ASLL", LTYPE1, AASLL, "ASLW", LTYPE1, AASLW, "ASRB", LTYPE1, AASRB, "ASRL", LTYPE1, AASRL, "ASRW", LTYPE1, AASRW, "BCASE", LTYPE7, ABCASE, "BCC", LTYPE6, ABCC, "BCHG", LTYPE1, ABCHG, "BCLR", LTYPE1, ABCLR, "BCS", LTYPE6, ABCS, "BEQ", LTYPE6, ABEQ, "BFCHG", LTYPEA, ABFCHG, "BFCLR", LTYPEA, ABFCLR, "BFEXTS", LTYPEA, ABFEXTS, "BFEXTU", LTYPEA, ABFEXTU, "BFFFO", LTYPEA, ABFFFO, "BFINS", LTYPEA, ABFINS, "BFSET", LTYPEA, ABFSET, "BFTST", LTYPEA, ABFTST, "BGE", LTYPE6, ABGE, "BGT", LTYPE6, ABGT, "BHI", LTYPE6, ABHI, "BKPT", LTYPE1, ABKPT, "BLE", LTYPE6, ABLE, "BLS", LTYPE6, ABLS, "BLT", LTYPE6, ABLT, "BMI", LTYPE6, ABMI, "BNE", LTYPE6, ABNE, "BPL", LTYPE6, ABPL, "BRA", LTYPE6, ABRA, "BSET", LTYPE1, ABSET, "BSR", LTYPE3, ABSR, "BTST", LTYPE1, ABTST, "BVC", LTYPE6, ABVC, "BVS", LTYPE6, ABVS, "CALLM", LTYPE1, ACALLM, "CAS2B", LTYPE1, ACAS2B, "CAS2L", LTYPE1, ACAS2L, "CAS2W", LTYPE1, ACAS2W, "CASB", LTYPE1, ACASB, "CASEW", LTYPE2, ACASEW, "CASL", LTYPE1, ACASL, "CASW", LTYPE1, ACASW, "CHK2B", LTYPE1, ACHK2B, "CHK2L", LTYPE1, ACHK2L, "CHK2W", LTYPE1, ACHK2W, "CHKL", LTYPE1, ACHKL, "CHKW", LTYPE1, ACHKW, "CLRB", LTYPE3, ACLRB, "CLRL", LTYPE3, ACLRL, "CLRW", LTYPE3, ACLRW, "CMP2B", LTYPE1, ACMP2B, "CMP2L", LTYPE1, ACMP2L, "CMP2W", LTYPE1, ACMP2W, "CMPB", LTYPE1, ACMPB, "CMPL", LTYPE1, ACMPL, "CMPW", LTYPE1, ACMPW, "DATA", LTYPE4, ADATA, "DBCC", LTYPE7, ADBCC, "DBCS", LTYPE7, ADBCS, "DBEQ", LTYPE7, ADBEQ, "DBF", LTYPE7, ADBF, "DBGE", LTYPE7, ADBGE, "DBGT", LTYPE7, ADBGT, "DBHI", LTYPE7, ADBHI, "DBLE", LTYPE7, ADBLE, "DBLS", LTYPE7, ADBLS, "DBLT", LTYPE7, ADBLT, "DBMI", LTYPE7, ADBMI, "DBNE", LTYPE7, ADBNE, "DBPL", LTYPE7, ADBPL, "DBT", LTYPE7, ADBT, "DBVC", LTYPE7, ADBVC, "DBVS", LTYPE7, ADBVS, "DIVSL", LTYPE1, ADIVSL, "DIVSW", LTYPE1, ADIVSW, "DIVUL", LTYPE1, ADIVUL, "DIVUW", LTYPE1, ADIVUW, "END", LTYPE2, AEND, "EORB", LTYPE1, AEORB, "EORL", LTYPE1, AEORL, "EORW", LTYPE1, AEORW, "EXG", LTYPE1, AEXG, "EXTBL", LTYPE3, AEXTBL, "EXTBW", LTYPE3, AEXTBW, "EXTWL", LTYPE3, AEXTWL, "FABSB", LTYPE1, AFABSB, "FABSD", LTYPE1, AFABSD, "FABSF", LTYPE1, AFABSF, "FABSL", LTYPE1, AFABSL, "FABSW", LTYPE1, AFABSW, "FACOSB", LTYPE1, AFACOSB, "FACOSD", LTYPE1, AFACOSD, "FACOSF", LTYPE1, AFACOSF, "FACOSL", LTYPE1, AFACOSL, "FACOSW", LTYPE1, AFACOSW, "FADDB", LTYPE1, AFADDB, "FADDD", LTYPE1, AFADDD, "FADDF", LTYPE1, AFADDF, "FADDL", LTYPE1, AFADDL, "FADDW", LTYPE1, AFADDW, "FASINB", LTYPE1, AFASINB, "FASIND", LTYPE1, AFASIND, "FASINF", LTYPE1, AFASINF, "FASINL", LTYPE1, AFASINL, "FASINW", LTYPE1, AFASINW, "FATANB", LTYPE1, AFATANB, "FATAND", LTYPE1, AFATAND, "FATANF", LTYPE1, AFATANF, "FATANHB", LTYPE1, AFATANHB, "FATANHD", LTYPE1, AFATANHD, "FATANHF", LTYPE1, AFATANHF, "FATANHL", LTYPE1, AFATANHL, "FATANHW", LTYPE1, AFATANHW, "FATANL", LTYPE1, AFATANL, "FATANW", LTYPE1, AFATANW, "FBEQ", LTYPE6, AFBEQ, "FBF", LTYPE6, AFBF, "FBGE", LTYPE6, AFBGE, "FBGT", LTYPE6, AFBGT, "FBLE", LTYPE6, AFBLE, "FBLT", LTYPE6, AFBLT, "FBNE", LTYPE6, AFBNE, "FBT", LTYPE6, AFBT, "FCMPB", LTYPE1, AFCMPB, "FCMPD", LTYPE1, AFCMPD, "FCMPF", LTYPE1, AFCMPF, "FCMPL", LTYPE1, AFCMPL, "FCMPW", LTYPE1, AFCMPW, "FCOSB", LTYPE1, AFCOSB, "FCOSD", LTYPE1, AFCOSD, "FCOSF", LTYPE1, AFCOSF, "FCOSHB", LTYPE1, AFCOSHB, "FCOSHD", LTYPE1, AFCOSHD, "FCOSHF", LTYPE1, AFCOSHF, "FCOSHL", LTYPE1, AFCOSHL, "FCOSHW", LTYPE1, AFCOSHW, "FCOSL", LTYPE1, AFCOSL, "FCOSW", LTYPE1, AFCOSW, "FDBEQ", LTYPE7, AFDBEQ, "FDBF", LTYPE7, AFDBF, "FDBGE", LTYPE7, AFDBGE, "FDBGT", LTYPE7, AFDBGT, "FDBLE", LTYPE7, AFDBLE, "FDBLT", LTYPE7, AFDBLT, "FDBNE", LTYPE7, AFDBNE, "FDBT", LTYPE7, AFDBT, "FDIVB", LTYPE1, AFDIVB, "FDIVD", LTYPE1, AFDIVD, "FDIVF", LTYPE1, AFDIVF, "FDIVL", LTYPE1, AFDIVL, "FDIVW", LTYPE1, AFDIVW, "FETOXB", LTYPE1, AFETOXB, "FETOXD", LTYPE1, AFETOXD, "FETOXF", LTYPE1, AFETOXF, "FETOXL", LTYPE1, AFETOXL, "FETOXM1B", LTYPE1, AFETOXM1B, "FETOXM1D", LTYPE1, AFETOXM1D, "FETOXM1F", LTYPE1, AFETOXM1F, "FETOXM1L", LTYPE1, AFETOXM1L, "FETOXM1W", LTYPE1, AFETOXM1W, "FETOXW", LTYPE1, AFETOXW, "FGETEXPB", LTYPE1, AFGETEXPB, "FGETEXPD", LTYPE1, AFGETEXPD, "FGETEXPF", LTYPE1, AFGETEXPF, "FGETEXPL", LTYPE1, AFGETEXPL, "FGETEXPW", LTYPE1, AFGETEXPW, "FGETMANB", LTYPE1, AFGETMANB, "FGETMAND", LTYPE1, AFGETMAND, "FGETMANF", LTYPE1, AFGETMANF, "FGETMANL", LTYPE1, AFGETMANL, "FGETMANW", LTYPE1, AFGETMANW, "FINTB", LTYPE1, AFINTB, "FINTD", LTYPE1, AFINTD, "FINTF", LTYPE1, AFINTF, "FINTL", LTYPE1, AFINTL, "FINTRZB", LTYPE1, AFINTRZB, "FINTRZD", LTYPE1, AFINTRZD, "FINTRZF", LTYPE1, AFINTRZF, "FINTRZL", LTYPE1, AFINTRZL, "FINTRZW", LTYPE1, AFINTRZW, "FINTW", LTYPE1, AFINTW, "FLOG10B", LTYPE1, AFLOG10B, "FLOG10D", LTYPE1, AFLOG10D, "FLOG10F", LTYPE1, AFLOG10F, "FLOG10L", LTYPE1, AFLOG10L, "FLOG10W", LTYPE1, AFLOG10W, "FLOG2B", LTYPE1, AFLOG2B, "FLOG2D", LTYPE1, AFLOG2D, "FLOG2F", LTYPE1, AFLOG2F, "FLOG2L", LTYPE1, AFLOG2L, "FLOG2W", LTYPE1, AFLOG2W, "FLOGNB", LTYPE1, AFLOGNB, "FLOGND", LTYPE1, AFLOGND, "FLOGNF", LTYPE1, AFLOGNF, "FLOGNL", LTYPE1, AFLOGNL, "FLOGNP1B", LTYPE1, AFLOGNP1B, "FLOGNP1D", LTYPE1, AFLOGNP1D, "FLOGNP1F", LTYPE1, AFLOGNP1F, "FLOGNP1L", LTYPE1, AFLOGNP1L, "FLOGNP1W", LTYPE1, AFLOGNP1W, "FLOGNW", LTYPE1, AFLOGNW, "FMODB", LTYPE1, AFMODB, "FMODD", LTYPE1, AFMODD, "FMODF", LTYPE1, AFMODF, "FMODL", LTYPE1, AFMODL, "FMODW", LTYPE1, AFMODW, "FMOVEB", LTYPE1, AFMOVEB, "FMOVED", LTYPE1, AFMOVED, "FMOVEF", LTYPE1, AFMOVEF, "FMOVEL", LTYPE1, AFMOVEL, "FMOVEW", LTYPE1, AFMOVEW, "FMULB", LTYPE1, AFMULB, "FMULD", LTYPE1, AFMULD, "FMULF", LTYPE1, AFMULF, "FMULL", LTYPE1, AFMULL, "FMULW", LTYPE1, AFMULW, "FNEGB", LTYPE8, AFNEGB, "FNEGD", LTYPE8, AFNEGD, "FNEGF", LTYPE8, AFNEGF, "FNEGL", LTYPE8, AFNEGL, "FNEGW", LTYPE8, AFNEGW, "FREMB", LTYPE1, AFREMB, "FREMD", LTYPE1, AFREMD, "FREMF", LTYPE1, AFREMF, "FREML", LTYPE1, AFREML, "FREMW", LTYPE1, AFREMW, "FSCALEB", LTYPE1, AFSCALEB, "FSCALED", LTYPE1, AFSCALED, "FSCALEF", LTYPE1, AFSCALEF, "FSCALEL", LTYPE1, AFSCALEL, "FSCALEW", LTYPE1, AFSCALEW, "FSEQ", LTYPE1, AFSEQ, "FSF", LTYPE1, AFSF, "FSGE", LTYPE1, AFSGE, "FSGT", LTYPE1, AFSGT, "FSINB", LTYPE1, AFSINB, "FSIND", LTYPE1, AFSIND,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -