版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理与实践
CompilerPrincipleand
Implementation中英双语版1Chapter1IntroductionZhangJing,Yu
SiLiang
CollegeofComputerScience&TechnologyHarbinEngineeringUniversityCompilersCompilersarecomputerprogramsthattranslateonelanguagetoanother..SourceprogramTargetProgramCompilerSourceProgramTargetProgramFig1.1Acompiler图1.1一个编译器3Itsinputisaprogramwritteninitssourcelanguage.Usually,thesourcelanguageisahigh-levellanguage(C,C++,etc).Itproducesanequivalentprogramwritteninitstargetlanguage.Thetargetlanguageisobjectcode
(machinecode)forthetargetmachine.4Simpleexample:
Thesourceprogramofacompilerisasfollows.I:=I0+L*2(1.1)
Targetprogram:theoutputofcompilerisanequivalentmachinecodeofitssourceprogram.Itlookslikethese..
MOVFid3,R2(1.2)MULF#2.0,R2MOVFid2,R1ADDFR2,R1MOVFR1,id15Analysisofthesourceprogram
Generally,theanalysisofcompilerincludesLexicalAnalyzer,SyntaxAnalyzer,SemanticAnalyzer,IntermediateCodeGenerator,CodeOptimizerandCodeGenerator..
Inlexicalanalysis,charactersaregroupedintotokens;;
Syntaxanalyzerchangesagroupoftokenintogrammaticalphrases,itisoftencalledparsingtree;Insemanticanalyzer,grammaticalphrasesarecheckedbysemanticerrorsandtypeinformationareadded;;
6Theintermediatecodegeneratorisaprogramwhichiseasytoproduceprogramfromsemanticanalyzerandiseasytotranslateintothetargetprogram;;Codeoptimizationphaseattemptstoimprovetheintermediatecode;;Aintermediatecodeinstructionsareeachtranslatedintoasequenceofmachineinstructions,itisthetaskofcodegenerator..
ThephasesofcompilerareshownbyFig.1.2.
7Lexicalanalysis
Lexicalanalysisisalsocalledscanner.Itisaprogramwhichrecognizespatternsintext.Scannersmaybehandwrittenorbeautom-aticallygeneratedbyalexicalanalysisgeneratorfromdescriptionsofthepatternstoberecognized..Theexampleisanassignmentstatement:I:=I0+L*2
8
Lexicalanalyzercananalysisitintoagroupoftokens:“I”,“:=”,“I0”,“+”,“L”,“*”,“2”.Namely,theyaretheidentifier,theassignmentsymbol,theidentifier,theplus,theidentifier,themultiplicationandthedigital.
Note:Duringthelexicalanalysis,theblankswhichseparatethecharactersofthesetokenswouldnormallybeeliminated..
9
SyntaxAnalyzer
SyntaxAnalyzerisalsocalledparser.Itgroupstokensofthesourceprogramintogrammaticalphrases;Itisalsoaprogramwhichdeterminesifitsinputissyntacticallyvalidanddeterminesitsstructure..
Parsersmaybehandwrittenormaybeautomaticallygeneratedbyaparsergeneratorfromdescriptionsofvalidsyntacticalstructures.
10
Usually,thegrammaticalphrasesofthesourceprogramarerepresentedbyaparsingtree.Forexample:I:=I0+L*2
TheparsingtreeofitisshownbyFig.1.3.11Fromthisparsingtree,wecanseethegrammaticalphrasesincludeexpressionsandstatements.Thedefinitionofexpressionisasfollows::1.Anyanidentifierisanexpression,suchasI,L,I02.Anyadigitalisanexpression,suchas23.Ifexpression1andexpression2areexpressions,thenexpression1*expression2isanexpression,suchasL*2expression1+expression2isanexpression,suchasI0+L*2(expression1)isanexpression12Ontheotherhand,wecansimilarlydefinestatementrecursively.Thatis::Ifidentifier1isanidentifier,andexpression2isanexpression,thenidentifier1:=expression2
Ifexpression1isanexpressionand
expression2isanexpression,soWhile(expression1)dostatement2
If(expression1),thenstatement2
13Sometimes,wecancompresstheparsingtreeintosyntaxtree,wheretheoperatorsappearastheinteriornodes,andtheoperandsofanoperatoraretheoperator’schildren,showninFig.1.4.WeshalldiscussthisinmoredetailinChapter4..
14SemanticAnalyzer
Thesemanticanalysisanalyzestheparsingtreeforsemanticerrors,gathersinformationtypeandchecksinformationtype.Thesyntaxtreeisusedtoidentifyiftheoperatorsandoperandsarecorrect.Inaddition,manyprogramlanguagesneedtoreportandcorrectanerrortype,thisneedtostorethenameandtypeofvariablesandotherobjectsinasymboltable.Theinformationtypecanbecheckedbymeansofthesymboltable.Theoutputofthesemanticanalysisphaseisanannotatedparsingtree,i.e.addingthetypeofobjectsbasedonparsingtree,wenameitassemantictree.Thisphaseofsemanticanalysisisoftencombinedwiththeparser..15Attributegrammarsareusedtodescribethestaticsemanticsofaprogram.Forexample,supposewehavedeclaredallidentifiersasrealtypeshowninFig.1.5,anddigital2isaninteger.Firstly,semanticanalyzergathersandstoresthetypeinformationofallidentifiersanddigitalsinasymboltable;thenchecksthetypeofthem,itrevealsthat*multipliesareal(L)byaninteger(2);sothesemanticanalyzercreatesanewnode“real”;finally,itconvertsthedigital2intoarealtypeandbuildsasemantictree..
16IntermediateCodeGenerator
WhencompileranalysisreachesthephaseofIntermediateCodeGenerator,compilerhasanalyzedsourcelanguageintoaseriesoftokens,andbuiltaparseorsyntaxtreeandsemantictree,storedinformationtypeinsymboltableandgeneratedtheerrorinformation.Inordertoobtainmachinecodeofsourceprogram,somecompilersgenerateanintermediaterepresentation,it’saprogramforanabstractmachine.Thephaseofcreatingtheintermediaterepresentationiscalledintermediatecodegenerator.Thefunctionofintermediatecodegeneratorisforeasyproducingandtranslatingthesourceprogramintothetargetprogram..
17
Thereareseveralformsofintermediatecode,thetypicaloneis“three-addresscode”,whichissimilartotheassemblylanguage.Three-addresscodeisasequenceofinstructions;eachhavingatmostthreeparts.Weshallexplainthree-addresscodeandotherintermediateexactrepresentationinChapter7..
Thesourceprogramin(1.1)canbewritteninthree-addresscode:temp1:=real(2)(1.3)temp2:=L*temp1temp3:=I0+temp2I:=temp318CodeOptimizer
Intermediatecodeisnotafaster-runningcode,soacodeoptimizercanimproveit.ForexamplewecanchangetheIntermediatecode(1.3)intocodeoptimization(1.4).
temp1:=L*2(1.4)
I:=I0+temp1
Thismeansthatcodeoptimizercandecreasethenumberofinstructionsandincreasetherunningspeedofthetargetprogram.Therearemanytypeofoptimizers,thesearecoveredinChapter8.19CodeGenerator
Thefunctionofthisphaseistocreatetargetcode.Targetcodemeansmachinecodeorassemblycode.Thefeatureofmachinecodeisthatitneedsmemorylocationforeachofthevariablesusedbytheprogram,andregisteroftheassignmentofvariables.Thecodeof(1.4)mightbetranslatedintoaseriesofmachineinstructions,suchas
MOVFL,R2(1.5)MULF#2.0,R2MOVFI0,R1ADDFR2,R1MOVFR1,I20
Themachineinstructionsmean:.
(1)TheFinaboveinstructions(1.5)meansthatthedigitalisthetypeoffloatingpointnumber..
(2)ThefunctionofMOVistoputthecontentsoftheaddressLintoregister2..
(3)MULsignifiesmultiplicationofR2by2.0,andthensendstheresulttoR2.ADDpresentsaddingR2andR1together,andthenstorestheresultinR1..
(4)#means2.0isaconstant..
Chapter9givesadetaileddiscussionofcodegeneration.Intheabovephaseofcompiler,therearetwoimportantpartsincompiler,theyaresymboltableanderrortable,thedetailsareasfollows..21
Errorhandlers
Therearemanyerrorinformationfoundandneedtobecorrectedinthephaseofcompiler.Forexample,inlexicalphasesomecharacterscan’tbeformedintoanytokenofalanguage.Duringsyntaxphase,therearesomeerrorsthatdonotabidebyanysyntaxstructurerulesofalanguage.Insemanticphase,someerrorsappearinincorrecttypeonbothsidesofassignment.Forexample,ontheonehand,thetypeofvariableinassignmentisintegerandontheotherhand,theconstantisthetypeoffloat.It’srightinsyntacticstructure,butitisincorrectinsemanticmeaning.Soweneedtheerrorhandlersineveryphaseofcompiler.22
Symboltable
Aftertheanalysisoflexicalofcompiler,sourceprogramisturnedintotokensandispreparedforbeinganalyzedbynextphase.Thepointisthatthesetokensshouldbestoredinsomeplaceforuseatanytime.Wheretostorethesetokens??
Symboltableisadatastructureoradatabase.Ithastwofunctions,thefirstoneisthestoragefunction,itstorestheinformationoftoken,suchasthename,typeandothercharacterofidentifier;thesecondfunctionistocheckorretrievethisinformation..
23
Forexample,inthephaseofsemanticanalysisandintermediatecodegeneration,itneedstocheckthetypeofidentifierandtogenerateproperoperations..Inaddition,theactionsofstoringsomeinformationinsymboltableandcheckingtheinformationinsomephaseexistinallthephasesofcompiler.ItiscoveredindetailinChapter5..
24Conclusion
Thissectionfurtherdiscussessomecompilerconcepts.Itisnotnecessaryforallthecompilerstoconsistofallsixphase,somecompilersonlyhavethreephases.Inthisbook,wemainlyintroducethecommoncompilerstructure(sixphases)showninFig.1.6.Everyphaseofacompilerwillbediscussedindetailinthefollowingchapters..
25
Compilersarenotparticularlydifficultprogramstounderstandonceyouarefamiliarwiththestructureofacompilerinageneralway.Thepointisthatnotanyofthephasesofacompilerishardtounderstand;but,therearesomanyphasesthatyouneedtoabsorbandmakesenseofthem.Table1.1isthedescriptionofeachofthecompilerphases.
Table1.1Descriptionofcompilerphases 表1.1编译器组成阶段的说明2627Thepassofcompiler
Compilerisacomplexprogram.Whenasourceprogramiscompiled,itoftenneedsseveralpassestofinishallphasesofcompiler.Sowenamethedistinctchunkpass.Itisapartofthecompilationprocessanditcommunicateswithoneanotherviatemporaryfile.Thetypicalstructureisafour-passcompiler,itisshowninFig.1.6..
28
Thefirst
passispreprocessor.Itsfirsttaskistostripcommentsfromthesourcecode,suchas{,}orbegin,end.Secondtaskistohandlevarioushousekeepingtaskswithwhichyoudon’twanttoburdenthecompilerproper,forexample,thehousekeepingis#include<global.h>inthesourceprogramlanguageC.Thesecondpassistheheartofcompiler,itconsistoflexicalanalysis,parser,semanticanalyzer,andintermediatecodegenerator..
29
Theinputissourcelanguage,andoutputisintermediatelanguage.Thethirdpassistheoptimizer,whichimprovesthequalityoftheintermediatecode.Finally,thefourthpass,ittranslatestheoptimizercodeintorealassemblylanguageorsomeotherformofbinary,executablecode..30
Note:
Therearemanydifferentpassesofacompiler.Notallcompilershavefourpasses.Somehavetwopasses,othersgenerateassemblylanguageinthethirdpass,andsomecompileronlyhasonepass.Manycompilersdonotusepreprocessors,orhaveintermediatelanguage,butgeneratethemachinecodedirectly..31
Compilerexample1
Sofarwehavedescribedallthecompilerphasesandsometheoryknowledgeaboutit.But,whatisacompilerprogram?Howtobuildacompilerfromasimpleexpression?Wegivesomepartsofatypicalcompilerprogramandexplainthecompilerphasethatconsistsoflexicalanalysis(Lex),parseranalyzer(Yacc)andcodegeneration(ANSICcodegenerator).
LexandYacccangenerateprogramfragmentsthatsolvethetaskofreadingthesourceprogramanddiscoveringitsstructure..
32
Lex
iswellsuitedforsegmentinginputinpreparationforaparsingroutineandhelpswriteprogramswhosecontrolflowisdirectedbyinstancesofregularexpressionsintheinputstream.Lextablemadeupofregularexpressionsandcorrespondingprogramfragmentsistranslatedtoaprogramthatreadsaninputstream,copyittoanoutputstreamandpartitiontheinputintostringsthatmatchthegivenexpressions.What’smore,Lexcangeneratetherecognitionoftheexpressionsandstringstocorrespondingprogramfragmentsthatareexecuted.33TheYaccspecifiesthestructuresofhisinputandrecognizeeachstructure.Yaccchangessuchaspecificationintoasubroutinethathandlestheinputprocess;usually,itusesthesubroutinetomakeitconvenientandappropriatetohandletheflowofcontrol..Note:ThefollowingcompilercodeisprovidedbyJeremyBennettandhehaspermittedtoaddhiscodetothisbook.Wesincerelythankhimforhiskindsupport.Ifyouwishtoreadthecompletecompilersourcecode,pleaseaccesstheJeremyBennett’swebsiteat/..
34Thelexicalanalysis
Letusfirstdiscusstheconceptoftoken.Tokenisaninputsymbol,whichisusedbothfordigitalsandidentifiers;sothetokensaremadeupofasequenceofcharactersintherange‘0-9’,‘a-z’,‘A-Z’.Thefollowinglexicalprogramisonlyapartofthewholelexicalanalysis.Itstartsfrominputsystem,gettingcharactersfromstandardinput,andthenisolatingtokens.Thedetailedlexicalanalysisisasfollows..
35Itstartsfromthedefinitionofsyntaxanalyzer,whichistoobtainthedefinitionoftypectype.handoftheroutineparseprogram..scanner.c(LEXscannerforthevccompiler)36
373839404142TheParser
Intheparserphasenocodeisgenerated,itjustanalyzetheinputtokens,i.e.parsetheinput.Eachsubroutinecorrespondstotheleftofonesentenceandintheoriginalgrammarthatbearsthesamename,anditmustmatchthegrammarexactly.ThefollowingparserpartincludestheroutinetomakeanIFstatement,aWHILEloopandexpressionnode.parser.c(YACCparserforthevccompiler)43444546Codegeneration
Movingontothecodegeneration,thegoalofthisphaseistobuildacompilergiventhattheprogramsinthephaseofparserhavebeenstrictlyrecognizedwithoutanyerror,heretheerrormeansthattheinputisanillegalsentenceinthegrammar.However,beforegeneratingcode,firstyouneedtobuildthebar-bonesrecognizer..
Forexample:
a:=bopc47
Weneedcreatesometemporaryvariablesandmaintaininternallybythecompiler.ThestepofgeneratingCodeisasfollows.First,createamechanismforallocatingtemporaries.Infact,thetemporariesshouldberecycled,thatistheyshouldbereusedaftertheyarenolongerneededinthecurrentsubexpression.Second,determinethenameofthetemporarythatusesargumentsandreturnvalues.So,thissectionofcodegeneratorconsistsofgeneratingcodeforabinaryoperator,generatingcodeforacopyinstruction,generatingcodeforaninstructionwhichloadstheargumentintoaregister,andthenwriteitontothenewstackframe,includingthestandardcallsequenceandthestandardreturnsequence..
48cg.c(ANSICcodegeneratorforthevccompiler)495051525354Compilerexample2forusingFlextoolThestepsofrunningtheLextoolare:1.DownloadthesourcecodeofFlextoolfromthewebsitebelow.
/gnuwin32/flex-2.5.4a-1-in.zip55Someotherwebsitesofcompilersourcecodeareshownbelow/object/cg_compiler_code.html/dox/scanner_8c-source.html.au/~comp380/calculator/scanner.c/dox/scanner_8c-source.html/resume/code/sqlwork-5.0/scanner.c.html/math/faculty/eric/cs473/pascal/phase1/scanner.chttp://bt-win2k-server.fh-regensburg.de/jobst/co/Modellcompiler/C/SCANNER.C.htmlhttp://clri6f.gsi.de/gnu/gnuplot-3.5/scanner.c/lex_yacc_page//lexparse.html562.EntertheDOSoperatingsystem.(startmenu→accessory→commandprompt)3.Createatextfile:lex.txt,thetextfilecontentareasbelow574.Usingthecommandofrename:renamelex.txt
lex.l5.UsethecompiledcommandtoproducetheCcompiledfilelexyy.c:flexlex.l
6.UsethecommandofTCtocompilelexyy.cintolexyy.exe:tc
lexyy.c7.PressthekeyF9toproducefileoflexyy.exe8.Doubleclickonthefilelexyy.exetoruntheflextool.TheresultofLEXscannertoolisshownbyFig1.7.58Chapter2
GrammarandFormalLanguage
Thegoalofthischapteristohelpreaderstoreviewsomebasicknowledgeofmathematicsthatisrelatedwiththetheoryofcompiler,andunderstandthemathematicssymboliclanguage—formallanguage.Inspecific,weshalltalkabouttheconceptsofstring,grammar,parsertree,formallanguageandsoon.Alltheconceptsarethebasicknowledgeforreaderandwillbenefitthemtogothroughthefollowingchapters.
60String
1.Alphabet
–finitecharacterset,anditisnon-emptyset.Forexample,A={a,b,c,…,z},B={0,1},AandBarealphabets.2.StringStringisasequenceofcharacters,emptystringcanberepresentedbyε,Usuallysmalllettersrepresentstring.
61Forexample,IfthereisalphabetA={a,b,c},Thecharactersofitarea,b,c.Thestringsarea,b,c,ab,ac,aa,abc,…AlphabetB={0,1},thecharacterscorrespondtoitare0,1Thestringsare0,1,00,01,10,11,000,…,01000,…Note:Ifthecharacterorderisnotsame,thestringisdifferentaswell.Forexample,string“ab”and“ba”arenotsame.001and010aredifferentstring..623.StringLengthThelengthofstringisthenumberofcharacters.Thestringisx,thelengthofstringis|x|.TakealphabetBforexample,|01|=2,|000|=3,|01000|=5,Thelengthofnullstring,|ε|=04.ConnectionofstringTherearestringsxandy,writedownyafterx,namely,“xy”,wecall“xy”astheconnectionofstringxandy..Iftherearex=abc
,y=de,thenxy=abcde,yx=deabcNote:εx=xε=x635.PowerofstringIfxisstring,thenx2=xxx3=xxx …… xn=xx…x=xn-1x=xxn-1xnisthenpowerofxx0=εThereisx=aTb,sothepowerofxandlengthofitareasfollows.x0=ε |x0|=0x1=aTb |x1|=3x2=aTbaTb |x2|=6x3=aTbaTbaTb |x3|=9646.Headandtailofstringz=xyisstring,theheadofzisx,thetailofzisy.ify≠ε,wecallthexistrueheadofz.Similarly,ifx≠ε,yisthetailofzanditistruetail..Thereisstringofu=abc,sotheheadsofuareε、a、ab、abc,trueheadofitareε、a、ab,thetailsofuareε、c、bc、abc,truetailsofitareε、c、bc..657.ProductofstringAandBAandBarestrings,theproductofthemisAB={xy|(x∈A)∧(y∈B)}
ThismeansthatABisthesetwherexbelongstoAandybelongstoB.
TherearesetA={a,b},B={0,1},so,AB={a0,a1,b0,b1}Note:
{ε}A=A{ε}=A668.PowersetofstringAissetofstring,thepowerofthesetAisA0={ε}
A1=A …… An=AA…A=AAn-1=An-1AThereisA={a,b},thenA0={ε}
A2={a,b}{a,b}={aa,ab,ba,bb}
A3={aaa,aab,aba,abb,baa,bab,bba,bbb}
LengthofA2is4(namely,22=4),whilelengthofA3is8(namely,23=8)679.Positiveclosureofstringset
ThepositiveclosureofstringsetcanbewrittenasA+=A1∪A2∪…∪An∪…
IfA={a,b},thenA+={a,b}∪{aa,ab,ba,bb}∪…={a,b,aa,ab,ba,bb,aaa,…,bbb,…}
10.ClosureofstringsetTheclosureofstringsetAiswrittenasA*A*=A0∪A+={ε}∪A+IfA={a,b},soA*={ε,a,b,aa,ab,ba,bb,aaa,…,bbb,…}68GrammarandFormallanguage
Weknowthatcompilingprocedureincludesscanner,parser,semanticanalyzerandsoon.Howdotheywork?Whatistheprincipleofthem?Isthereanyrulebetweenthem?Thereisaveryimportantruleorgrammarthathelpstoanalyzetheprocedureofcompiling,thatis,formallanguage.Formallanguageiscompletelydescribedandrigidlygovernedbyrules.Thissectionwewillintroducethebasicconceptsofrule,grammarandlanguage..
691.Rule
Ruleisangroup(U,x),oftenitiswrittenasU::=x(orU→x)
.WhileUistherule’sleft,andstringx(notnull)istherule’sright,that’stosay,therule’sleftisdefinedorformedbytheright.Inaddition,leftandrightsideofruleareconnectedby“::=”or“→”,actually,theruleiscalledBackusNaurForm(BNF)..Thefollowingareallrules.S::=0S1 S::=01 U::=TbT::=a702.GrammarG[Z]
Grammar[Z]isasetwhichisnotnullandisfinite.Zistheidentifiedsymbol(orthestartsymbol)anditmustappearontheleftofrule,allthecharactersinsetwhichappearinrulesarecalledvocabularyofV..71Example2.1.G[S]={S::=0S1,S::=01}
Thisgrammarincludestworules,thevocabularyV={S,0,1}Example2.2.G[U]={U::=Tb,T::=a}
So,V={U,T,a,b},theidentifiedsymbolinthegrammarisU.Example2.3.G[Z]={Z::=D,Z::=ZD,D::=0|1|…|9}V={Z,D,0,1,…9},thestartsymbolinthegrammarisZ.72Note:RulesD::=0|1|…|9aresamewithD::=0D::=1D::=2…
D::=9“|”abovemeansachoiceamongalternatives.733.NonterminalsymbolThesymbolappearingonleftofruleiscallednonterminalsymbol,thesetconsistingofallthenonterminalsymbolsisVN.Inexamples2.1,2.2and2.3,theirVNareasfollowsVN={S}
VN={U,T}
VN={Z,D}744.Terminalsymbol
ThesetofcharactersthatdoesnotbelongtoVNareterminalsymbol,anditiswrittenasVT,foraboveexamples,VTareasfollows,VT={0,1}
VT={a,b}
VT={0,1,…,9}
Note:VocabularyVisdefinedas:V=VN∪VT755.Thedefinition
of
grammarAgrammarisafinitenonemptysetofrules,anditisdefinedasa4-tuple:G=(VN,VT,P,S)
While,VNisnonterminalsymbol,VTisterminalsymbol,Pissetofrules,Sisthestartsymbol.
Example2.3canbewrittenas:G[Z]=(VN,VT,P,Z)
VN={Z,D}
VT={0,1,…9}
P:Z::=DZ::=ZDD::=0|1|…|976Tillnow,wehavelearntwhatgrammarisandhowtorepresentgrammar,nextwewanttounderstandorjudgeifastringistheresultofagrammar..
Takethestring“12”forexampletojudgeifitisthestringofexample2.3..
Z⇒ZD⇒DD⇒1D⇒12So
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国制砖挤泥机组数据监测报告
- 【三年级下册语文】阅读理解常考题型和答题技巧总结
- 2025年陕西宝鸡先行电力(集团)有限责任公司供电服务业务部直聘用工招聘120人笔试历年参考题库附带答案详解
- 2025年重庆川仪十七厂有限公司校园招聘笔试历年参考题库附带答案详解
- 2025年贵州茅台酒股份有限公司和义兴酒业分公司公开招聘492人笔试历年参考题库附带答案详解
- 2025年荆州市古城国有投资有限责任公司招聘工作人员综合及政审笔试历年参考题库附带答案详解
- 2025年福建福州连江县供销合作社联合社基层企业公开招聘6人笔试历年参考题库附带答案详解
- 2025年神农架林区林投集团招聘工作人员6名笔试历年参考题库附带答案详解
- 2025年湖南常德烟草机械有限责任公司公开招聘23人笔试历年参考题库附带答案详解
- 2025年海南核电春季校园招聘正式启动笔试历年参考题库附带答案详解
- 山东青岛工程职业学院招聘考试真题2024
- 米厂大米检测管理制度
- CJ/T 563-2018市政及建筑用防腐铁艺护栏技术条件
- T/GMIAAC 002-20232型糖尿病强化管理、逆转及缓解诊疗标准与技术规范
- 湖南长郡教育集团2025届七下生物期末教学质量检测试题含解析
- 装修保密协议书范本
- 2025年江苏无锡市江阴市江南水务股份有限公司招聘笔试参考题库含答案解析
- 电动葫芦吊装方案
- 2024年广西数字金服科技有限公司招聘笔试真题
- 水库维修养护方案设计
- 液化石油气配送中心应急响应预案
评论
0/150
提交评论