{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2023,11,15]],"date-time":"2023-11-15T00:07:02Z","timestamp":1700006822997},"reference-count":45,"publisher":"Wiley","issue":"9","license":[{"start":{"date-parts":[[2009,1,29]],"date-time":"2009-01-29T00:00:00Z","timestamp":1233187200000},"content-version":"vor","delay-in-days":0,"URL":"http:\/\/onlinelibrary.wiley.com\/termsAndConditions#vor"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Softw Pract Exp"],"published-print":{"date-parts":[[2009,6,25]]},"abstract":"Abstract<\/jats:title>Type analysis can be characterized by a language\u2010independent collection of standard computational roles such as \u2018typed identifier use\u2019 (e.g. a variable name appearing in an expression) and \u2018dyadic expression\u2019 (e.g. addition of two values). A type analyzer for a specific language is then defined by stating which language construct(s) play each role. The computational roles provide a framework for understanding the general process and a vocabulary for applying that understanding to the solution of particular problems. We have captured this knowledge in attribute grammar modules that are carefully designed to be combinable and adaptable, exporting language\u2010independent roles that define the general type analysis problem. From this collection, the compiler designer instantiates the appropriate modules and identifies the relevant source\u2010language constructs; an attribute grammar processor then weaves the necessary computations into the compiler's semantic analyzer. Our attribute grammar modules provide a precise definition of the actions constituting the various roles and the dependences among them. They can therefore also be used to describe the type analysis process to students, or to specify a hand\u2010coded semantic analyzer. Copyright \u00a9 2009 John Wiley & Sons, Ltd.<\/jats:p>","DOI":"10.1002\/spe.917","type":"journal-article","created":{"date-parts":[[2009,1,29]],"date-time":"2009-01-29T08:49:48Z","timestamp":1233218988000},"page":"833-864","source":"Crossref","is-referenced-by-count":1,"title":["Reusable specification modules for type analysis"],"prefix":"10.1002","volume":"39","author":[{"given":"Uwe","family":"Kastens","sequence":"first","affiliation":[]},{"given":"William M.","family":"Waite","sequence":"additional","affiliation":[]}],"member":"311","published-online":{"date-parts":[[2009,1,29]]},"reference":[{"key":"e_1_2_1_2_2","doi-asserted-by":"publisher","DOI":"10.1145\/6041.6042"},{"key":"e_1_2_1_3_2","doi-asserted-by":"publisher","DOI":"10.1016\/S0169-023X(00)00023-9"},{"key":"e_1_2_1_4_2","doi-asserted-by":"publisher","DOI":"10.1007\/BF01692511"},{"key":"e_1_2_1_5_2","doi-asserted-by":"publisher","DOI":"10.1007\/BF01702865"},{"key":"e_1_2_1_6_2","doi-asserted-by":"publisher","DOI":"10.1145\/210376.197409"},{"key":"e_1_2_1_7_2","doi-asserted-by":"publisher","DOI":"10.1007\/BF01177548"},{"key":"e_1_2_1_8_2","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053381"},{"key":"e_1_2_1_9_2","doi-asserted-by":"publisher","DOI":"10.1145\/383845.383853"},{"key":"e_1_2_1_10_2","doi-asserted-by":"publisher","DOI":"10.1145\/973097.973102"},{"key":"e_1_2_1_11_2","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4612-5192-7"},{"key":"e_1_2_1_12_2","unstructured":"Type analysis tasks.http:\/\/eli\u2010project.sourceforge.net\/elionline\/type_toc.html[11 January2009]."},{"key":"e_1_2_1_13_2","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-54572-7_2"},{"key":"e_1_2_1_14_2","unstructured":"LIDO\u2014Reference manual.http:\/\/eli\u2010project.sourceforge.net\/elionline\/lidoref_toc.html[11 January2009]."},{"key":"e_1_2_1_15_2","unstructured":"CardelliL DonahueJ GlassmanL JordanM KalsowB NelsonG. Modula\u20103 report (revised). Technical Report 52 Digital Systems Research Center Palo Alto CA 1989.ftp:\/\/gatekeeper.research.compaq.com\/pub\/DEC\/SRC\/research\u2010reports\/SRC\u2010052.pdf[11 January2009]."},{"key":"e_1_2_1_16_2","first-page":"86","article-title":"On infinite modes","volume":"30","author":"Koster CHA","year":"1969","journal-title":"ALGOL Bulletin"},{"key":"e_1_2_1_17_2","doi-asserted-by":"publisher","DOI":"10.1145\/366193.366201"},{"key":"e_1_2_1_18_2","unstructured":"Ada reference manual.Standard ISO\/IEC 8652:1995(E) Ada Europe 2006."},{"key":"e_1_2_1_19_2","doi-asserted-by":"publisher","DOI":"10.1145\/947783.948640"},{"key":"e_1_2_1_20_2","doi-asserted-by":"publisher","DOI":"10.1007\/BF02163002"},{"key":"e_1_2_1_21_2","unstructured":"International Standards Organization.Programming languages\u2014C Standard ISO\/IEC 9899 1999."},{"key":"e_1_2_1_22_2","unstructured":"StracheyC. Fundamental Concepts in Programming Languages (Lecture Notes for the International Summer School in Computer Programming). Copenhagen August1967."},{"key":"e_1_2_1_23_2","doi-asserted-by":"crossref","DOI":"10.7551\/mitpress\/2319.001.0001","volume-title":"The Definition of Standard ML\u2014Revised","author":"Milner R","year":"1997"},{"key":"e_1_2_1_24_2","volume-title":"Commentary on Standard ML","author":"Milner R","year":"1991"},{"key":"e_1_2_1_25_2","unstructured":"International Standards Organization.Programming languages\u2014C++ Standard ISO\/IEC 14882 1998."},{"key":"e_1_2_1_26_2","volume-title":"The Java Language Specification","author":"Gosling JA","year":"2005"},{"key":"e_1_2_1_27_2","unstructured":"Symbol specifications.http:\/\/eli\u2010project.sourceforge.net\/elionline\/lidoref_4.html#SEC5[11 January2009]."},{"key":"e_1_2_1_28_2","volume-title":"Design Patterns: Elements of Reusable Object\u2010Oriented Software","author":"Gamma E","year":"1995"},{"key":"e_1_2_1_29_2","unstructured":"OIL reference manual.http:\/\/eli\u2010project.sourceforge.net\/elionline\/oil_toc.html[11 January2009]."},{"issue":"3","key":"e_1_2_1_30_2","first-page":"191","article-title":"The evolution of C++: 1985\u20131989","volume":"2","author":"Stroustrup B","year":"1989","journal-title":"USENIX Computing Systems"},{"key":"e_1_2_1_31_2","volume-title":"The Design and Evolution of C++","author":"Stroustrup B","year":"1994"},{"key":"e_1_2_1_32_2","first-page":"34","article-title":"The equivalence of modes and the equivalence of finite automata","volume":"35","author":"Kral J","year":"1973","journal-title":"ALGOL Bulletin"},{"key":"e_1_2_1_33_2","volume-title":"The Design and Analysis of Computer Algorithms","author":"Aho AV","year":"1974"},{"key":"e_1_2_1_34_2","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2007.02.003"},{"issue":"3","key":"e_1_2_1_35_2","first-page":"301","article-title":"Reference attribute grammars","volume":"24","author":"Hedin G","year":"2000","journal-title":"Informatica (Slovenia)"},{"key":"e_1_2_1_36_2","doi-asserted-by":"crossref","unstructured":"AvgustinovP EkmanT TibbleJ.Modularity first: A case for mixing AOP and attribute grammars. AOSD '08: Proceedings of the Seventh International Conference on Aspect\u2010oriented Software Development New York 2008;25\u201335. Association for Computing Machinery.","DOI":"10.1145\/1353482.1353486"},{"key":"e_1_2_1_37_2","unstructured":"Funnelweb. Documentation examples download fromhttp:\/\/www.ross.net\/funnelweb\/[11 January2009]."},{"key":"e_1_2_1_38_2","series-title":"Electronic Notes in Theoretical Computer Science","first-page":"21","volume-title":"Circular Reference Attributed Grammars\u2014Their Evaluation and Applications","author":"Magnusson E","year":"2003"},{"key":"e_1_2_1_39_2","series-title":"Electronic Notes in Theoretical Computer Science","first-page":"37","volume-title":"AspectLISA: An Aspect\u2010oriented Compiler Construction System Based on Attribute Grammars","author":"Rebernak D","year":"2006"},{"key":"e_1_2_1_40_2","unstructured":"SaraivaJ SwierstraD.Generic attribute grammars. Second Workshop on Attribute Grammars and their Applications WAGA '99 Amsterdam The Netherlands Parigot D Mernik M (eds.). INRIA Rocquencourt March 1999;185\u2013204."},{"key":"e_1_2_1_41_2","unstructured":"Eli: An integrated toolset for compiler construction.http:\/\/eli\u2010project.sourceforge.net\/[11 January2009]."},{"key":"e_1_2_1_42_2","volume-title":"Generating Software from Specifications","author":"Kastens U","year":"2007"},{"key":"e_1_2_1_43_2","unstructured":"Gnu pascal test suite.http:\/\/www.gnu\u2010pascal.de[11 January2009]."},{"key":"e_1_2_1_44_2","unstructured":"gcc.c\u2010torture.http:\/\/gcc.gnu.org[11 January2009]."},{"key":"e_1_2_1_45_2","unstructured":"Jacks.http:\/\/sourceware.org\/mauve[11 January2009]."},{"key":"e_1_2_1_46_2","doi-asserted-by":"publisher","DOI":"10.1145\/1118890.1118892"}],"container-title":["Software: Practice and Experience"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/api.wiley.com\/onlinelibrary\/tdm\/v1\/articles\/10.1002%2Fspe.917","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/pdf\/10.1002\/spe.917","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,11,14]],"date-time":"2023-11-14T14:19:34Z","timestamp":1699971574000},"score":1,"resource":{"primary":{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/10.1002\/spe.917"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2009,1,29]]},"references-count":45,"journal-issue":{"issue":"9","published-print":{"date-parts":[[2009,6,25]]}},"alternative-id":["10.1002\/spe.917"],"URL":"https:\/\/doi.org\/10.1002\/spe.917","archive":["Portico"],"relation":{},"ISSN":["0038-0644","1097-024X"],"issn-type":[{"value":"0038-0644","type":"print"},{"value":"1097-024X","type":"electronic"}],"subject":[],"published":{"date-parts":[[2009,1,29]]}}}