BASIC Compiler

Total Page:16

File Type:pdf, Size:1020Kb

BASIC Compiler 6 Example: BASIC Compiler Program ®le for this chapter: basic The BASIC programming language was designed by John Kemeny and Thomas Kurtz in the late 1960s. (The name is an acronym for Beginner's All-purpose Symbolic Instruction Code.) It was ®rst implemented on a large, central computer facility at Dartmouth; the designers' goal was to have a language that all students could use for simple problems, in contrast to the arcane programming languages used by most experts at that time. A decade later, when the microcomputer was invented, BASIC took on a new importance. Kemeny and Kurtz designed a simple language for the sake of the users, but that simplicity also made the language easy for the computer! Every programming language requires a computer program to translate it into instructions that the computer can carry out. For example, the Logo programs you write are translated by a Logo interpreter. But Logo is a relatively complex language, and a Logo interpreter is a pretty big program. The ®rst microcomputers had only a few thousand bytes of memory. (Today's home computers, by contrast, have several million bytes.) Those early personal computers couldn't handle Logo, but it was possible to write a BASIC interpreter that would ®t them. As a result, BASIC became the near-universal language for amateur computer enthusiasts in the late 1970s and early 1980s. Today's personal computers come with translators for a wide variety of programming languages, and also with software packages that enable many people to accomplish their computing tasks without writing programs of their own at all. BASIC is much less widely used today, although it has served as the core for Microsoft's ªVisual Basicº language. In this chapter, I want to show how Logo's define command can be used in a program-writing program. My program will translate BASIC programs into Logo programs. I chose BASIC for the same reason the early microcomputers used it: It's a small language and the translator is relatively easy to write. (Kemeny and Kurtz, the designers of BASIC, have criticized the microcomputer implementations as too simple 81 and as unfaithful to their original goals. My implementation will share that defect, to make the project easier. Don't use this version as a basis on which to judge the language! For that you should investigate True Basic, the version that Kemeny and Kurtz wrote themselves for personal computers.) Here's a typical short BASIC program: 10 print "Table of Squares" 20 print 30 print "How many values would you like?" 40 input num 50 for i=1 to num 60 print i, i*i 70 next i 80 end And here's what happens when we run it: Table of Squares How many values would you like? 5 1 1 2 4 3 9 4 16 5 25 A Short Course in BASIC Each line in the sample BASIC program begins with a line number. These numbers are used for program editing. Instead of the modern screen editors with which you're familiar, the early versions of BASIC had a very primitive editing facility; you could replace a line by typing a new line with the same number. There was no way to replace less than an entire line. To delete a line completely, you'd enter a line containing just the number. The reason the line numbers in this program are multiples of ten is to leave room for inserting new lines. For example, I could say 75 print "Have a nice day." to insert a new line between lines 70 and 80. (By the way, the earliest versions of Logo used a similar line numbering system, except that each Logo procedure was separately 82 Chapter 6 Example: BASIC Compiler numbered. The editing technique isn't really part of the language design; early systems used ªline editorsº because they had typewriter-like paper terminals instead of today's display screens. I'm using a line editor in this project because it's easy to implement!) The BASIC language consists of one or two dozen commands, depending on the version used. My BASIC dialect understands only these ten commands: LET variable = value PRINT values INPUT variables FOR variable = value TO value NEXT variable IF value THEN command GOTO linenumber GOSUB linenumber RETURN END Unlike Logo procedure calls, which consist of the procedure name followed by inputs in a uniform format, each BASIC command has its own format, sometimes including internal separators such as the equal sign and the word to in the for command format, or the word then in the if command format. In some versions of BASIC, including this one, a single line can contain more than one command, if the commands are separated with colons. Thus the same program shown earlier could also be written this way: 10 print "Table of Squares":print 30 print "How many values would you like?":input num 50 for i=1 to num : print i, i*i : next i 80 end The let command assigns a value to a variable, like Logo's make procedure. Unlike Logo, BASIC does not have the rule that all inputs are evaluated before applying the command. In particular, the word after let must be the name of the variable, not an expression whose value is the name. Therefore the name is not quoted. Also, a variable can't have the same name as a procedure, so there is no need for anything like Logo's use of the colon to indicate a variable value. (This restricted version of BASIC doesn't have named procedures at all, like some early microcomputer versions.) make "x :y + 3 (Logo) let x = y + 3 (BASIC) A Short Course in BASIC 83 In my subset of BASIC, the value of a variable must be a number. More complete BASIC dialects include string variables (like words in Logo) and arrays (like Logo's arrays). The value to be assigned to a variable can be computed using an arithmetic expression made up of variables, numbers, the arithmetic operators +, -, *, and /, and parentheses for grouping. The print command is similar to Logo's print procedure in that it prints a line on the screen. That line can include any number of values. Here is an example print command: print "x = "; x, "y = "; y, "sum = "; x+y In this example two kinds of values are printed: arithmetic values (as in the let command) and strings. A string is any sequence of characters surrounded by quotation marks. Notice that the values in this example are separated by punctuation marks, either commas or semicolons. When a semicolon is used, the two values are printed right next to each other, with no space between them. (That's why each of the strings in this example ends with a space.) When a comma is used, BASIC prints a tab character between the two values, so that values on different lines will line up to form columns. (Look again at the table of squares example at the beginning of this chapter.) The input command is the opposite of print; it reads values from the keyboard and assigns them to variables. There is nothing in Logo exactly like input. Instead, Logo has operations readword and readlist that output the contents of a line; those values can be assigned to variables using make or can be used in some other way. The Logo approach is more ¯exible, but the early versions of BASIC didn't have anything like Logo's operations. The input command will also accept a string in quotation marks before its list of variables; that string is printed as a prompt before BASIC reads from the keyboard. (BASIC does not start a new line after printing the prompt, so the effect is like Logo's type command rather than like print.) Here's an example: input "Please enter x and y: " x,y The user can type the values for x and y on the same line, separated by spaces, or on separate lines. BASIC keeps reading lines until it has collected enough numbers for the listed variables. Notice that the variable names in the input command must be separated by commas, not by semicolons. The for and next commands work together to provide a numeric iteration capability like Berkeley Logo's for procedure. The for command format includes a 84 Chapter 6 Example: BASIC Compiler variable name, a starting value, and an ending value. (The step value is always 1.) The named variable is given the speci®ed starting value. If that value is less than the ending value, then all of the commands between the for command and the matching next command (the one with the same named variable) are carried out. Then the variable is increased by 1, and the process continues until the ending value is reached. For and next pairs with different variables can be nested: 10 input "Input size: " num 20 for i = 1 to num 30 for j = i to num 40 print i;" ";j 50 next j:next i 60 end Input size: 4 1 1 1 2 1 3 1 4 2 2 2 3 2 4 3 3 3 4 4 4 Notice that the next j must come before the next i so that the for/next pairs are properly nested. The if command allows conditional execution, much like Logo's if command, but with a different notation. Instead of taking an instruction list as an input, BASIC's if uses the keyword then to introduce a single conditional command. (If you want to make more than one command conditional, you must combine if with goto, described next.) The value that controls the if must be computed using one of the operators =, <, or > for numeric comparison.* * Notice that the equal sign has two meanings in BASIC.
Recommended publications
  • COM 113 INTRO to COMPUTER PROGRAMMING Theory Book
    1 [Type the document title] UNESCO -NIGERIA TECHNICAL & VOCATIONAL EDUCATION REVITALISATION PROJECT -PHASE II NATIONAL DIPLOMA IN COMPUTER TECHNOLOGY Computer Programming COURSE CODE: COM113 YEAR I - SE MESTER I THEORY Version 1: December 2008 2 [Type the document title] Table of Contents WEEK 1 Concept of programming ................................................................................................................ 6 Features of a good computer program ............................................................................................ 7 System Development Cycle ............................................................................................................ 9 WEEK 2 Concept of Algorithm ................................................................................................................... 11 Features of an Algorithm .............................................................................................................. 11 Methods of Representing Algorithm ............................................................................................ 11 Pseudo code .................................................................................................................................. 12 WEEK 3 English-like form .......................................................................................................................... 15 Flowchart .....................................................................................................................................
    [Show full text]
  • Introduction to Programming in Fortran 77 for Students of Science and Engineering
    Introduction to programming in Fortran 77 for students of Science and Engineering Roman GrÄoger University of Pennsylvania, Department of Materials Science and Engineering 3231 Walnut Street, O±ce #215, Philadelphia, PA 19104 Revision 1.2 (September 27, 2004) 1 Introduction Fortran (FORmula TRANslation) is a programming language designed speci¯cally for scientists and engineers. For the past 30 years Fortran has been used for such projects as the design of bridges and aeroplane structures, it is used for factory automation control, for storm drainage design, analysis of scienti¯c data and so on. Throughout the life of this language, groups of users have written libraries of useful standard Fortran programs. These programs can be borrowed and used by other people who wish to take advantage of the expertise and experience of the authors, in a similar way in which a book is borrowed from a library. Fortran belongs to a class of higher-level programming languages in which the programs are not written directly in the machine code but instead in an arti¯cal, human-readable language. This source code consists of algorithms built using a set of standard constructions, each consisting of a series of commands which de¯ne the elementary operations with your data. In other words, any algorithm is a cookbook which speci¯es input ingredients, operations with them and with other data and ¯nally returns one or more results, depending on the function of this algorithm. Any source code has to be compiled in order to obtain an executable code which can be run on your computer.
    [Show full text]
  • A Beginner's Guide to Freebasic
    A Beginner’s Guide to FreeBasic Richard D. Clark Ebben Feagan A Clark Productions / HMCsoft Book Copyright (c) Ebben Feagan and Richard Clark. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". The source code was compiled under version .17b of the FreeBasic compiler and tested under Windows 2000 Professional and Ubuntu Linux 6.06. Later compiler versions may require changes to the source code to compile successfully and results may differ under different operating systems. All source code is released under version 2 of the Gnu Public License (http://www.gnu.org/copyleft/gpl.html). The source code is provided AS IS, WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Microsoft Windows®, Visual Basic® and QuickBasic® are registered trademarks and are copyright © Microsoft Corporation. Ubuntu is a registered trademark of Canonical Limited. 2 To all the members of the FreeBasic community, especially the developers. 3 Acknowledgments Writing a book is difficult business, especially a book on programming. It is impossible to know how to do everything in a particular language, and everyone learns something from the programming community. I have learned a multitude of things from the FreeBasic community and I want to send my thanks to all of those who have taken the time to post answers and examples to questions.
    [Show full text]
  • Manualgambas.Pdf
    Introducción Este míni-manual esta pensado y orientado para los asistentes al taller de Gambas. Dado que, a priori, esperamos la asistencia de gente sin conocimientos previos de programación este texto va a ser escueto y muy elemental. Además de dar una formación teórica básica tiene el propósito de servir como chuleta para poder consultar las sintaxis más elementales como por ejemplo de las condicionales, bucles, etc. Nuestra herramienta: GAMBAS Vamos a usar Gambas, un lenguaje de programación visual similar al Visual Basic de Microsoft. Gambas dispone de su propio IDE. Un IDE, por sus siglas en inglés, es un entorno de desarrollo integrado. Gambas es lo que se conoce como un lenguaje de programación interpretado y como ocurre con GNU que es un acrónimo recurrente (Gnu No es Unix) Gambas significa Gambas Almost Means BASic, que traducido al castellano es Gambas Casi es BASic. Los IDE's son unos programas que aglutinan todo lo que necesitamos para programar. Tenemos un editor para picar (vamos a ir introduciéndonos en la jerga del programador) código, con resaltado por colores, autocompletado para ayudarnos en la edición, señalización de errores, etc. Un depurador para poder controlar la ejecución del programa y evaluar su comportamiento con sus inspectores de variables, objetos, etc. Un compilador para generar los binarios, bytecodes, ejecutables, etc. Un empaquetador para crear los instaladores. Además disponen de otras herramientas como gestores de servicios SVC para el control de versiones como GIT o similares. Editores de conexión a bases de datos, etc. Lo primero que vemos al ejecutar Gambas la ventana de bienvenida y nos da varias opciones, abrir un proyecto existente, crear uno nuevo o abrir recientes.
    [Show full text]
  • BASIC CODE 2010 Edition by the League of Minnesota Cities Duke Addicks, Special Counsel Rachel Carlson, Staff Attorney
    THE MINNESOTA BASIC CODE 2010 Edition By The League of Minnesota Cities Duke Addicks, Special Counsel Rachel Carlson, Staff Attorney Published by American Legal Publishing Corporation 432 Walnut Street, 12th Floor Cincinnati, Ohio 45202 Tel: (800) 445-5588 Fax: (513) 763-3562 E-Mail: [email protected] Internet: http://www.amlegal.com PREFACE TO THE MINNESOTA BASIC CODE, 2010 EDITION The Minnesota Basic Code This League of Minnesota Cities/American Legal Publishing (LMC/ALP) Minnesota Basic Code (MBC) is an effort to provide a modern and comprehensive code of ordinances for smaller Minnesota cities without the expense of a customized code of ordinances. Its provisions are also useful to all Minnesota cities that wish to have models for the basic city ordinances on the subjects contained in the code. The code reflects current state statutes, case law and rules through January, 2010. The MBC will be supplemented periodically to reflect legislative enactments and new case law and rules. The supplements will consist of new pages which will replace or be in addition to the pages contained in this edition. In addition, the supplements will contain new model ordinances that will be included into the MBC unless the city decides not to incorporate them into their code. Authors and Editors This Minnesota Basic Code is partly based on the Model Ordinance Code for Minnesota Cities, Revised Edition 1980, prepared by Orville C. Peterson, former Executive Director of the League of Minnesota Cities, and the 1989 Model Ordinance Code prepared by Thomas L. Grundhoefer, then Staff Attorney and now General Counsel for the League.
    [Show full text]
  • About ILE C/C++ Compiler Reference
    IBM i 7.3 Programming IBM Rational Development Studio for i ILE C/C++ Compiler Reference IBM SC09-4816-07 Note Before using this information and the product it supports, read the information in “Notices” on page 121. This edition applies to IBM® Rational® Development Studio for i (product number 5770-WDS) and to all subsequent releases and modifications until otherwise indicated in new editions. This version does not run on all reduced instruction set computer (RISC) models nor does it run on CISC models. This document may contain references to Licensed Internal Code. Licensed Internal Code is Machine Code and is licensed to you under the terms of the IBM License Agreement for Machine Code. © Copyright International Business Machines Corporation 1993, 2015. US Government Users Restricted Rights – Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. Contents ILE C/C++ Compiler Reference............................................................................... 1 What is new for IBM i 7.3.............................................................................................................................3 PDF file for ILE C/C++ Compiler Reference.................................................................................................5 About ILE C/C++ Compiler Reference......................................................................................................... 7 Prerequisite and Related Information..................................................................................................
    [Show full text]
  • AN125: Integrating Raisonance 8051 Tools Into The
    AN125 INTEGRATING RAISONANCE 8051 TOOLS INTO THE SILICON LABS IDE 1. Introduction 4. Configure the Tool Chain This application note describes how to integrate the Integration Dialog Raisonance 8051 Tools into the Silicon Laboratories Under the 'Project' menu, select 'Tool Chain Integration’ IDE (Integrated Development Environment). Integration to bring up the dialog box shown below. Raisonance provides an efficient development environment with (Ride 7) is the default. To use Raisonance (Ride 6), you compose, edit, build, download and debug operations can select it from the 'Preset Name' drop down box integrated in the same program. under 'Tools Definition Presets'. Next, define the Raisonance assembler, compiler, and linker as shown in 2. Key Points the following sections. The Intel OMF-51 absolute object file generated by the Raisonance 8051 tools enables source-level debug from the Silicon Labs IDE. Once Raisonance Tools are integrated into the IDE they are called by simply pressing the ‘Assemble/ Compile Current File’ button or the ‘Build/Make Project’ button. See the “..\Silabs\MCU\Examples” directory for examples that can be used with the Raisonance tools. Information in this application note applies to Version 4.00 and later of the Silicon Labs IDE and Ride7 and later of the Raisonance 8051 tools. 4.1. Assembler Definition 1. Under the ‘Assembler’ tab, if the assembler 3. Create a Project in the Silicon executable is not already defined, click the browse Labs IDE button next to the ‘Executable:’ text box, and locate the assembler executable. The default location for A project is necessary in order to link assembly files the Raisonance assembler is: created by the compiler and build an absolute ‘OMF-51’ C:\Program Files\Raisonance\Ride7\bin\ma51.exe output file.
    [Show full text]
  • Lindoo2019 Miami Xojo Presentation
    Back to the Basics, in an Two Effort to Improve Student distinct retention in Intro to schools Programming Classes CS Dr. Ed Lindoo Associate Professor Computer Information Systems (CC&IS) 3 year average CS and CIS Drop/Fail rate • 3 year average • 50+ percent drop/fail rate in intro to programming class Two CIS classes taught by CS • Specifically CC&IS students were failing at a 62% rate! • Big problem! • If they fail this course, they don’t continue in the program • Represents a huge loss of revenue to the school • Intro to programming class taught by CS department • I was asked by our Dean to “Fix it” • Computer Science students and Information Systems students • Performed extensive research on why students fail. (business students) took the class together. • After sifting through all the research, I decided to go back to • Business students don’t have the strong technical skills to the basics, BASIC programing that is. jump into a Java or C++ course • I started thinking back to my days of BASIC and QBASIC • Certainly not as an intro class • Remember BASIC? • But that’s what was happening • Well that wasn’t going to cut it! • Further research found a common theme • Visual Programming Environments • Easier to understand languages. DON’T START WITH C++ • I thought long and hard about it • Re-wrote the entire course, Intro to Programming based on Xojo • Even though I had done a lot of work in VB.net, I felt like that was too heavy for this course • Ahh, but there’s a catch…………………isn’t there always? • Then I remembered back to my days of using Real Basic, so I • Must pass a Java course once they pass this class.
    [Show full text]
  • Compiler Error Messages Considered Unhelpful: the Landscape of Text-Based Programming Error Message Research
    Working Group Report ITiCSE-WGR ’19, July 15–17, 2019, Aberdeen, Scotland Uk Compiler Error Messages Considered Unhelpful: The Landscape of Text-Based Programming Error Message Research Brett A. Becker∗ Paul Denny∗ Raymond Pettit∗ University College Dublin University of Auckland University of Virginia Dublin, Ireland Auckland, New Zealand Charlottesville, Virginia, USA [email protected] [email protected] [email protected] Durell Bouchard Dennis J. Bouvier Brian Harrington Roanoke College Southern Illinois University Edwardsville University of Toronto Scarborough Roanoke, Virgina, USA Edwardsville, Illinois, USA Scarborough, Ontario, Canada [email protected] [email protected] [email protected] Amir Kamil Amey Karkare Chris McDonald University of Michigan Indian Institute of Technology Kanpur University of Western Australia Ann Arbor, Michigan, USA Kanpur, India Perth, Australia [email protected] [email protected] [email protected] Peter-Michael Osera Janice L. Pearce James Prather Grinnell College Berea College Abilene Christian University Grinnell, Iowa, USA Berea, Kentucky, USA Abilene, Texas, USA [email protected] [email protected] [email protected] ABSTRACT of evidence supporting each one (historical, anecdotal, and empiri- Diagnostic messages generated by compilers and interpreters such cal). This work can serve as a starting point for those who wish to as syntax error messages have been researched for over half of a conduct research on compiler error messages, runtime errors, and century. Unfortunately, these messages which include error, warn- warnings. We also make the bibtex file of our 300+ reference corpus ing, and run-time messages, present substantial difficulty and could publicly available.
    [Show full text]
  • ROSE Tutorial: a Tool for Building Source-To-Source Translators Draft Tutorial (Version 0.9.11.115)
    ROSE Tutorial: A Tool for Building Source-to-Source Translators Draft Tutorial (version 0.9.11.115) Daniel Quinlan, Markus Schordan, Richard Vuduc, Qing Yi Thomas Panas, Chunhua Liao, and Jeremiah J. Willcock Lawrence Livermore National Laboratory Livermore, CA 94550 925-423-2668 (office) 925-422-6278 (fax) fdquinlan,panas2,[email protected] [email protected] [email protected] [email protected] [email protected] Project Web Page: www.rosecompiler.org UCRL Number for ROSE User Manual: UCRL-SM-210137-DRAFT UCRL Number for ROSE Tutorial: UCRL-SM-210032-DRAFT UCRL Number for ROSE Source Code: UCRL-CODE-155962 ROSE User Manual (pdf) ROSE Tutorial (pdf) ROSE HTML Reference (html only) September 12, 2019 ii September 12, 2019 Contents 1 Introduction 1 1.1 What is ROSE.....................................1 1.2 Why you should be interested in ROSE.......................2 1.3 Problems that ROSE can address...........................2 1.4 Examples in this ROSE Tutorial...........................3 1.5 ROSE Documentation and Where To Find It.................... 10 1.6 Using the Tutorial................................... 11 1.7 Required Makefile for Tutorial Examples....................... 11 I Working with the ROSE AST 13 2 Identity Translator 15 3 Simple AST Graph Generator 19 4 AST Whole Graph Generator 23 5 Advanced AST Graph Generation 29 6 AST PDF Generator 31 7 Introduction to AST Traversals 35 7.1 Input For Example Traversals............................. 35 7.2 Traversals of the AST Structure............................ 36 7.2.1 Classic Object-Oriented Visitor Pattern for the AST............ 37 7.2.2 Simple Traversal (no attributes)....................... 37 7.2.3 Simple Pre- and Postorder Traversal....................
    [Show full text]
  • Programming Manual Version 2.0
    www.tinybasic.de programming manual version 2.0 TinyBasic Programming Manual Version 2.0 April 2008 altenburg © 2006-2008 by U. Altenburg CHAPTER 1 Introduction.....................................................8 EDITOR, COMPILER, DOWNLOAD, CONSOLE, SCOPE CHAPTER 2 Preprocessor……….........................................12 #TARGET, #INCLUDE, #DEFINE, #UNDEF, #IFDEF, #IFNDEF, #ELSE, #ENDIF CHAPTER 3 Variables and Types.......................................14 CHAR, BYTE, WORD, INTEGER, LONG, FLOAT, DATA, READ, RESTORE, LOAD, STORE, INC, DEC CHAPTER 4 Maths and Expressions..................................19 +, -, *, /, <, >, <=, >=, <>, <<, >>, (), [], NOT, AND, OR, XOR, MOD CHAPTER 5 Control Flow...................................................22 IF, THEN, ELSE, ELSIF, ENDIF, DO, LOOP, FOR, NEXT, WHILE, WEND, EXIT, ON, GOTO, GOSUB, RETURN, WAIT, PAUSE TinyBasic Programming www.tinybasic.de 5 CHAPTER 6 Functions.......................................................28 LO, HI, MIN, MAX, LEN, POS, VAL, PI, SIN, COS, TAN, ATN, DEG, RAD, SQR, EXP, LOG, POW, ABS, INT, ROUND, POINT, PEEK, EOF CHAPTER 7 Input and Output...........................................33 PUT, GET, PRINT, INPUT, OPEN, CLOSE, FLUSH, FIND, INITGSM, SENDSMS, RECVSMS, ERR, CR, NL, CHR, HEX, SPC, TAB, USING CHAPTER 8 Date and Time................................................40 SETCLOCK, DATE, TIME, HOUR, MINUTE, SECOND, DAY, MONTH, YEAR CHAPTER 9 Displays and Graphics...................................42 SETDISPLAY, SETSYMBOL, CLS, FONT, COLOR, PLOT, MOVE, DRAW, FRAME,
    [Show full text]
  • Defining Computer Program Parts Under Learned Hand's Abstractions Test in Software Copyright Infringement Cases
    Michigan Law Review Volume 91 Issue 3 1992 Defining Computer Program Parts Under Learned Hand's Abstractions Test in Software Copyright Infringement Cases John W.L. Ogilive University of Michigan Law School Follow this and additional works at: https://repository.law.umich.edu/mlr Part of the Computer Law Commons, Intellectual Property Law Commons, and the Judges Commons Recommended Citation John W. Ogilive, Defining Computer Program Parts Under Learned Hand's Abstractions Test in Software Copyright Infringement Cases, 91 MICH. L. REV. 526 (1992). Available at: https://repository.law.umich.edu/mlr/vol91/iss3/5 This Note is brought to you for free and open access by the Michigan Law Review at University of Michigan Law School Scholarship Repository. It has been accepted for inclusion in Michigan Law Review by an authorized editor of University of Michigan Law School Scholarship Repository. For more information, please contact [email protected]. NOTE Defining Computer Program Parts Under Learned Hand's Abstractions Test in Software Copyright Infringement Cases John W.L. Ogilvie INTRODUCTION Although computer programs enjoy copyright protection as pro­ tectable "literary works" under the federal copyright statute, 1 the case law governing software infringement is confused, inconsistent, and even unintelligible to those who must interpret it.2 A computer pro­ gram is often viewed as a collection of different parts, just as a book or play is seen as an amalgamation of plot, characters, and other familiar parts. However, different courts recognize vastly different computer program parts for copyright infringement purposes. 3 Much of the dis­ array in software copyright law stems from mutually incompatible and conclusory program part definitions that bear no relation to how a computer program is actually designed and created.
    [Show full text]