Total 192
papers 158
books 26
websites 8

第1章 引论

papaer:0 book:5 website:2

  1. Bergin[1996] History of Programming Languages
  4. Hennessy[2004] Computer Organization and Design: The Hardware/Software Interface
  5. Scott[2006] Programming Language Pragmatics, second edition
  6. Sethi[1996] Programming Languages: Concepts and Constructs
  7. Wexelblat[1981] History of Programming Languages

第2章 一个简单的语法制导翻译器


第3章 词法分析

paper:11 book:3 website:3

  1. Aho[1990] “Algorithms for finding patterns in strings”
  2. Aho[1975] “Efficient string matching: an aid to bibliographic search”, pp. 333-340
  3. Aho[1988] “The AWK Programming Language”
  4. Flex home page:, Free Software Foundation
  5. Hopcroft[2006] “Introduction to Automata Theory”
  6. Huffman[1954] “The synthesis of sequential machines”, pp. 3-4,161,190,275-303
  7. JFlex home page:
  9. Kleene “Representation of events in nerve nets”, pp. 3-40
  10. Lesk[1975] “Lex - a lexical analyzer generator”
  11. Knuth[1977] “Fast pattern matching in strings”, pp. 323-350
  12. McCullough[1943] “A logical calculus of the ideas immanent in nervous activity”, pp. 115-133
  13. McNaughton[1960] “Regular expressions and state graphs for automata”, pp. 38-47
  14. Moore “Gedanken experiments on sequential machines”, pp. 129-153
  15. Rabin[1959] “Finite automata and their decision problems”, pp. 114-125
  16. Shannon[1956] “Automata Studies”
  17. Thompson[1968] “Regular expression search algorithm”

第4章 语法分析

paper:27 book:1 website:2

  1. Aho[1975] “Deterministic parsing of ambiguous grammars”, pp. 441-452
  2. Bakus[1959] “The syntax and semantics of the proposed international algebraic language of the Zurich-ACM-GAMM Conference”, pp. 125-132
  3. Birman[1973] “Parsing algorithms with backtrack”, pp. 1-34
  4. Cantor[1962] “On the ambiguity problem of Backus systems”, pp. 477-479
  5. Chomsky[1959] “Three models for the description of language”, pp. 113-124
  6. Chomsky[1959] “On certain formal properties of grammars”, pp. 137-167
  7. Dain[1991] “Bibliography on Syntax Error Handling in Language Translation Systems”
  8. DeRemer[1969] “Pratical Translator for LR(k) Languages”
  9. DeRemer[1971] “Simple LR(k) grammars”, pp. 453-460
  10. Donnelly C., R. Stallman, “Bison: The YACC-compatible Parser Generator”,
  11. Earley[1970] “An efficient context-free parsing algorithm”, pp. 94-102
  12. Earley[1975] “Ambiguity and precedence in syntax description”, pp. 183-192
  13. Floyd[1962] “On ambiguity in phrase-structure languages”, pp. 526-534
  14. Floyd[1963] “Syntactic analysis and operator precedence”, pp. 316-333
  15. Grune[1988] “A programmer-friendly LL(1) parser generator”, pp. 29-38
  16. Hoare[1962] “Report on the Elliott Algol translator”, pp. 127-129
  17. Hopcroft[2001] “Introduction to Automata Theory, Languages, and Computation”
  18. Hudson, “CUP LALR Parser Generator in Java”,
  19. Ingerman[1967] “Panini-Backus form suggested”, p. 137
  20. John S.C.[1975] “Yacc - Yet Another Compiler Compiler”
  21. Kasami[1965] “An efficient recognition and syntax analysis algorithm for context-free languages”
  22. Knuth[1965] “On the translation of languages from left to right”, pp. 607-639
  23. Korenjak[1969] “A practical method for constructing LR(k) processors”, pp. 613-623
  24. Lewis[1968] “Syntax-directed transduction”, pp. 465-488
  25. McClure[1965] “TMG - a syntax-directed compiler”, pp. 262-274
  26. Naur[1960] “Report on the algorithmic language ALGOL 60”, pp. 299-314
  27. Parr T., “ANTLR”,
  28. Schorre[1964] “Meta-II: a syntax-oriented compiler writing language”
  29. Wirth[1966] “Euler: a generalization of Algol and its formal definition: Part I”, pp. 13-23
  30. Younger[1967] “Recognition and parsing of context-free languages in time n^3”, pp. 189-208

第5章 语法制导的翻译

paper:8 book:0 website:0

  1. Brooker[1962] “A general translation program for phrase structure languages”, pp. 1-10
  2. Irons[1961] “A syntax directed compiler for Algol 60”, pp. 51-55
  3. Jazayeri[1975] “The intrinsic exponential complexity of the circularity problem for attribute grammars”, pp. 697-706
  4. John S.C.[1975] “Yacc - Yet Another Compiler Compiler”,
  5. Knuth[1968] “Semantics of context-free languages”, pp. 127-145
  6. Lewis[1974] “Attributed translations”, pp. 279-307
  7. Paakki[1995] “Attribute grammar paradigms - a high-level methodology in language implementation”, pp. 196-255
  8. Samelson[1960] “Sequential formula translation”, pp. 76-83

第6章 中间代码生成

paper:9 book:1 website:1

  1. Ershov[1958] “On Programming of arithmetic operations”, p. 16.
  2. Feldman[1979] “Implementation of a portable Fortran 77 compiler using modern tools”, pp. 98-106
  3. GCC home page:, Free Software Foundation
  4. Gosling[1995] “Java intermediate bytecodes”, pp. 111-118
  5. Huskey[1960] “Neliac - a dialect of Algol”, pp. 463-468
  6. Johnson S.C.[1979] “A tour through the portable C compiler”
  7. Milner[1978] “A theory of type polymorphism in programming”, pp. 348-375
  8. Pierce[2002] “Types and Programming Languages”
  9. Ritchie[1979] “A tour through the UNIX C compiler”
  10. Strong[1958] “The problem of programming communication with changing machines: a proposed solution”, pp. 12-18, pp. 9-15
  11. Wirth[1971] “The design of a Pascal compiler”, pp. 309-333

第7章 运行时刻环境

paper:13 book:4 website:0

  1. Baker[1992] “The treadmill: real-time garbage collection without motion sickness”, pp. 66-70
  2. Cheney[1970] “A nonrecursive list compacting algorithm”, pp. 677-678
  3. Church[1941] “The Calculi of Lambda Conversion”
  4. Collins[1960] “A method for overlapping and erasure of lists”, pp. 655-657
  5. Dijkstra[1960] “Recursive programming”, pp. 312-318
  6. Dijkstra[1978] “On-the-fly garbage collection: an exercise in cooperation”, pp. 966-975
  7. Fenichel[1969] “A Lisp garbage-collector for virtual-memory computer systems”, pp. 611-612
  8. Frege[1967] “Begriffsschrift, a formula language, modeled upon that of arithmetic for pure thought”
  9. Hudson[1992] “Incremental Collection of Mature Objects”, pp. 388-403
  10. Johnson S.C.[1981] “The C language calling sequence”
  11. Knuth[1968] “Art of Computer Programming, Volume 1: Fundamental Algorithms”
  12. Liberman[1983] “A real-time garbage collector based on the lifetimes of objects”, pp. 419-429
  13. McCarthy[1960] “Recursive functions of symbolic expressions and their computation by machine”, pp. 184-195
  14. McCarthy[1981] “History of Lisp”, pp. 173-185
  15. Minsky[1963] “A LISP garbage collector algorithm using secondary storage”
  16. Randell[1964] “Algol 60 Implementation”
  17. Wilson, “Uniprocessor garbage collection techniques”,

第8章 代码生成

paper:12 book:4 website:0

  1. Aho[1976] “Optimal code generation for expression trees”, pp. 488-501
  2. Aho[1989] “Code generation using tree matching and dynamic programming”, pp. 491-516
  3. Chaitin[1981] “Register allocation via coloring”, pp. 47-57
  4. Chaitin[1982] “Register allocation and spilling via graph coloring”, pp. 201-207
  5. Chow[1990] “The priority-based coloring approach to register allocation”, pp. 501-536
  6. Cooper[2004] “Engineering a Compiler”
  7. Ershov[1958] “On Programming of arithmetic operations”, pp. 3-6, p. 16.
  8. Ershov[1971] “The Alpha Automatic Programming System”
  9. Fischer[1991] “Crafting a Compiler with C”
  10. Fraser[1992] “Engineering a simple, efficient code generator generator”, pp. 213-226
  11. Glanville[1978] “A new method for compiler code generation”, pp. 231-240
  12. Hennessy[2003] “Computer Architecture: A Quantitative Approach”, Third Edition
  13. Lowry[1969] “Object code optimization”, pp. 13-22
  14. Pelegri-Llopart[1988] “Optimal code generation for expressions trees: an application of BURS theory”, pp. 294-308
  15. Schwartz[1973] “On Programming: An Interim Report on the SETL Project”, Technical Report
  16. Sethi[1970] “The generation of optimal code for arithmetic expressions”, pp. 715-728

