⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ss0

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻
字号:
.SH0: Introduction.PPYacc provides a general tool for imposing structure on the input to a computer program.The Yacc user prepares aspecification of the input process; this includes rulesdescribing the input structure, code to be invoked when theserules are recognized, and a low-level routine to do thebasic input.Yacc then generates a function to control the input process.This function, called a.I parser ,calls the user-supplied low-level input routine(the.I "lexical analyzer" )to pick up the basic items(called.I tokens )from the input stream.These tokens are organized according to the input structure rules,called.I "grammar rules" \|;when one of these rules has been recognized,then user code supplied for this rule, an.I action ,is invoked; actions have the ability to return values andmake use of the values of other actions..PPYacc is written in a portable dialect of C.[Ritchie Kernighan Language Prentice.]and the actions, and output subroutine, are in C as well.Moreover, many of the syntactic conventions of Yacc follow C..PPThe heart of the input specification is a collection of grammar rules.Each rule describes an allowable structure and gives it a name.For example, one grammar rule might be.DSdate  :  month\_name  day  \',\'  year   ;.DEHere,.I date ,.I month\_name ,.I day ,and.I yearrepresent structures of interest in the input process;presumably,.I month\_name ,.I day ,and.I yearare defined elsewhere.The comma ``,'' is enclosed in single quotes; this implies that thecomma is to appear literally in the input.The colon and semicolon merely serve as punctuation in the rule, and haveno significance in controlling the input.Thus, with proper definitions, the input.DSJuly  4, 1776.DEmight be matched by the above rule..PPAn important part of the input process is carried out by thelexical analyzer.This user routine reads the input stream, recognizing the lower level structures,and communicates these tokensto the parser.For historical reasons, a structure recognized by the lexical analyzer is called a.I "terminal symbol" ,while the structure recognized by the parser is called a.I "nonterminal symbol" .To avoid confusion, terminal symbols will usually be referred to as.I tokens ..PPThere is considerable leeway in deciding whether to recognize structures using the lexicalanalyzer or grammar rules.For example, the rules.DSmonth\_name  :  \'J\' \'a\' \'n\'   ;month\_name  :  \'F\' \'e\' \'b\'   ;         . . .month\_name  :  \'D\' \'e\' \'c\'   ;.DEmight be used in the above example.The lexical analyzer would only need to recognize individual letters, and.I month\_namewould be a nonterminal symbol.Such low-level rules tend to waste time and space, and maycomplicate the specification beyond Yacc's ability to deal with it.Usually, the lexical analyzer wouldrecognize the month names,and return an indication that a.I month\_namewas seen; in this case,.I month\_namewould be a token..PPLiteral characters such as ``,'' must also be passed through the lexicalanalyzer, and are also considered tokens..PPSpecification files are very flexible.It is realively easy to add to the above example the rule.DSdate  :  month \'/\' day \'/\' year   ;.DEallowing.DS7 / 4 / 1776.DEas a synonym for.DSJuly 4, 1776.DEIn most cases, this new rule could be ``slipped in'' to a working system with minimal effort,and little danger of disrupting existing input..PPThe input being read may not conform to thespecifications.These input errors are detected as early as is theoretically possible with aleft-to-right scan;thus, not only is the chance of reading and computing with badinput data substantially reduced, but the bad data can usually be quickly found.Error handling,provided as part of the input specifications,permits the reentry of bad data,or the continuation of the input process after skipping over the bad data..PPIn some cases, Yacc fails to produce a parser when given a set ofspecifications.For example, the specifications may be self contradictory, or they mayrequire a more powerful recognition mechanism than that available to Yacc.The former cases represent design errors;the latter casescan often be correctedby makingthe lexical analyzermore powerful, or by rewriting some of the grammar rules.While Yacc cannot handle all possible specifications, its powercompares favorably with similar systems;moreover, theconstructions which are difficult for Yacc to handle arealso frequently difficult for human beings to handle.Some users have reported that the discipline of formulating validYacc specifications for their input revealed errors ofconception or design early in the program development..PPThe theory underlying Yacc has been described elsewhere..[Aho Johnson Surveys LR Parsing.].[Aho Johnson Ullman Ambiguous Grammars.].[Aho Ullman Principles Compiler Design.]Yacc has been extensively used in numerous practical applications,including.I lint ,.[Johnson Lint.]the Portable C Compiler,.[Johnson Portable Compiler Theory.]and a system for typesetting mathematics..[Kernighan Cherry typesetting system CACM.].PPThe next several sections describe thebasic process of preparing a Yacc specification;Section 1 describes the preparation of grammar rules,Section 2 the preparation of the user supplied actions associated with these rules,and Section 3 the preparation of lexical analyzers.Section 4 describes the operation of the parser.Section 5 discusses various reasons why Yacc may be unable to produce aparser from a specification, and what to do about it.Section 6 describes a simple mechanism forhandling operator precedences in arithmetic expressions.Section 7 discusses error detection and recovery.Section 8 discusses the operating environment and special featuresof the parsers Yacc produces.Section 9 gives some suggestions which should improve thestyle and efficiency of the specifications.Section 10 discusses some advanced topics, and Section 11 givesacknowledgements.Appendix A has a brief example, and Appendix B gives asummary of the Yacc input syntax.Appendix C gives an example using some of the more advancedfeatures of Yacc, and, finally,Appendix D describes mechanisms and syntaxno longer actively supported, butprovided for historical continuity with older versions of Yacc.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -