Standard I/O and Iostream, Getopt(), Make, Gdb, Unit Testing

Total Page:16

File Type:pdf, Size:1020Kb

Standard I/O and Iostream, Getopt(), Make, Gdb, Unit Testing Data Structures Contents and Algorithms ! C++ Input/Output ! getopt ! Makefile ! gdb Discussion 1: Week of Sep 7, 2011 ! Unit Testing 2 C++ Input/Output C++ Input/Output ! !"#$%&'()%*&+,%-.)"#% ! !+/.$%0&".'%.+%-.)+/.% ! !'&&$%0&".'%.+%-.)'&&% ! "*-.&'(,$%+1'#%*"2'-%0".3%&'()%1'&,"--"+#% ! *-.&'(,$%+1'#%*"2'-%0".3%&'()%4%0&".'% 1'&,"--"+#% http://www.cplusplus.com/reference/ 3 4 PA1 Read char by char ! 5#1/.6+/.1/.%"-%&')"&'!.')%*&+,%*"2'-% "#.%,("#C"#.%(&@!A%!3(&DD%(&@EF% ! 761(.389:%;%"#1/.7.<.%=%+/.1/.7.<.% G% ! >;>%(#)%>"#1/.7.<.?%(&'%#+.%!+,,(#)%2"#'%(&@-A% %03"2'C!"#7@'.CF%HI%J:F% )+%#+.%(11'(&%"#%char** argv %G% ! B+/%!(#%/-'%% %%!"#7/#@'.CFK% cin.get(), cin.unget(), getline(cin, var), %%!3(&%!%I%!"#7@'.CFK% cin >> var %%!+/.%;;%!K% %L% %&'./&#%MK% L% 5 6 Command Line Read line by line ! Option: defines how the program should run "#.%,("#C"#.%(&@!A%!3(&DD%(&@EF% ! Argument: input to the program G% ! $ ls –a (-a is an option) %-.&"#@%-K% ! $ ls *.cpp (*.cpp is an argument) %03"2'C@'.2"#'C!"#A-FF% ! $ mysql –p –u username (username is required by option –u) %G% %%!+/.%;;%-%;;%'#)2K% %L% %&'./&#%MK% L% 7 8 getopt getopt – external variable soup ! getopt greatly simplifies command-line argument parsing. ! getopt gets and sets some external variables on execution: ! We pass it argc and argv, as well as optstring, which is a – If you set opterr to something other than zero, then if character array containing all available option characters. there is an error, it will be output to stderr. – After an option character, you can specify a : to indicate – For unknown option characters/unknown arguments, that the option has a required parameter. :: denotes that getopt stores the value in optopt. the argument is optional. – optind contains the index of the next element of argv ! getopt returns the option if it successfully found one. scheduled to be processed. – ! Otherwise, it might return : which indicates a missing For options that accept arguments, optarg is set with the parameter value of the argument. • ! Or it might return ? which means one of the option characters Windows users can get wingetopt from: was unknown http://note.sonots.com/Comp/CompLang/cpp/getopt.html ! Let's look at an example. ! Or it will return -1 if it is at the end of the option list 9 10 getopt getopt #include <unistd.h> % testopt #include <stdio.h> aflag = 0, bflag = 0, cvalue = (null) int main (int argc, char **argv) { % testopt -a -b int aflag = 0; int bflag = 0; aflag = 1, bflag = 1, cvalue = (null) char *cvalue = NULL; int index, c; % testopt -ab opterr = 0; // extern var aflag = 1, bflag = 1, cvalue = (null) while ((c = getopt (argc, argv, "abc:")) != -1) { % testopt -c foo switch (c) { aflag = 0, bflag = 0, cvalue = foo case 'a': aflag = 1; break; % testopt -cfoo case 'b': aflag = 0, bflag = 0, cvalue = foo bflag = 1; break; case 'c': % testopt arg1 cvalue = optarg; break; aflag = 0, bflag = 0, cvalue = (null) case '?': Non-option argument arg1 if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); % testopt -a arg1 else aflag = 1, bflag = 0, cvalue = (null) fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); Non-option argument arg1 return 1; default: % testopt -c foo arg1 abort (); aflag = 0, bflag = 0, cvalue = foo } Non-option argument arg1 printf ("aflag = %d, bflag = %d, cvalue = %s\n", % testopt -a -- -b aflag, bflag, cvalue); aflag = 1, bflag = 0, cvalue = (null) Non-option argument -b for (index = optind; index < argc; index++) printf ("Non-option argument %s\n", argv[index]); % testopt -a - return 0; aflag = 1, bflag = 0, cvalue = (null) } 11 Non-option argument - Compiling: The old way The Solution: Makefiles ! @NN%,("#7!11%*"2':7!11%*"2'87!11%O+%,("#% ! The command becomes " Way too long to re-type over and over. " ,(P'% " Compare to ! Potential Problems: " @NN%,("#7!11%*"2':7!11%*"2'87!11%O+%,("#% " @NN%,("#%O+%,("#7!11% " @NN%,("#7!11%O+%,("#7!11% ! What happens in the two above commands? 13 14 Structure of a Makefile Dependencies ! The file must be called `Q(P'*"2'’ ! It consists of rules as follows: 15 16 make make ! Let's look at an example 3-file project. ! make is a utility that can simplify the building process. classname.h As the size of a C++ project grows, it becomes critical to void writeClassName( void ); modularize the code for the sake of both the build time classname.cpp and for the sanity of the programmer (and the grader!). #include <iostream> ! make is better than a shell script because it detects the using namespace std; files that have been changed and only recomplies and void writeClassName( void ) { relinks when needed. cout << "Hello EECS 281!" << endl; } ! make looks at a file called Makefile, created by you, to hello.cpp determine the dependency graph of your project. #include <iostream> #include "classname.h" using namespace std; int main( void ) { cout << "Hello world!" << endl; writeClassName(); } 17 18 make - Makefile make – macros ! Here is our simple Makefile: ! It's possible to define and use macros in your Makefile: # top-level dependency OBJECTS = hello.o classname.o helloWorld281: hello.o classname.o CPPFLAGS = -c -Wall g++ hello.o classname.o -o helloWorld281 # top-level dependency # hello module helloWorld281: $(OBJECTS) hello.o: hello.cpp classname.h g++ $(OBJECTS) -o helloWorld281 g++ -c hello.cpp # hello module # the classname module hello.o: hello.cpp classname.h classname.o: classname.cpp classname.h g++ $(CPPFLAGS) hello.cpp g++ -c classname.cpp # the classname module ! We define a dependency graph in Makefile. To the left of the colon classname.o: classname.cpp classname.h g++ $(CPPFLAGS) classname.cpp is a label often denoting a file. To the right are dependencies. For example, helloWorld281 depends on hello.o and classname.o. # clean the project clean: ! The indented lines are, in a nutshell, the commands executed to rm -rf *o helloWorld281 create the object denoted by the label. Compiled in order. These ! Note above we've also defined a “clean” operation. This is an lines must be indented. action, not a g++ operation. To use, type make clean at the command prompt. ! # denotes comments 19 20 make - sub-makefiles make ! You can also embed other makefiles inside Makefile. This allows ! make is a powerful and complex utility, and we're just barely you to modularize your build process even further. To specify a scratching the surface. For more information, do a man make or make file with a different name than Makefile, use the -f option: check out one of the many tutorials on the web. make -f MyOtherMakeFile ! http://www.eng.hawaii.edu/Tutor/Make/ 21 22 Makefiles Summary Makefiles Summary ! Basic syntax " Target: sources ! Suppose we run the following command to compile our " [tab] system command program: " g++ main.cpp hello.cpp factorial.cpp -o hello ! To run a makefile, simply use: ! Then we can do the same thing in our makefile by just " make -f makefilename doing this: ! BUT, if you simply name your makefile all: “Makefile”, then you only have to type: g++ main.cpp hello.cpp factorial.cpp -o hello ! Remember tabs, of course make ! All is default target for makefiles. That's why it works here. Makefiles Summary GNU Debugger (gdb) ! Dependencies are important! ! Here is an example makefile for the same source code: ! Text-based debugging tool all: hello hello: main.o factorial.o hello.o ! Useful for solving segmentation faults g++ main.o factorial.o hello.o -o hello main.o: main.cpp Program received signal SIGSEGV, Segmentation fault. g++ -c main.cpp factorial.o: factorial.cpp or memory issues, e.g., index out of bounds g++ -c factorial.cpp hello.o: hello.cpp g++ -c hello.cpp clean: rm -rf *o hello ! When compiling, add -g to Makefile ! What advantages does this code have? " Adds debugging symbols to binary 26 gdb Helpful Commands gdb Usage # (r)un: start the executable # (b)reak: sets points where gdb will halt # where: prints function line where seg. fault occurred ! To start gdb, type gdb <exe name> # (b)ack(t)race: prints the full chain of function calls # (s)tep: executes current line of the program, enters function calls # (n)ext: like step but does not enter functions # (c)ontinue: continue to the next breakpoint # (p)rint <var>: prints the value of <var> # watch <var>: watch a certain variable # (l)ist <line_num> : list source code near <line_num> ! At this point, gdb is waiting. To start the # kill: terminate the executable program, type run <command line> # (q)uit: quit gdb 27 28 Unit Testing gdb Live Example ! Unit testing is a methodology by which you test the software of your program. ! Tests are unit tests because they usually operate on a ! See live example" small, specific part of the system. ! They are organized in classes. ! We can implement an extremely simple version of unit testing with assert. 29 37 Unit testing Unit Testing PowerRaiser.h ! assert is the most important macro in C++ (at least in terms of debugging). class PowerRaiser { public: ! We assert that something is true. If, when the PowerRaiser( unsigned int base ); program counter reaches an assert and the expression unsigned int getBase() const; turns out to be false, it triggers a breakpoint, and we unsigned int raise( unsigned int power ) const; break into the code. private: unsigned int base_; ! It's incredibly useful and convenient. Use it! }; assert( 3 == 3 ); // OK assert( false == false ); // OK assert( myFunc( 123 ) ); // OK if myFunc returns true assert( 5 == 2 + 2 ); // Will break into code!!!! 39 Unit Testing Unit Testing PowerRaiser.cpp PowerRaiserTest.h PowerRaiser::PowerRaiser( unsigned int base ) : class PowerRaiserTest { base_( base ) public: { void runAllTests(); } void testGetBase(); void testGetPower(); unsigned int PowerRaiser::getBase() const { ... return base_; }; } unsigned int PowerRaiser::raise( unsigned int power ) const { if ( 0 == number ) { return 1; } else { return base_ * raise( power – 1 ); } 40 41 Unit Testing Unit Testing PowerRaiserTest.cpp ! Each time we make a change to the code base, we void PowerRaiserTest::testGetBase() { run all unit tests to make sure that all of the PowerRaiser p( 10 ); functionality is still there.
Recommended publications
  • Glibc and System Calls Documentation Release 1.0
    Glibc and System Calls Documentation Release 1.0 Rishi Agrawal <[email protected]> Dec 28, 2017 Contents 1 Introduction 1 1.1 Acknowledgements...........................................1 2 Basics of a Linux System 3 2.1 Introduction...............................................3 2.2 Programs and Compilation........................................3 2.3 Libraries.................................................7 2.4 System Calls...............................................7 2.5 Kernel.................................................. 10 2.6 Conclusion................................................ 10 2.7 References................................................ 11 3 Working with glibc 13 3.1 Introduction............................................... 13 3.2 Why this chapter............................................. 13 3.3 What is glibc .............................................. 13 3.4 Download and extract glibc ...................................... 14 3.5 Walkthrough glibc ........................................... 14 3.6 Reading some functions of glibc ................................... 17 3.7 Compiling and installing glibc .................................... 18 3.8 Using new glibc ............................................ 21 3.9 Conclusion................................................ 23 4 System Calls On x86_64 from User Space 25 4.1 Setting Up Arguements......................................... 25 4.2 Calling the System Call......................................... 27 4.3 Retrieving the Return Value......................................
    [Show full text]
  • Chapter 4 Programming in Perl
    Chapter 4 Programming in Perl 4.1 More on built-in functions in Perl There are many built-in functions in Perl, and even more are available as modules (see section 4.4) that can be downloaded from various Internet places. Some built-in functions have already been used in chapter 3.1 and some of these and some others will be described in more detail here. 4.1.1 split and join (+ qw, x operator, \here docs", .=) 1 #!/usr/bin/perl 2 3 $sequence = ">|SP:Q62671|RATTUS NORVEGICUS|"; 4 5 @parts = split '\|', $sequence; 6 for ( $i = 0; $i < @parts; $i++ ) { 7 print "Substring $i: $parts[$i]\n"; 8 } • split is used to split a string into an array of substrings. The program above will write out Substring 0: > Substring 1: SP:Q62671 Substring 2: RATTUS NORVEGICUS • The first argument of split specifies a regular expression, while the second is the string to be split. • The string is scanned for occurrences of the regexp which are taken to be the boundaries between the sub-strings. 57 58 CHAPTER 4. PROGRAMMING IN PERL • The parts of the string which are matched with the regexp are not included in the substrings. • Also empty substrings are extracted. Note, however that trailing empty strings are removed by default. • Note that the | character needs to be escaped in the example above, since it is a special character in a regexp. • split returns an array and since an array can be assigned to a list we can write: splitfasta.ply 1 #!/usr/bin/perl 2 3 $sequence=">|SP:Q62671|RATTUS NORVEGICUS|"; 4 5 ($marker, $code, $species) = split '\|', $sequence; 6 ($dummy, $acc) = split ':', $code; 7 print "This FastA sequence comes from the species $species\n"; 8 print "and has accession number $acc.\n"; splitfasta.ply • It is not uncommon that we want to write out long pieces of text using many print statements.
    [Show full text]
  • The Clon User Manual the Command-Line Options Nuker, Version 1.0 Beta 25 "Michael Brecker"
    The Clon User Manual The Command-Line Options Nuker, Version 1.0 beta 25 "Michael Brecker" Didier Verna <[email protected]> Copyright c 2010{2012, 2015, 2017, 2020, 2021 Didier Verna Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the section entitled \Copy- ing" is included exactly as in the original. Permission is granted to copy and distribute translations of this manual into an- other language, under the above conditions for modified versions, except that this permission notice may be translated as well. Cover art by Alexis Angelidis. i Table of Contents Copying ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1 1 Introduction :::::::::::::::::::::::::::::::::::::::::::::::::::: 3 2 Installation:::::::::::::::::::::::::::::::::::::::::::::::::::::: 5 3 Quick Start ::::::::::::::::::::::::::::::::::::::::::::::::::::: 7 3.1 Full Source :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 7 3.2 Explanation ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 7 4 Using Clon :::::::::::::::::::::::::::::::::::::::::::::::::::: 11 4.1 Synopsis Definition ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 11 4.1.1 Synopsis Items ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 11 4.1.1.1 Text ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    [Show full text]
  • 16.5. Getopt — Parser for Command Line Options — Python V2.6.4
    Navigation • index • modules | • next | • previous | • Python v2.6.4 documentation » • The Python Standard Library » • 16. Generic Operating System Services » 16.5. getopt — Parser for command line options¶ This module helps scripts to parse the command line arguments in sys.argv. It supports the same conventions as the Unix getopt() function (including the special meanings of arguments of the form ‘-‘ and ‘--‘). Long options similar to those supported by GNU software may be used as well via an optional third argument. A more convenient, flexible, and powerful alternative is the optparse module. This module provides two functions and an exception: getopt.getopt(args, options[, long_options])¶ Parses command line options and parameter list. args is the argument list to be parsed, without the leading reference to the running program. Typically, this means sys.argv[1:]. options is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon (':'; i.e., the same format that Unix getopt() uses). Note Unlike GNU getopt(), after a non-option argument, all further arguments are considered also non-options. This is similar to the way non-GNU Unix systems work. long_options, if specified, must be a list of strings with the names of the long options which should be supported. The leading '--' characters should not be included in the option name. Long options which require an argument should be followed by an equal sign ('='). Optional arguments are not supported. To accept only long options, options should be an empty string. Long options on the command line can be recognized so long as they provide a prefix of the option name that matches exactly one of the accepted options.
    [Show full text]
  • Shell Script Getopts Example
    Shell Script Getopts Example Gail is constrainedly cryoscopic after delegable Hilbert sag his parcloses illuminatingly. Gonzales often tootle irresistibly when tripersonal Giordano discomposed dissonantly and buffer her Barbarossa. Robert misdraws rompishly. Find that getopts script example we use later will contain whitespace separation with command Instantly share code, notes, and snippets. OPTARG is set to the period character found. They cease in many cases unneeded and brief fact that cartoon always press them its just like matter of personal coding style. File or directory or found. Operator precedence is used when there within five is more arguments. Typically, shell scripts use getopts to parse arguments passed to them. There did many ways to against your remedy environment. Nothing gets printed when no command line options are provided. The return status is zero unless an outcome is encountered while determining the name avid the he directory within an invalid option is supplied. The exit code will be success failure. Log in charge use details from one require these accounts. How does log lumber and cpu usage by an application? Now consider running it bore an unsupported option. No need only pass the positional parameters through to borrow external program. How can I check took a directory exists in a candy shell script? What extent its purpose? When optional, the fashion can buckle on led off additional functionality, as ugly a boolean option. In those cases, it contains a pointer to that parameter. How environment check ride a variable is set to Bash? Connect and deploy knowledge write a single location that is structured and fatigue to search.
    [Show full text]
  • CLOPS: a DSL for Command Line Options
    CLOPS: A DSL for Command Line Options Mikol´aˇsJanota, Fintan Fairmichael, Viliam Holub, Radu Grigore, Julien Charles, Dermot Cochran, and Joseph R. Kiniry School of Computer Science and Informatics, Lero — The Irish Software Engineering Research Centre, and The Complex and Adaptive Systems Laboratory (CASL), University College Dublin, Ireland Abstract. Programmers often write custom parsers for the command line input of their programs. They do so, in part, because they believe that both their program’s parameterization and their option formats are simple. But as the program evolves, so does the parameterization and the available options. Gradually, option parsing, data structure complexity, and maintenance of related program documentation becomes unwieldy. This article introduces a novel DSL called CLOPS that lets a program- mer specify command line options and their complex inter-dependencies in a declarative fashion. The DSL is supported by a tool that gener- ates the following features to support command line option processing: (1) data structures to represent option values, (2) a command line parser that performs validity checks, and (3) command line documentation. We have exercised CLOPS by specifying the options of a small set of pro- grams like ls, gzip, and svn which have complex command line inter- faces. These examples are provided with the Open Source release of the CLOPS system. 1 Introduction A boiling frog is a well known phenomenon in software development. Just as a frog meets its fate in water that is slowly heated, so do software projects become unmanageable as their complexity gradually increases. Processing of command line options is not an exception.
    [Show full text]
  • AIM for Success
    SOFTWARE CATALOG Part No. 070.. 5873 .. 00 TEK 4400 FAMILY Product Group 07 4400 FAMILY ARTIFICIAL INTELLIGENCE SYSTEMS SOFTWARE CATALOG AIM for Success -ad<I:ron~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Tektronix 4400 Series Artifici::LI Intelligence Softw:are Catalog Au~~ust, 1985 MANUAL I~EVISION STATUS PRODUCT: AIM 4400 FAMILY SOFTWARE CArALOG REV DATE DESCRIPTION SEP 1985 Original Issue 4400 SOFTWARE CATALOG INTRODUCTION The 4404 Series AI Software Catalog provides information regarding software that is available for the 4400 Series of Artificial Intelligence Systems. This catalog contains product offerings of three types: 1. Software offered and fully supported by Tektronix 2. Software offered but unsupported by Tektronix 3. Software offered and supported by Third Party Software Vendors Generally, all software contained in this catalog is immediately available for the 4400 Series. Exceptions to this are not{~d in the description of the software offering. All Third Party Software can be acquired directly from the company contacts provided in this catalog. Descriptive infornLation on referral products has been approved by the vendors. Tektronix has not qualified or reviewed the claims made about product features or function. We hope the data provided in this catalog will allow you to make an initial assessment which can be followed by product evaluations with the appropriate vendor.
    [Show full text]
  • Lisp, Jazz, Aikido Three Expressions of a Single Essence
    Lisp, Jazz, Aikido Three Expressions of a Single Essence Didier Vernaa a EPITA Research and Development Laboratory Abstract The relation between Science (what we can explain) and Art (what we can’t) has long been acknowledged and while every science contains an artistic part, every art form also needs a bit of science. Among all scientific disciplines, programming holds a special place for two reasons. First, the artistic part is not only undeniable but also essential. Second, and much like in a purely artistic discipline, the act of programming is driven partly by the notion of aesthetics: the pleasure we have in creating beautiful things. Even though the importance of aesthetics in the act of programming is now unquestioned, more could still be written on the subject. The field called “psychology of programming” focuses on the cognitive aspects ofthe activity, with the goal of improving the productivity of programmers. While many scientists have emphasized their concern for aesthetics and the impact it has on their activity, few computer scientists have actually written about their thought process while programming. What makes us like or dislike such and such language or paradigm? Why do we shape our programs the way we do? By answering these questions from the angle of aesthetics, we may be able to shed some new light on the art of programming. Starting from the assumption that aesthetics is an inherently transversal dimension, it should be possible for every programmer to find the same aesthetic driving force in every creative activity they undertake, not just programming, and in doing so, get deeper insight on why and how they do things the way they do.
    [Show full text]
  • Command-Line Arguments Processing in Bash
    Command-line arguments processing in bash Matěj Týč, OpenAlt 2017 1 / 24 Outline ● How people tend to design interface of their bash scripts? ● What exactly is command-line interface? ● How is bash diferent from other languages? ● What is the bash way? ● What really is the bash way. 2 / 24 Bash scripts Postgres backup script from postgres wiki 3 / 24 Bash scripts The bash docker (bocker) – example of a good script (as Awesome Bash says). 4 / 24 Bash scripts Ways how to pass data to your script: ● Env variables: LS_LONG=true ls ● “Confgg fles: ls ls_config_long.cfg ● Command-line arguments: ls --long 5 / 24 Command-line interface Let’s write an ls help script ls-help. In bash! ● # default argument $ ls-help > List all files in directory . ● # Multiple arguments, # the default is replaced $ ls-help foo bar > List all files in directories ‘foo’, ‘bar’ 6 / 24 Command-line interface Let’s write an ls help script ls-help. In bash! ● # Short boolean option $ ls-help -A foo bar > List all files in directories ‘foo’, ‘bar’ > Do not list implicit ‘.’ and ‘..’ ● # Long boolean option, reversed order # does the same $ ls-help foo bar --almost-all > List all files in directories ‘foo’, ‘bar’ > Do not list implicit ‘.’ and ‘..’ 7 / 24 Command-line interface Let’s write an ls help script ls-help. In bash! ● # Long option that takes value $ ls-help --width 10 > List all files in directory ‘.’ > Pad the width to 10 terminal columns ● # Separated by = is the same $ ls-help --width=10 > List all files in directory ‘.’ > Pad the width to 10 terminal columns 8 / 24 Command-line interface Let’s write an ls help script ls-help.
    [Show full text]
  • Sample Chapter
    Spinellis main May 6, 2003 12:16 2 Basic Programming Elements What we observe is not nature itself, but nature exposed to our method of questioning. —Werner Heisenberg ode reading is in many cases a bottom-up activity. In this chapter we review the basic code elements that comprise programs and outline how to read and Creason about them. In Section 2.1 we dissect a simple program to demonstrate the type of reasoning necessary for code reading. We will also have the first oppor- tunity to identify common traps and pitfalls that we should watch for when reading or writing code, as well as idioms that can be useful for understanding its meaning. Sections 2.2 and onward build on our understanding by examining the functions, control structures, and expressions that make up a program. Again, we will reason about a specific program while at the same time examining the (common) control constructs of C, C++, Java, and Perl. Our first two complete examples are C programs mainly because realistic self-standing Java or C++ programs are orders of magni- tude larger. However, most of the concepts and structures we introduce here apply to programs written in any of the languages derived from C such as C++, C#, Java, Perl, and PHP. We end this chapter with a section detailing how to reason about a pro- gram’s flow of control at an abstract level, extracting semantic meaning out of its code elements. 2.1 A Complete Program A very simple yet useful program available on Unix systems is echo, which prints its arguments on the standard output (typically the screen).
    [Show full text]
  • Script Programming with Perl
    Script Programming with Perl 15-123 Systems Skills in C and Unix Scripting Languages • Many routine programming tasks require custom designed solutions, environments and approaches – Extracting data from a roster file • Scripting languages are ideal for tasks that do not require a “high level” compiled language solution – Some argue that this is the real way to learn programming – No need to worry about static typing • Scripts are widely used as backend processing languages for web based applications – Authenticate passwords – Extract data from a database – Create dynamic web pages Popular Scripting Languages • JavaScript – Client side processing based on a built in browser interpreter • PHP – Server side processing • Python – Object oriented, interpreted, data structures, dynamic typing, dynamic binding, rapid application development, binding other programming components • Perl – Also you can call it an “ interpreted ” language (more later) Perl • An interpreted scripting language – Practical extraction and Report Language – Developed as a tool for easy text manipulation and report generation • Why Perl – Easy scripting with strings and regex – Files and Processes • Standard on Unix • Free download for other platforms What’s good for Perl? • Scripting common tasks • Tasks that are too heavy for the shell • Too complicated (or short lived) for C First Perl Program #! usr/bin/perl –w print (“hello world \n”); • How does this work? – Load the interpreter and Execute the program • perl hello.pl An interpreted language • Program instructions
    [Show full text]
  • Parsing Command-Line Arguments by Getopt::Long
    Parsing command-line arguments by Getopt::Long Zuguang Gu <[email protected]> December 3, 2015 There are already several R packages to parse command-line arguments such as getopt or Python- style optparse. Here GetoptLong is another command-line argument parser which wraps the powerful Perl module Getopt::Long. Note: A large part of this vignette is copied or modified from Getopt::Long doc page on CPAN. And I cannot guarantee all my understanding on Getopt::Long is right. So the original website of Getopt::Long is always your best reference. 1 Workflow of the wrapping Figure 1: Workflow of wrapping 2 First example Using GetoptLong is simple especially for Perl users because the specification is quite similar as in Perl. library(GetoptLong) cutoff= 0.05 GetoptLong(matrix(c( "number=i", "Number of items, integer, mandatory option", 1 "cutoff=f", "cutoff to filter results, optional, default (0.05)", "verbose", "print messages" ), ncol=2, byrow= TRUE)) Or more simply: library(GetoptLong) cutoff= 0.05 GetoptLong(c( "number=i", "Number of items, integer, mandatory option", "cutoff=f", "cutoff to filter results, optional, default (0.05)", "verbose", "print messages" )) The first argument in GetoptLong is either a two-column matrix or a simple vector. If it is a simple vector, it should have even number of elements and will be transformed into the two-column matrix by rows internally. In the matrix, the first column is the specification of option names and the second column is the description of corresponding options. Save the code as test.R and we can execute the R script as: ~\> Rscript test.R --number 4 --cutoff 0.01 --verbose ~\> Rscript test.R -n 4 -c 0.01 -v ~\> Rscript test.R -n 4 --verbose In above example, number is a mandatory option and should only be integer mode.
    [Show full text]