Xtext User Guide

Total Page:16

File Type:pdf, Size:1020Kb

Xtext User Guide Xtext User Guide Xtext User Guide Heiko Behrens, Michael Clay, Sven Efftinge, Moritz Eysholdt, Peter Friese, Jan Köhnlein, Knut Wannheden, Sebastian Zarnekow and contributors Copyright 2008 - 2010 Xtext 1.0 1 1. Overview .................................................................................................................... 1 1.1. What is Xtext? ................................................................................................... 1 1.2. How Does It Work? ............................................................................................ 1 1.3. Xtext is Highly Configurable ................................................................................ 1 1.4. Who Uses Xtext? ................................................................................................ 1 1.5. Who is Behind Xtext? ......................................................................................... 1 1.6. What is a Domain-Specific Language ..................................................................... 2 2. Getting Started ............................................................................................................ 3 2.1. Creating a DSL .................................................................................................. 3 2.1.1. Create an Xtext Project ............................................................................. 3 2.1.2. Project Layout ......................................................................................... 4 2.1.3. Build Your Own Grammar ......................................................................... 5 2.1.4. Generate Language Artifacts ...................................................................... 8 2.1.5. Run the Generated IDE Plug-in ................................................................... 8 2.1.6. Adding a Namespace Concept .................................................................... 9 2.2. Processing Xtext Models .................................................................................... 11 2.2.1. Loading a Resource ................................................................................ 12 2.2.2. Working with EMF Models ...................................................................... 12 2.2.3. Working with the Parse Tree (aka Node Model) ........................................... 13 2.2.4. Working with the Grammar ...................................................................... 13 2.2.5. Working with Live Models ....................................................................... 14 2.2.6. Summary ............................................................................................... 14 2.3. Writing a Code Generator ................................................................................... 15 2.3.1. Xpand and MWE2 .................................................................................. 15 2.3.2. The Empty Generator Project .................................................................... 15 2.3.3. Replacing the Example Model File (1) ........................................................ 15 2.3.4. The Modeling Workflow Engine File (2) ..................................................... 16 2.3.5. Using Xpand (3) and Xtend (4) for Code Generation ..................................... 18 3. The Grammar Language ............................................................................................ 21 3.1. A First Example ............................................................................................... 21 3.2. The Syntax ...................................................................................................... 22 3.2.1. Language Declaration .............................................................................. 22 3.2.2. EPackage Declarations ............................................................................. 22 3.2.3. Rules .................................................................................................... 24 3.2.4. Parser Rules ........................................................................................... 26 3.2.5. Hidden Terminal Symbols ........................................................................ 30 3.2.6. Data Type Rules ..................................................................................... 31 3.2.7. Enum Rules ........................................................................................... 31 3.3. Ecore Model Inference ....................................................................................... 32 3.3.1. Type and Package Generation ................................................................... 32 3.3.2. Feature and Type Hierarchy Generation ...................................................... 32 3.3.3. Enum Literal Generation .......................................................................... 33 3.3.4. Feature Normalization ............................................................................. 33 3.3.5. Customized Post Processing ...................................................................... 33 3.3.6. Error Conditions ..................................................................................... 34 3.4. Grammar Mixins ............................................................................................... 34 3.5. Common Terminals ........................................................................................... 34 4. Configuration ............................................................................................................ 36 4.1. The Generator .................................................................................................. 36 4.1.1. A Short Introduction to MWE2 ................................................................. 36 4.1.2. General Architecture ............................................................................... 37 4.1.3. Standard Generator Fragments .................................................................. 40 4.2. Dependency Injection in Xtext with Google Guice .................................................. 40 4.2.1. The Module API .................................................................................... 41 4.2.2. Obtaining an Injector .............................................................................. 42 5. Runtime Concepts ...................................................................................................... 43 5.1. Runtime Setup (ISetup) ...................................................................................... 43 5.2. Setup within Eclipse-Equinox (OSGi) ................................................................... 43 Xtext 1.0 ii Xtext User Guide 5.3. Logging ........................................................................................................... 43 5.4. Validation ........................................................................................................ 43 5.4.1. Automatic Validation .............................................................................. 43 5.4.2. Custom Validation .................................................................................. 45 5.4.3. Validation with the Check Language .......................................................... 45 5.4.4. Validating Manually ................................................................................ 46 5.4.5. Test Validators ....................................................................................... 46 5.5. Linking ........................................................................................................... 48 5.5.1. Declaration of Crosslinks ......................................................................... 48 5.5.2. Default Runtime Behavior (Lazy Linking) ................................................... 48 5.6. Scoping ........................................................................................................... 48 5.6.1. Global Scopes and IResourceDescriptions ................................................... 49 5.6.2. Local Scoping ........................................................................................ 54 5.6.3. Imported Namespace-Aware Scoping ......................................................... 56 5.7. Value Converter ................................................................................................ 57 5.7.1. Annotation-Based Value Converters ........................................................... 57 5.8. Serialization ..................................................................................................... 57 5.8.1. The Contract .......................................................................................... 58 5.8.2. Roles of the Semantic Model and the Node Model During Serialization ............. 58 5.8.3. Parse Tree Constructor ............................................................................ 58 5.8.4. Options ................................................................................................. 59 5.8.5. Preserving Comments from the Node Model ................................................ 59 5.8.6. Transient Values ..................................................................................... 59 5.8.7. Unassigned Text ..................................................................................... 60 5.8.8. Cross-Reference Serializer ........................................................................ 60 5.8.9. Merge Whitespaces ................................................................................
Recommended publications
  • Eurosim Mk7.1 Software User's Manual
    EuroSim Mk7.1 Software User’s Manual iss: 8 rev: 1 SUM NLR-EFO-SUM-2 Summary EuroSim Mk7.1 is an engineering simulator framework to support the quick development of hard real- time simulators. EuroSim provides a reconfigurable real-time execution environment with the possibility of man-in-the-loop and/or hardware-in-the-loop additions. Extensive Graphical User Interfaces assist the user in constructing, using and analysing real-time simulations, resolving the user from the specialist software engineering knowledge required to built hard real-time systems. EuroSim has been developed initially to support the verification of space (sub) systems defined by ESA programmes of various scales. It’s heritage lies in the development of the European Robotic Arm(ERA) project where EuroSim was essential in the development and verification of the large symmetrical arm that can move accross the International Space Station. Up to today, EuroSim installations are still used around the world to support ERA’s mission preparation, verification and training. After initial devel- opment and application for ERA, EuroSim has been succesfully used in the development, verification and training of the Autonomous Transfer Vehicle (ATV) with multiple installations worldwide. Other space programs where EuroSim has been applied since are Galileo, Herschel & Planck, Gaia to name a few major missions. Currently EuroSim has made its way in to other domains as well, with application in the F-35 Lightning-II Embedded Training program and simulations in support of road tunnel system verification. This document contains both the User Guide as well as the Reference Guide documentation and consists of five volumes.
    [Show full text]
  • A Grammar-Based Approach to Class Diagram Validation Faizan Javed Marjan Mernik Barrett R
    A Grammar-Based Approach to Class Diagram Validation Faizan Javed Marjan Mernik Barrett R. Bryant, Jeff Gray Department of Computer and Faculty of Electrical Engineering and Department of Computer and Information Sciences Computer Science Information Sciences University of Alabama at Birmingham University of Maribor University of Alabama at Birmingham 1300 University Boulevard Smetanova 17 1300 University Boulevard Birmingham, AL 35294-1170, USA 2000 Maribor, Slovenia Birmingham, AL 35294-1170, USA [email protected] [email protected] {bryant, gray}@cis.uab.edu ABSTRACT between classes to perform the use cases can be modeled by UML The UML has grown in popularity as the standard modeling dynamic diagrams, such as sequence diagrams or activity language for describing software applications. However, UML diagrams. lacks the formalism of a rigid semantics, which can lead to Static validation can be used to check whether a model conforms ambiguities in understanding the specifications. We propose a to a valid syntax. Techniques supporting static validation can also grammar-based approach to validating class diagrams and check whether a model includes some related snapshots (i.e., illustrate this technique using a simple case-study. Our technique system states consisting of objects possessing attribute values and involves converting UML representations into an equivalent links) desired by the end-user, but perhaps missing from the grammar form, and then using existing language transformation current model. We believe that the latter problem can occur as a and development tools to assist in the validation process. A string system becomes more intricate; in this situation, it can become comparison metric is also used which provides feedback, allowing hard for a developer to detect whether a state envisaged by the the user to modify the original class diagram according to the user is included in the model.
    [Show full text]
  • Unravel Data Systems Version 4.5
    UNRAVEL DATA SYSTEMS VERSION 4.5 Component name Component version name License names jQuery 1.8.2 MIT License Apache Tomcat 5.5.23 Apache License 2.0 Tachyon Project POM 0.8.2 Apache License 2.0 Apache Directory LDAP API Model 1.0.0-M20 Apache License 2.0 apache/incubator-heron 0.16.5.1 Apache License 2.0 Maven Plugin API 3.0.4 Apache License 2.0 ApacheDS Authentication Interceptor 2.0.0-M15 Apache License 2.0 Apache Directory LDAP API Extras ACI 1.0.0-M20 Apache License 2.0 Apache HttpComponents Core 4.3.3 Apache License 2.0 Spark Project Tags 2.0.0-preview Apache License 2.0 Curator Testing 3.3.0 Apache License 2.0 Apache HttpComponents Core 4.4.5 Apache License 2.0 Apache Commons Daemon 1.0.15 Apache License 2.0 classworlds 2.4 Apache License 2.0 abego TreeLayout Core 1.0.1 BSD 3-clause "New" or "Revised" License jackson-core 2.8.6 Apache License 2.0 Lucene Join 6.6.1 Apache License 2.0 Apache Commons CLI 1.3-cloudera-pre-r1439998 Apache License 2.0 hive-apache 0.5 Apache License 2.0 scala-parser-combinators 1.0.4 BSD 3-clause "New" or "Revised" License com.springsource.javax.xml.bind 2.1.7 Common Development and Distribution License 1.0 SnakeYAML 1.15 Apache License 2.0 JUnit 4.12 Common Public License 1.0 ApacheDS Protocol Kerberos 2.0.0-M12 Apache License 2.0 Apache Groovy 2.4.6 Apache License 2.0 JGraphT - Core 1.2.0 (GNU Lesser General Public License v2.1 or later AND Eclipse Public License 1.0) chill-java 0.5.0 Apache License 2.0 Apache Commons Logging 1.2 Apache License 2.0 OpenCensus 0.12.3 Apache License 2.0 ApacheDS Protocol
    [Show full text]
  • Adaptive LL(*) Parsing: the Power of Dynamic Analysis
    Adaptive LL(*) Parsing: The Power of Dynamic Analysis Terence Parr Sam Harwell Kathleen Fisher University of San Francisco University of Texas at Austin Tufts University [email protected] [email protected] kfi[email protected] Abstract PEGs are unambiguous by definition but have a quirk where Despite the advances made by modern parsing strategies such rule A ! a j ab (meaning “A matches either a or ab”) can never as PEG, LL(*), GLR, and GLL, parsing is not a solved prob- match ab since PEGs choose the first alternative that matches lem. Existing approaches suffer from a number of weaknesses, a prefix of the remaining input. Nested backtracking makes de- including difficulties supporting side-effecting embedded ac- bugging PEGs difficult. tions, slow and/or unpredictable performance, and counter- Second, side-effecting programmer-supplied actions (muta- intuitive matching strategies. This paper introduces the ALL(*) tors) like print statements should be avoided in any strategy that parsing strategy that combines the simplicity, efficiency, and continuously speculates (PEG) or supports multiple interpreta- predictability of conventional top-down LL(k) parsers with the tions of the input (GLL and GLR) because such actions may power of a GLR-like mechanism to make parsing decisions. never really take place [17]. (Though DParser [24] supports The critical innovation is to move grammar analysis to parse- “final” actions when the programmer is certain a reduction is time, which lets ALL(*) handle any non-left-recursive context- part of an unambiguous final parse.) Without side effects, ac- free grammar. ALL(*) is O(n4) in theory but consistently per- tions must buffer data for all interpretations in immutable data forms linearly on grammars used in practice, outperforming structures or provide undo actions.
    [Show full text]
  • How to Develop Your Own Dsls in Eclipse Using Xtend and Xtext ?
    How to develop your own DSLs in Eclipse using Xtend and Xtext ? Daniel Strmečki | Software Developer 19.05.2016. BUSINESS WEB APPLICATIONS HOW TO DEVELOP YOUR OWN DSLS IN ECLIPSE USING XTEXT AND XTEND? Content 1. DSLs › What are DSLs? › Kinds of DSLs? › Their usage and benefits… 2. Xtend › What kind of language is Xtend? › What are its benefits compared to classic Java? 3. Xtext › What is a language development framework? › How to develop you own DSL? 4. Short demo 5. Conclusion 2 | 19.05.2016. BUSINESS WEB APPLICATIONS | [email protected] | www.evolva.hr HOW TO DEVELOP YOUR OWN DSLS IN ECLIPSE USING XTEXT AND XTEND? DSL acronym Not in a Telecommunications context: Digital Subscriber Line But in a Software Engineering context: Domain Specific Languages 3 | 19.05.2016. BUSINESS WEB APPLICATIONS | [email protected] | www.evolva.hr HOW TO DEVELOP YOUR OWN DSLS IN ECLIPSE USING XTEXT AND XTEND? Domain Specific Languages General-Purpose Languages (GPLs) › Languages broadly applicable across application domains › Lack specialized features for a particular domain › XML, UML, Java , C++, Python, PHP… Domain specific languages (DSLs) › Languages tailored to for an application in a specific domain › Provide substantial gains in expressiveness and ease of use in their domain of application › SQL, HTML, CSS, Logo, Mathematica, Marcos, Regular expressions, Unix shell scripts, MediaWiki, LaTeX… 4 | 19.05.2016. BUSINESS WEB APPLICATIONS | [email protected] | www.evolva.hr HOW TO DEVELOP YOUR OWN DSLS IN ECLIPSE USING XTEXT AND XTEND? Domain Specific Languages A novelty in software development › DSL for programming numerically controlled machine tools, was developed in 1957–1958 › BNF dates back to 1959 (M.
    [Show full text]
  • CONCLUSIONES DEL ABOGADO GENERAL SR. PEDRO CRUZ VILLALÓN Presentadas El 14 De Abril De 2011 1
    CONCLUSIONES DEL SR. CRUZ VILLALÓN — ASUNTO C-70/10 CONCLUSIONES DEL ABOGADO GENERAL SR. PEDRO CRUZ VILLALÓN presentadas el 14 de abril de 2011 1 Índice I. Introducción ................................................................... I - 11964 II. Marco jurídico ................................................................. I - 11967 A. Derecho de la Unión ....................................................... I - 11967 1. Normativa en materia de protección de la propiedad intelectual ............. I - 11967 a) Directiva 2001/29 relativa a la armonización de determinados aspectos de los derechos de autor y derechos afines a los derechos de autor en la sociedad de la información ......................................... I - 11967 b) Directiva 2004/48 relativa al respeto de los derechos de propiedad intelec- tual . I - 11968 2. Normativa en materia de protección de datos personales ................... I - 11969 a) Directiva 95/46 relativa a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos . I - 11969 b) Directiva 2002/58 relativa al tratamiento de los datos personales y a la protección de la intimidad en el sector de las comunicaciones electróni- cas . I - 11969 3. Normativa en materia de comercio electrónico: Directiva 2000/31 ........... I - 11970 B. Derecho nacional . I - 11970 1 — Lengua original: francés. I - 11962 SCARLET EXTENDED III. Hechos que dieron lugar al litigio principal y cuestiones prejudiciales ................. I - 11971 A. Hechos
    [Show full text]
  • Expressive and Efficient Model Transformation with an Internal DSL
    Expressive and Efficient Model Transformation with an Internal DSL of Xtend Artur Boronat Department of Informatics, University of Leicester, UK [email protected] ABSTRACT 1 INTRODUCTION Model transformation (MT) of very large models (VLMs), with mil- Over the past decade the application of MDE technology in indus- lions of elements, is a challenging cornerstone for applying Model- try has led to the emergence of very large models (VLMs), with Driven Engineering (MDE) technology in industry. Recent research millions of elements, that may need to be updated using model efforts that tackle this problem have been directed at distributing transformation (MT). This situation is characterized by important MT on the Cloud, either directly, by managing clusters explicitly, or challenges [26], starting from model persistence using XMI serial- indirectly, via external NoSQL data stores. In this paper, we draw at- ization with the Eclipse Modeling Framework (EMF) [31] to scalable tention back to improving efficiency of model transformations that approaches to apply model updates. use EMF natively and that run on non-distributed environments, An important research effort to tackle these challenges was showing that substantial performance gains can still be reaped on performed in the European project MONDO [19] by scaling out that ground. efficient model query and MT engines, such as VIATRA[3] and We present Yet Another Model Transformation Language (YAMTL), ATL/EMFTVM [46], building on Cloud technology either directly, a new internal domain-specific language (DSL) of Xtend for defin- by using distributed clusters of servers explicitly, or indirectly, by ing declarative MT, and its execution engine.
    [Show full text]
  • Xtext / Sirius - Integration the Main Use-Cases
    Xtext / Sirius - Integration The Main Use-Cases White Paper December 2017 SUMMARY Chapter 1 Introduction 1 Chapter 2 Let’s start 2 Chapter 2.1 What modeling is about? 2 Chapter 2.2 Benefits of graphical modeling 3 Chapter 2.3 Benefits of textual modeling 5 Chapter 3 What is Xtext? 6 Chapter 4 What is Sirius? 8 Chapter 5 Xtext & Sirius in action 10 Chapter 5.1 Case 1: Editing the same models both graphically and textually 10 Chapter 5.2 Case 2: Embedding an Xtext Editor into Sirius 15 Chapter 6 How may we help you? 18 Introduction Introduction You are going to create a domain-specific modeling tool and you wonder how users will edit and visualize the models: textually with a dedicated syntax and a rich textual editor ? or graphically with diagrams drawn with a palette and smart tools? Both approaches are interesting and can be used complementary: While text is able to carry more detailed information, a diagram highlights the relationship between elements much better. In the end, a good tool should combine both, and use each notation where it suits best. In this white paper, we will explain the benefits of each approach. Then we will present Eclipse Xtext and Eclipse Sirius, two open-source frameworks for the development of textual and graphical model editors. And finally, we will detailed two use-cases where these two technologies can be integrated in the same modeling workbench. 1 Let’s start Let’s start What modeling is about? Before presenting the graphical and textual modeling approaches, it is important to briefly clarify what we mean by modeling.
    [Show full text]
  • Lexing and Parsing with ANTLR4
    Lab 2 Lexing and Parsing with ANTLR4 Objective • Understand the software architecture of ANTLR4. • Be able to write simple grammars and correct grammar issues in ANTLR4. EXERCISE #1 Lab preparation Ï In the cap-labs directory: git pull will provide you all the necessary files for this lab in TP02. You also have to install ANTLR4. 2.1 User install for ANTLR4 and ANTLR4 Python runtime User installation steps: mkdir ~/lib cd ~/lib wget http://www.antlr.org/download/antlr-4.7-complete.jar pip3 install antlr4-python3-runtime --user Then in your .bashrc: export CLASSPATH=".:$HOME/lib/antlr-4.7-complete.jar:$CLASSPATH" export ANTLR4="java -jar $HOME/lib/antlr-4.7-complete.jar" alias antlr4="java -jar $HOME/lib/antlr-4.7-complete.jar" alias grun='java org.antlr.v4.gui.TestRig' Then source your .bashrc: source ~/.bashrc 2.2 Structure of a .g4 file and compilation Links to a bit of ANTLR4 syntax : • Lexical rules (extended regular expressions): https://github.com/antlr/antlr4/blob/4.7/doc/ lexer-rules.md • Parser rules (grammars) https://github.com/antlr/antlr4/blob/4.7/doc/parser-rules.md The compilation of a given .g4 (for the PYTHON back-end) is done by the following command line: java -jar ~/lib/antlr-4.7-complete.jar -Dlanguage=Python3 filename.g4 or if you modified your .bashrc properly: antlr4 -Dlanguage=Python3 filename.g4 2.3 Simple examples with ANTLR4 EXERCISE #2 Demo files Ï Work your way through the five examples in the directory demo_files: Aurore Alcolei, Laure Gonnord, Valentin Lorentz. 1/4 ENS de Lyon, Département Informatique, M1 CAP Lab #2 – Automne 2017 ex1 with ANTLR4 + Java : A very simple lexical analysis1 for simple arithmetic expressions of the form x+3.
    [Show full text]
  • Spyglassfall2015.Pdf
    1 THERE ARE MANY WAYS TO TELL A STORY. Part of our mission is to keep alive the maritime history of our Nation’s Oldest PortSM by telling its stories. Well, we have two important stories to tell in our new exhibit, Wrecked!, which will be opening in May 2016. We want everyone, especially our young- est visitors, to be able to connect with this unique shipwreck story and with the archaeological side of discovering, exca- vating and conserving shipwrecks. That’s why we have added a new storyteller to our Lighthouse family—Star Waters! Star is a curious, adventerous young student who will inspire a whole new generation of underwater archaeologists and explorers. Throughout the Wrecked! exhibit, you’ll see a series of vignettes called “Star Waters Wonders” which will ask questions that provoke our young guests to think more in-depth about science, history, math, and engineering. So let our friend Star give you a sneak peek of the new exhibit (which is unlike anything you have ever seen at our Museum) in this special issue! 2 Dear Members, We have so much to be thankful for this holiday season. The blessing of being busy is always with us. We are about to break ground on a new Maritime Archaeology & Education Center with public viewing areas for shipwreck artifacts and handicap accessible learning spaces. A new exhibit is coming in the spring. Luminary Night is coming December 2nd! Our membership is larger than ever! We are thankful for the privilege to work for you. We are blessed to know and serve you.
    [Show full text]
  • Creating Custom DSL Editor for Eclipse Ian Graham Markit Risk Analytics
    Speaking Your Language Creating a custom DSL editor for Eclipse Ian Graham 1 Speaking Your Language | © 2012 Ian Graham Background highlights 2D graphics, Fortran, Pascal, C Unix device drivers/handlers – trackball, display devices Smalltalk Simulation Sensor “data fusion” electronic warfare test-bed for army CASE tools for telecommunications Java Interactive visual tools for QC of seismic processing Seismic processing DSL development tools Defining parameter constraints and doc of each seismic process in XML Automating help generation (plain text and HTML) Smart editor that leverages DSL definition Now at Markit using custom language for financial risk analysis Speaking Your Language | © 2012 Ian Graham Overview Introduction: Speaking Your Language What is a DSL? What is Eclipse? Demo: Java Editor Eclipse architecture Implementing an editor Implementing a simple editor Demo Adding language awareness to your editor Demo Learning from Eclipse examples Resources Speaking Your Language | © 2012 Ian Graham Introduction: Speaking Your Language Goal illustrate power of Eclipse platform Context widening use of Domain Specific Languages Focus editing support for custom languages in Eclipse Speaking Your Language | © 2012 Ian Graham Recipe Editor 5 Text Editor Recipes | © 2006 IBM | Made available under the EPL v1.0 What is a DSL? Domain Specific Language - a simplified language for specific problem domain Specialized programming language E.g. Excel formula, SQL, seismic processing script Specification language
    [Show full text]
  • Issues in the Design and Implementation of a Real-Time Garbage Collection Architecture " (1992)
    Iowa State University Capstones, Theses and Retrospective Theses and Dissertations Dissertations 1992 Issues in the design and implementation of a real- time garbage collection architecture William Jon Schmidt Iowa State University Follow this and additional works at: https://lib.dr.iastate.edu/rtd Part of the Computer Sciences Commons Recommended Citation Schmidt, William Jon, "Issues in the design and implementation of a real-time garbage collection architecture " (1992). Retrospective Theses and Dissertations. 10388. https://lib.dr.iastate.edu/rtd/10388 This Dissertation is brought to you for free and open access by the Iowa State University Capstones, Theses and Dissertations at Iowa State University Digital Repository. It has been accepted for inclusion in Retrospective Theses and Dissertations by an authorized administrator of Iowa State University Digital Repository. For more information, please contact [email protected]. INFORMATION TO USERS This manuscript has been reproduced from the microfilm master. UMI films the text directly from the original or copy submitted. Thus, some thesis and dissertation copies are in typewriter face, while others may be from any type of computer printer. The quality of this reproduction is dependent upon the quality of the copy submitted. Broken or indistinct print, colored or poor quality illustrations and photographs, print bleedthrough, substandard margins, and improper aligrmient can adversely affect reproduction. In the unlikely event that the author did not send UMI a complete manuscript and there are missing pages, these will be noted. Also, if unauthorized copyright material had to be removed, a note will indicate the deletion. Oversize materials (e.g., maps, drawings, charts) are reproduced by sectioning the original, beginning at the upper left-hand corner and continuing from left to right in equal sections with small overlaps.
    [Show full text]