Parse Errors

[posted 1999/10/01]

In order to do production testing of the HP-UX binaries, I have spent much of my morning editing our configuration (the basis for configs_samples) to fold in hpux support.  There were many changes required, I made several goofs along the way, and many parse errors resulted.  I have since added the following comments to the beginning of macros.cfg--tips for debugging configuration file parse errors:

///////////////////////////////////////////////////////////////////////////////

// it should be emphasized that this file (and all the other sample
// PIKT config files) serves at least the following purposes:
//
// --it is actual, though aliased, production code/data for our site
// --it is a starter set to get the new user up and running fast
// --it demos what PIKT can do
// --it is input for the PIKT validation self-tests
//
// so, for example, there are a lot of extra "#ifndef generic" and
// #ifdef doexec" preprocessor directives, that ordinarily wouldn't
// be here; if this file (and others) looks awfully complex in places,
// remember that this needn't be so: you can dispense with #ifdef
// directives entirely if you wish, and there is no law forcing you to use
// #if directives anywhere, or even macros for that matter; make your
// config files as simple or as complex as you wish

///////////////////////////////////////////////////////////////////////////////

// when attempting to debug parse errors, keep in mind the following:
//
// --"parse error (in defparse())" suggests that you have a mistaken
//   #ifdef-#endifdef construction somewhere (e.g., you omitted an ending
//   #endifdef)
// --"parse error (in tagparse())" suggests that you have a mistaken
//   #if-#endif construction somewhere (e.g., you used #if where you should
//   have used #elif)
// --"parse error (in cfgparse())" suggests that you have a garbled your
//   Pikt script syntax (e.g., you have misspelled a keyword, or forgotten
//   to close a quoted string, or ...)
// --if none of the above applies, perhaps you have, for a machine or os,
//   omitted a stanza identifier or stanza contents; or failed to close a
//   #fix-#unfix; or used '#if sys1 || sys2' instead of '#if sys1 | sys2';
//   or ...; really, there are many ways you could go wrong, but if a parse
//   error is reported, 99.99% of the time it's for real
// --sometimes parse errors reported in one file actually stem from errors
//   made at or near the end of the previous file; the pikt preprocessor
//   processes files in the following order: systems.cfg, defines.cfg,
//   macros.cfg, alarms.cfg, alerts.cfg, programs.cfg, files.cfg, objects.cfg;
//   so a parse error reported at the beginning of objects.cfg might actually
//   be caused by a goof at the end of files.cfg
// --remember that when debugging parse errors, comments are your friend;
//   try using /* */ comments to nullify entire sections of the configuration;
//   if your problem goes away, the fault is in the commented-out section;
//   be sure not to nest /* */ comments, of course!
// --when all else fails and you are stuck trying to debug our convoluted
//   configuration (that you have since modified), throw it away and start
//   your own configuration from scratch; issue a 'piktc -cv +H ...'
//   every step along the way to validate your most recent changes

///////////////////////////////////////////////////////////////////////////////

And, as a reminder, I have added the following at the start of each of the other configuration files:

///////////////////////////////////////////////////////////////////////////////

// (please see the comments prefacing the sample macros.cfg about config file
// complexity and parse error debugging)

///////////////////////////////////////////////////////////////////////////////

I know PIKT like the back of my own hand, so again I tend to discount the difficulties you might face.  As time goes by, and as I write more and more of these list messages, I am appreciating the need to write a PIKT operations manual.  For now, I'll just continue sending along stuff as it comes to mind.

For more examples, see Developer's Notes.

 
Home | FAQ | News | Intro | Samples | Tutorial | Reference | Software
Developer's Notes | Licensing | Authors | Pikt-Users | Pikt-Workers | Related Projects | Site Index | Privacy Policy | Contact Us
Page best viewed at 1024x768 or greater.   Page last updated 2019-01-12.   This site is PIKT® powered.
Copyright © 1998-2019 Robert Osterlund. All rights reserved.
Home FAQ News Intro Samples Tutorial Reference Software
PIKT Logo
PIKT Page Title
Learn about
Pikt script
operators &
expressions