NOTES.MSVC
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:7k
源码类别:

编译器/解释器

开发平台:

Others

  1.                         Microsoft Visual C Stuff
  2. [
  3.   Two notes added by Tom Moog 23-Sep-97.  I believe the *.dsp and
  4.   *.mak files that were once at the end of this file are now obsolete.
  5.   
  6.   The following MSVC .dsp and .mak files for pccts and sorcerer
  7.   were contributed by Stanislaw Bochnak (S.Bochnak@microtool.com.pl)
  8.   and Jeff Vincent (jvincent@novell.com)
  9.         PCCTS Distribution Kit
  10.         ----------------------
  11.         pccts/PCCTSMSVC50.dsw 
  12.         pccts/antlr/AntlrMSVC50.dsp
  13.         pccts/antlr/AntlrMSVC50.mak
  14.         pccts/dlg/DlgMSVC50.dsp
  15.         pccts/dlg/DlgMSVC50.mak
  16.         pccts/support/genmk/watgenmk.mak
  17.         pccts/support/msvc.dsp
  18.         Sorcerer Distribution Kit
  19.         -------------------------
  20.         pccts/sorcerer/SorcererMSVC50.dsp
  21.         pccts/sorcerer/SorcererMSVC50.mak
  22.         pccts/sorcerer/lib/msvc.dsp
  23.   I do not have an MS based computer.  If you discover problems
  24.   please report them so as to save trouble for others in the future.
  25. ]
  26. [
  27.  Modified by Terence Parr (September 1995) to change .C to .cpp
  28. ]
  29. [
  30.  This file contains notes on MSVC for Windows NT console execs by Dave
  31.  Seidel and an explanation of flags etc.. by John Hall; good luck,
  32.  Terence
  33. ]
  34. ===============================================================================
  35. Date: Sat, 31 Dec 1994 11:40:36 -0500 (EST)
  36. From: David Seidel <75342.2034@compuserve.com>
  37. I've succesfully build 1.31b3 with djgpp for DOS and MSVC 2.0 for Windows 
  38. NT.  The only (minor) problem I had was that GNU make (version 3.71, in the 
  39. djgpp port) complained about "multiple targets" in both the antlr and dlg 
  40. makefiles.  I got around the error by, in each makefile, commenting out the 
  41. $(SRC) dependency, for example:
  42.    antlr: $(OBJ) #$(SRC)
  43. I don't know why this is happenning, since you haven't changed that part of 
  44. the makefile at all, and I think this used to work ok...
  45. Here are the makefiles I built from within the MSVC 2.0 environment for antlr 
  46. and dlg and Windows NT console executables.  Please feel free to pass them 
  47. on.  Of course, as soon as 1.31 "goes gold", I will send you nice new 
  48. binaries.  I'm not going to bother to keep doing both Borland and djgpp for 
  49. DOS however.  Instead, I'll just keep the djgpp version up to date and also 
  50. provide WinNT binaries.
  51. Dave
  52. ===============================================================================
  53.          How to port PCCTS 1.10 (and 1.32 hopefully) to Visual C++
  54.                                    By
  55.                        John Hall <jhall@ivy.wpi.edu>
  56. Here is how to compile an ANTLR grammar in Visual C++.  These steps
  57. describe how to have your ANTLR grammar parse the input file the user
  58. selects when they choose File Open in your Windows application.  (Even
  59. if you aren't using Visual C++, the steps should be portable enough to
  60. other compilers.)
  61.  * Make sure that ANTLR and DLG generate ANSI code (use the -ga
  62.    switch).
  63.  * Set the following compiler flags in Visual C++ (these are in the
  64.    Memory Model category of the compiler options in the Project
  65.    Options menu):
  66.    FLAG MEANING
  67.    ==== ==============================================================
  68.    /AL  Large memory model (multiple data segments; data items must be
  69.     smaller than 64K).
  70.    /Gtn Allocates all items whose size is greater than or equal to n
  71.     in a new data segment.  (I let n be 256: /Gt256.)
  72.    /Gx- All references to data items are done with far addressing in
  73.     case they are placed in a far segment.
  74.  * Add the following member variable to the attributes section of your
  75.    derived CDocument class (you will need to make sure you also
  76.    include stdio.h):
  77.    FILE *fp;
  78.  * Add the following method to your derived CDocument class:
  79.    BOOL CAppDoc::OnOpenDocument(const char* pszPathName)
  80.    {
  81.        // Call CDocument's OnOpenDocument to do housekeeping for us
  82.        // DON'T add anything to the loading section of Serialize
  83.        if (!CDocument::OnOpenDocument(pszPathName))
  84.            return FALSE;
  85.    
  86.        // Open input file
  87.        if ((fp = fopen(pszPathName, "r")) == NULL)
  88.            return FALSE;
  89.    
  90.        // Parse input file
  91.        ANTLR(start(), fp);
  92.    
  93.        // Close input file
  94.        fclose(fp);
  95.        return TRUE;
  96.    }
  97.    (Note: additional code may be necessary, depending on your parser.
  98.    For example, if your parser uses PCCTS's symbol table library, you
  99.    will need to insert calls to zzs_init and zzs_done.)
  100.  * Compile the generated C files as C++ files.  (I renamed the files
  101.    to have a .CPP extension to fool Visual C++ into thinking they were
  102.    C++ files.  One might also use the /Tp switch, but that switch
  103.    requires you separately include the filename.)  [I used this step
  104.    as an easy out for all the external linking errors I was getting
  105.    that I couldn't fix by declaring things extern "C".]
  106.  * Make sure the __STDC__ portion of the generated files gets
  107.    compiled.  (Either define __STDC__ yourself or else change all
  108.    occurrences of __STDC__ to __cplusplus in the generated files.  You
  109.    can define __STDC__ in the Preprocessor category of the compiler
  110.    options.)
  111.         ================================================================
  112.         = Note 23-Sep-97: This is probably not necessary any more.     =
  113.         = With 1.33MRxxx the use of __STDC__ was replaced with the     =
  114.         = macro __USE_PROTOS to control the compilation of prototypes. =
  115.         ================================================================
  116.                         
  117. That last step is important for Visual C++, but may not apply to other
  118. compilers.  For C++ compilers, whether __STDC__ is defined is
  119. implementation dependent (ARM, page 379).  Apparently, Visual C++ does
  120. not to define it; it also does not support "old style" C function
  121. definitions (which is okay, according to page 404 of the ARM).  Those
  122. two things together caused problems when trying to port the code.
  123. When it saw this:
  124. #ifdef __STDC__
  125. void
  126. globals(AST **_root)
  127. #else
  128. globals(_root)
  129. AST **_root;
  130. #endif
  131. it skipped the __STDC__ section and tried to process the "old style"
  132. function definition, where it choked.
  133. When you finally get your parser to compile and link without error,
  134. you may get General Protection Fault errors at run time.  The problem
  135. I had was that a NULL was passed to a variable argument function
  136. without an explicit cast.  The function grabbed a pointer (32-bits)
  137. off the stack using va_arg, but the NULL was passed silently as the
  138. integer 0 (16 bits), making the resulting pointer was invalid.  (This
  139. was in PCCTS's sample C parser.)
  140. There is one other thing I might suggest to help you avoid a run-time
  141. error.  Make sure you redefine the default error reporting function,
  142. zzsyn.  To do this, put "#define USER_ZZSYN" in your #header section
  143. and put your own zzsyn somewhere.  You can then pop up a MessageBox or
  144. print the error to some output window.
  145. ===============================================================================