Abstract for Programming Tools
Summary of changes
Summary of changes
z/OS Version 2 Release 1 summary of changes
Tutorial on using lex and yacc
Uses for the lex and yacc utilities
Code produced by lex and yacc
lex output
yacc output
Defining tokens
Calling the code
Using the lex and yacc commands
Tokenizing with lex
Characters and regular expressions
Character strings
Anchoring patterns
Character classes
Repetitions
Optional expressions
Alternatives
Grouping
Definitions
Translations
Declarations
lex input for simple desk calculator
yacc grammars
The declarations section
Creating token definition files
Precedence rules
Code declarations
The grammar rules section
Actions
Compressing rules
Start symbols
Interior actions
Explicit internal source code declarations
The functions section
The simple desk calculator
Error handling
Error handling in lex
Other errors in lex
lex input for the improved desk calculator
Error handling in yacc
The error construct
Using yyerror()
The yyerrok function
Other error handling facilities
A sophisticated example
Multiple values for yylval
lex input
The bare grammar
Expression trees
Compilation
Writing lex/yacc applications using Enhanced ASCII support
Generating a lexical analyzer using lex
Introduction to the lex utility
The lex input language
Language fundamentals
Characters
Strings
Character classes
Putting things together
lex programs
Definitions
Translations
Token string and length
Numbers and values
Declarations
Using lex
Using yylex()
Generating a table file
Compiling the table file
The lex library routines
Typedefs
Constants
Variables
Macros
Functions
Library routines
Error detection and recovery
Ambiguity and lookahead
Lookahead
Left context sensitivity and start conditions
Tracing a lex program
The REJECT action
Character set
Generating a parser using yacc
How yacc works
yyparse() and yylex()
Grammar rules
Input to yacc
Declarations section
Token declarations
Precedence and associativity
Variable and function declarations
Summary
Grammar rules section
Recognition actions
Token and symbol values
Precedence in the grammar rules
Start symbol
End marker
Declarations in yyparse()
Function section
Lexical analyzer
Internal structures
States
Diagramming states
State actions
Accept
Shift
Reduce
Goto
Error
Error handling
The error symbol
The error condition
Examples
Error recognition actions
The yyclearin macro
The yyerror function
The yyerrok macro
Other error support routines
yacc output
Rules summary
State descriptions
Parser statistics
Types
The default action
Ambiguities
Resolving conflicts by precedence
Rules to help remove ambiguities
Conflicts in yacc output
Advanced yacc topics
Rules with multiple actions
Selection preference for rules
Using nonpositive numbers in $N constructs
Using lists and handling null strings
Right recursion versus left recursion
Using YYDEBUG to generate debugging information
Important symbols used for debugging
Using the YYERROR macro
Rules controlling the default action
Errors and shift-reduce conflicts
Making yyparse() reentrant
Miscellaneous points
Tutorial on using make
Basic concepts
The makefile
Writing a rule
Filenames containing a colon
White space
Continuation lines
Targets with more than one recipe
Comments
Running make
Macros
Naming macros
Macro examples
Command-line macros
Variations
Special runtime macros
Dynamic prerequisites
Modified expansions
Substitution modifiers
Tokenization
Prefix and suffix operations
Inference rules
Metarules
Suffix rules
The default rules file
Controlling the behavior of make
Some important attributes
Some important special targets
The .ERROR target
Including other makefiles
Environment variables
Some important control macros
Information macros
Attribute macros
Other control macros
Recipes
Recipe lines
Executing regular recipes
Group recipes
Special group recipe constructs
Executing group recipes
Libraries
Metarules for library support
More Information on make
Command-line options
Finding the makefile
Makefile input
Comments
Rules
Rule operators
Recipes
Missing recipes
Macros
Modified macro expansions
Pattern substitution
Tokenization
Prefix and suffix operations
Nested macros
Text diversion
Using attributes to control updates
Special target directives
Special macros
Control macros
String-valued macros
Attribute macros
Runtime macros
Dynamic prerequisites
Binding targets
Using inference rules
Metarules
Suffix rules
Compatibility considerations
Conditionals
BSD UNIX make
System V AUGMAKE
Debugging XL C/C++ programs
Introduction to the z/OS debugger
Using the z/OS UNIX debugger to debug your application
Using the z/OS UNIX debugger with multithreaded applications
z/OS UNIX debugger restrictions and debugging limitations
The debugger has the following restrictions
Debugging limitations of z/OS UNIX dbx
Setting up socket shell mode for GUI debugging
Debugging from the shell with the dbx utility
Running the dbx utility
Examples of using the dbx utility
Running shell commands from dbx
Using the command line editor in dbx
Controlling program execution
Setting and deleting breakpoints to step through a program
Running a program
Continuing a stopped program
Tracing execution
Displaying and manipulating the source file
Changing the source directory path
Displaying the current file
Changing the current file or procedure
Editing source files while debugging a program
Debugging programs involving multiple processes
Using _BPX_PTRACE_ATTACH to load programs into user modifiable storage
Examining program data
Handling signals
Displaying a stack traceback
Displaying and modifying variables
Scoping of names
Understanding operators and modifiers allowed in expressions
Understanding type checking in expressions
Converting symbols to lowercase and uppercase
Changing print output with special debugging variables
Displaying strings in different character sets
Debugging application programs involving threads
Examining multithread program status
Displaying full information about a thread
Displaying and switching the current thread
Examining the status of individual threads
Displaying information about mutex objects
Examining the status of individual mutex objects
Displaying information about condition variables
Examining the status of individual condition variables
Displaying information about read/write lock objects
Examining the status of individual read/write lock objects
Controlling multithread program execution
Using breakpoint subcommands
Holding and releasing threads
Setting per-thread breakpoints with a conditional breakpoint
Modifying thread-related objects
Preventing unexpected debugging behavior
Debugging at the machine level
Using machine registers
Examining memory addresses
Running a program at the machine level
Debugging considerations for vector programming
Customizing the dbx debugging environment
Defining a new dbx prompt
Creating dbx subcommand aliases
Using the .dbxinit file and .dbxsetup files
Reading dbx subcommands from a file
dbx environment variables
dbx external program usage
Debugging MVS dumps
Analyzing dump initialization problems
Maximizing source level debug of in production XL C/C++ program dumps
Debugging considerations/setup on MVS
Attach (-a) considerations
Programs with DLLs
Programs that run fine only under dbx
Multiprocess debugging
Programs started by JCL or daemons
Programs that exist in MVS data sets
Performance considerations (symbolics reading)
Performance considerations (program execution)
Controlling processes
Obtaining the status of z/OS UNIX application program processes
Killing a runaway process
Developing for the dbx Plugin Framework
File Format
Naming
Location
Loading
Unloading
Version control
Header file
Interface
Plugin version
Plugin session init
Plugin session command
Plugin session event
Plugin session destroy
dbx services
session
process
modules
threads
pthreads
get_thread_context
set_thread_context
get_pthread_context
set_pthread_context
read_memory
write_memory
locate_symbol
what_function
print
alias
unalias
Structure definitions
Example
Usage considerations
Using signals
Making calls to fork(), spawn(), exec(), or any pthread functions
List of dbx subcommands
Debugging environment control
Debugging threads
Displaying the source file
Ending program execution
Machine-level debugging
Multiprocess debugging
Printing and modifying variables, expressions, and types
Procedure calling
Running your program
Setting and deleting breakpoints
Signal handling
Tracing program execution
TSO/3270 passthrough mode
Overview
Supported TSO functions
Using the TSO/3270 passthrough data stream
Preliminary processing of TSO/3270 passthrough mode requests
Processing of return codes from invoked TSO services
TSO/3270 passthrough mode data stream
Miscellaneous programming notes
The ENDPASSTHROUGH key
ENDPASSTHROUGH specification results
Other documentation
Usage scenario
Sample programs
Message facility overview
Creating a message source file
Continuing messages on the next line
Special characters in the message text
Defining a character to delimit message text
Assigning message set numbers and message ID numbers
Creating a message catalog
Catalog sizing
Removing messages from a catalog
Examples
Displaying messages with an application program
Understanding the NLSPATH environment variable
References