第9章 机器无关优化

paper:21 book:0 website:0

  1. Allen[1969] “Program optimization”, pp. 239-307
  2. Allen[1970] “Control flow analysis”, pp. 1-19
  3. Cocke[1970] “Global common subexpression elimination”, pp. 20-24
  4. Cocke[1970] Programming Languages and Their Compilers: Preliminary Notes
  5. Cousot[1977] “Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints”, pp. 238-252
  6. Cytron[1991] “Efficiently computing static single assignment form and the control dependence graph”, pp. 451-490
  7. Ershov[1966] “Alpha - an automatic programming system of high efficiency”, pp. 17-24
  8. Gear[1965] “High speed compilation of efficient object code”, pp.483-488
  9. Hecht[1972] “Flow graph reducibility”, pp. 188-202
  10. Hecht[1974] “Characterizations of reducible flow graphs”, pp. 367-375
  11. Kam[1977] “Monotone data flow analysis frameworks”, pp. 305-318
  12. Kasami[1973] “On the capabilities of while, repeat, and exit statements”, pp. 503-512
  13. Kildall[1973] “A unified approach to global program optimization”, pp. 194-206
  14. Knoop[1992] “Lazy code motion”, pp. 224-234
  15. Kosaraju[1974] “Analysis of structured programs”, pp. 232-255
  16. Lowry[1969] “Object code optimization”, pp. 13-22
  17. Morel[1979] “Global optimization by suppression of partial redundancies”, pp. 96-103
  18. Prosser[1959] “Applications of boolean matrices to the analysis of flow diagrams”, pp. 133-138
  19. Ullman[1973] “Fast algorithms of the elimination of common subexpressions”, pp. 191-213
  20. Vyssotsky[1963] “A graph theoretical Fortran source language analyzer”, unpublished technical report, Bell Laboratories
  21. Wulf[1975] “The Design of an Optimizing Compiler”

第10章 指令级并行性

paper:11 book:1 website:0

  1. Bernstein[1991] “Global instruction scheduling for super-scalar machines”, pp. 241-255
  2. Dasgupta[1979] “The organization of microprogram stores”, pp. 39-65
  3. Fisher[1981] “Trace scheduling: a technique for global microcode compaction”, pp. 478-490
  4. Gross[1982] “Optimizing delayed branches”, pp. 114-120
  5. Hennessy[2003] “Computer Architecture: A Quantitative Approach”, Third Edition
  6. Kuck[1972] “On the number of operations simultaneously executable in Fortran-like programs and their resulting speedup”, pp. 1293-1310
  7. Lam[1988] “Software pipelining: an effective scheduling technique for VLIW machines”, pp. 318-328
  8. Lamport[1974] “The parallel execution of DO loops”, pp. 83-93
  9. Patel[1976] “Improving the throughput of a pipeline by insertion of delays”, pp. 159-164
  10. Rau[1981] “Some scheduling techniques and an easily schedulable horizontal architecture for high performance scientific computing”, pp. 183-198
  11. Tokoro[1981] “Optimization of microprograms”, pp. 491-504
  12. Wood[1979] “Global optimization of microprograms through modular control constructs”, pp. 1-6

第11章 并行性和局部性优化

