版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理与实践
CompilerPrincipleand
Implementation中英双语版1Chapter1IntroductionZhangJing,YuSiLiang
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
Lexiswellsuitedforsegmentinginputinpreparationforaparsingroutineandhelpswriteprogramswhosecontrolflowisdirectedbyinstancesofregularexpressionsintheinputstream.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.txtlex.l5.UsethecompiledcommandtoproducetheCcompiledfilelexyy.c:flexlex.l6.UsethecommandofTCtocompilelexyy.cintolexyy.exe:tclexyy.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“12”isthestringofexample2.3.Theprocedureaboveisaderivationthatstar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 传统酒吧椅市场需求变化趋势与商业创新机遇分析报告
- 证券发放服务行业商业模式创新分析报告
- 2025-2030年自动化物流包装材料回收系统行业深度调研及发展战略咨询报告
- 企业数据安全应急响应协议2025年草案备案
- 代理合同2025年销售代理协议
- 浮梁县辅警考试题库2025
- 小学主题班会课件:点亮成长的女儿中小花
- 人工智能教育辅助学习工具开发方案
- 2026年中考数学真题完全解读(吉林省卷)
- 2026传染病护士面试题及答案
- 2025年重庆长寿区公安局辅警招聘考试真题
- 2026年上半年度中国智算中心产业全景报告-项目分布、典型案例、资金规模、来源解构与建设内核深度解析
- 衢州职业技术学院辅导员考试试题2026年附答案
- 实证资产定价-present
- 2026四川锦江发展集团下属锦发展百年春熙公司第一次项目制员工招聘8人笔试备考试题及答案详解
- (2026年)妇产科胎盘早剥患者诊断与护理课件
- 2026低空经济公司(新组建央企)招聘笔试历年参考题库附带答案详解
- 2026年普通高等教育自学考试(高等数学)真题单套试卷
- 2026富海集团招聘面试题及答案
- 连锁餐饮加盟计划书范文参考
- 雨课堂学堂云在线《人像摄影(中国传媒大学 )》单元测试考核答案
评论
0/150
提交评论