Crossroads The ACM Magazine for Students

Sign In

Association for Computing Machinery

Magazine: August 2001 - Late Summer Edition | Volume 7, No. 5

Why bison is becoming extinct

At some point in your career, you're going to implement a computer language. You probably won't be implementing Java or C++. You may not even recognize it as a language. Truth be told, there are an awful lot of domain-specific languages, or "little languages" [7] in common use:

  • configuration files,
  • HTML/XML documents,
  • shell scripts,
  • network protocols,
  • mail headers,
  • command-line arguments.
The list goes on. A number of programs allow you to write scripts to control their operation; infact, just the other day I downloaded a neural network simulator which provided a little programming language to steer the simulation.How will you implement your language? There's the ad hoc approach, of course, but it's not well suited to languages whose design is complex or frequently changing. You also end up writing code to perform tasks which can be effectively automated.You might also consider using existing languages like Tcl [18] and Python [6]. These languages are designed to either be embedded in an existing application, or easily extended. This is a good solution when it can be used, saving a lot of time and effort. However, there may be concerns about tying your language to one which is itself changing, or the syntax and semantics of your language may not match those of such a "host" language.A third approach is to use compiler tools to implement your language. Most were designed for the implementation of large programming languages, but the same principles and techniques apply equally well to little languages. This article is the story of one such tool -- a parser generator tool -- and more importantly, what sort of tool is going to replace it, and why.

By John Aycock

HTML | In the Digital Library
Tags: Algorithms, Compilers, Design, Languages, Software notations and tools

Common mistakes in online and real-time contests

Each year the Association for Computing Machinery (ACM) arranges a worldwide programming contest. This contest has two rounds: the regional contests and the World Final. The teams with the best results in the regional contests advance to the World Final. The contest showcases the best programmers in the world to representatives of large companies who are looking for talent. When practicing for programming competitions, remember that all your efforts should be directed at improving your programming skills. No matter what your performance is in a contest, don't be disappointed. Success in programming contests is affected by factors other than skill, most importantly, adrenaline, luck, and the problem set of the contest. One way of getting immediate feedback on your efforts is to join the Valladolid Online Programming Practice/Contest or the online judge hosted by Ural State University (USU). Successfully solving problems increases your online ranking in the respective competitions.This article is for beginning programmers who are new to programming contests. I will discuss the common problems faced in contests, the University of Valladolid online judge, and the USU online judge. The suggestions are divided into three parts: General Suggestions, Online Contest Suggestions, and Valladolid-Specific Suggestions. Throughout this paper, please note that in real-time contests, the judges are human and in online contests, the judges are computer programs, unless otherwise noted.

By Shahriar Manzoor

HTML | In the Digital Library
Tags: Computing organizations, Design, Software development techniques, Software notations and tools