paper:23 book:5 website:0

  1. Abu-Sufah[1981] “On the performance enhancement of paging systems through program analysis and transformations”, pp. 341-356
  2. Allen[1988] “An overview of the PTRAN analysis system for multiprocessing”, pp. 617-640
  3. Allen[1972] “A Catalogue of optimizing transformations”, pp. 1-30
  4. Allen[1987] “Automatic translation of Fortran programs to vector form”, pp. 491-542
  5. Banerjee[1976] “Data Dependence in Ordinary Programs”
  6. Banerjee[1979] “Speedup of Ordinary Programs”
  7. Dantzig[1973] “Fourier-Motzkin elimination and its dual”, pp. 288-297
  8. Feautrier[1992] “Some efficient solutions to the affine scheduling problem: I. One-dimensional time”, pp. 313-348
  9. Hennessy[2003] “Computer Architecture: A Quantitative Approach”, Third Edition
  10. Kuck[1972] “On the number of operations simultaneously executable in Fortran-like programs and their resulting speedup”, pp. 1293-1310
  11. Kung[1978] “Systolic arrays (for VLSI)”, pp. 256-282
  12. Lam[1991] “The cache performance and optimization of blocked algorithms”, pp. 63-74
  13. Lamport[1974] “The parallel execution of DO loops”, pp. 83-93
  14. Lim[1999] “An affine partitioning algorithm to maximize parallelism and minimize communication”, pp. 228-237
  15. Lim[1997] “Maximizing parallelism and minimizing synchronization with affine transforms”, pp. 201-214
  16. Lim[2001] “Blocking and array contraction across arbitrarily nested loops using affine partitioning”, pp. 103-112
  17. Loveman[1977] “Program improvement by source-to-source transformation”, pp. 121-145
  18. Maydan[1991] “An efficient method for exact dependence analysis”, pp. 1-14
  19. McKeller[1969] “The organization of matrices and matrix operations in a paged multiprogramming environment”, pp. 153-165
  20. Mowry[1992] “Design and evaluation of a compiler algorithm for prefetching”, pp. 62-73
  21. Padua[1986] “Advanced compiler optimizations for supercomputers”, pp. 1184-1201
  22. Porterfield[1989] “Software Methods for Improving Cache Performance on Supercomputer Applications”
  23. Pugh[1992] “Eliminating false positives using the omega test”, pp. 140-151
  24. Sarkar[1991] “Optimization of array accesses by collective loop transformations”, pp. 194-205
  25. R.Shostak[1981] “Deciding linear inequalities by computing loop residues”, pp. 769-779
  26. Towle[1976] “Control and Data Dependence for Program Transformation”
  27. Wolf[1991] “A data locality optimizing algorithm”, pp. 30-44
  28. Wolfe[1978] “Techniques for Improving the Inherent Parallelism in Programs”

第12章 过程间分析

paper:23 book:2 website:0

  1. Allen[1974] “Interprocedural data flow analysis”, pp. 398-402
  2. Andersen[1994] “Program Analysis and Specialization for the C Programming Language”
  3. Avots[2005] “Improving software security with a C pointer analysis”, pp. 332-341
  4. Ball[2000] “A symbolic model checker for boolean programs”, pp. 113-130
  5. Ball[2006] “Thorough static analysis of device drivers”, pp. 73-85
  6. Banning[1979] “An efficient way to find the side effects of procedural calls and the aliases of variables”, pp. 29-41
  7. Barth[1978] “A practical interprocedural data flow analysis algorithm”, pp. 724-736
  8. Berndl[2003] “Points-to analysis using BDD’s”, pp. 103-114
  9. Bryant[1986] “Graph-based algorithms for Boolean function manipulation”, pp. 677-691
  10. Bush[2000] “A static analyzer for finding dynamic programming errors”, pp. 775-802
  11. Callahan[1986] “Interprocedural constant propagation”, pp. 152-161
  12. Engler[2000] “Checking system rules using system-specific, programmer-written compiler extensions”, pp. 1-16
  13. Emami[1994] “Context-sensitive interprocedural points-to analysis in the presence of function pointers”, pp. 224-256
  14. Fahndrich[2000] “Scalable context-sensitive flow analysis using instantiation constraints”, pp. 253-263
  15. Heintze[2001] “Ultra-fast aliasing analysis using CLA: a million lines of C code in a second”, pp. 254-263
  16. Lam[2005] “Context-sensitive program analysis as database queries”, pp. 1-12
  17. Livshits[2005] “Finding security vulnerabilities in Java applications using static analysis”, pp. 271-286
  18. Milanova[2002] “Parameterized object sensitivity for points-to and side-effect analyses for Java”, pp. 1-11
  19. Rinard[2004] “A dynamic technique for eliminating buffer overflow vulnerabilities”, pp. 82-90
  20. Ruwase[2004] “A practical dynamic buffer overflow detector”, pp. 159-169
  21. Sharir[1981] “Two approaches to interprocedural data flow analysis”, pp. 189-234
  22. Steensgaard[1996] “Points-to analysis in linear time”
  23. Ullman[2002] “A First Course in Database Systems”
  24. Whaley[2004] “Cloning-based context-sensitive pointer alias analysis using binary decision diagrams”, pp. 131-144
  25. Zhu[2002] “Symbolic Pointer Analysis”, pp.150-157