/ Hex Artifact Content
Login

Artifact 5c7d2b78bf9326ccea50b5835eb1574e6c51ad71:


0000: 2f 2a 20 44 72 69 76 65 72 20 74 65 6d 70 6c 61  /* Driver templa
0010: 74 65 20 66 6f 72 20 74 68 65 20 4c 45 4d 4f 4e  te for the LEMON
0020: 20 70 61 72 73 65 72 20 67 65 6e 65 72 61 74 6f   parser generato
0030: 72 2e 0a 2a 2a 20 54 68 65 20 61 75 74 68 6f 72  r..** The author
0040: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0050: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0060: 72 63 65 20 63 6f 64 65 2e 0a 2a 2f 0a 2f 2a 20  rce code..*/./* 
0070: 46 69 72 73 74 20 6f 66 66 2c 20 63 6f 64 65 20  First off, code 
0080: 69 73 20 69 6e 63 6c 75 64 65 20 77 68 69 63 68  is include which
0090: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 22 69 6e   follows the "in
00a0: 63 6c 75 64 65 22 20 64 65 63 6c 61 72 61 74 69  clude" declarati
00b0: 6f 6e 0a 2a 2a 20 69 6e 20 74 68 65 20 69 6e 70  on.** in the inp
00c0: 75 74 20 66 69 6c 65 2e 20 2a 2f 0a 23 69 6e 63  ut file. */.#inc
00d0: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 25  lude <stdio.h>.%
00e0: 25 0a 2f 2a 20 4e 65 78 74 20 69 73 20 61 6c 6c  %./* Next is all
00f0: 20 74 6f 6b 65 6e 20 76 61 6c 75 65 73 2c 20 69   token values, i
0100: 6e 20 61 20 66 6f 72 6d 20 73 75 69 74 61 62 6c  n a form suitabl
0110: 65 20 66 6f 72 20 75 73 65 20 62 79 20 6d 61 6b  e for use by mak
0120: 65 68 65 61 64 65 72 73 2e 0a 2a 2a 20 54 68 69  eheaders..** Thi
0130: 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 62  s section will b
0140: 65 20 6e 75 6c 6c 20 75 6e 6c 65 73 73 20 6c 65  e null unless le
0150: 6d 6f 6e 20 69 73 20 72 75 6e 20 77 69 74 68 20  mon is run with 
0160: 74 68 65 20 2d 6d 20 73 77 69 74 63 68 2e 0a 2a  the -m switch..*
0170: 2f 0a 2f 2a 20 0a 2a 2a 20 54 68 65 73 65 20 63  /./* .** These c
0180: 6f 6e 73 74 61 6e 74 73 20 28 61 6c 6c 20 67 65  onstants (all ge
0190: 6e 65 72 61 74 65 64 20 61 75 74 6f 6d 61 74 69  nerated automati
01a0: 63 61 6c 6c 79 20 62 79 20 74 68 65 20 70 61 72  cally by the par
01b0: 73 65 72 20 67 65 6e 65 72 61 74 6f 72 29 0a 2a  ser generator).*
01c0: 2a 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  * specify the va
01d0: 72 69 6f 75 73 20 6b 69 6e 64 73 20 6f 66 20 74  rious kinds of t
01e0: 6f 6b 65 6e 73 20 28 74 65 72 6d 69 6e 61 6c 73  okens (terminals
01f0: 29 20 74 68 61 74 20 74 68 65 20 70 61 72 73 65  ) that the parse
0200: 72 0a 2a 2a 20 75 6e 64 65 72 73 74 61 6e 64 73  r.** understands
0210: 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 79  . .**.** Each sy
0220: 6d 62 6f 6c 20 68 65 72 65 20 69 73 20 61 20 74  mbol here is a t
0230: 65 72 6d 69 6e 61 6c 20 73 79 6d 62 6f 6c 20 69  erminal symbol i
0240: 6e 20 74 68 65 20 67 72 61 6d 6d 61 72 2e 0a 2a  n the grammar..*
0250: 2f 0a 25 25 0a 2f 2a 20 4d 61 6b 65 20 73 75 72  /.%%./* Make sur
0260: 65 20 74 68 65 20 49 4e 54 45 52 46 41 43 45 20  e the INTERFACE 
0270: 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
0280: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 49 4e 54  ..*/.#ifndef INT
0290: 45 52 46 41 43 45 0a 23 20 64 65 66 69 6e 65 20  ERFACE.# define 
02a0: 49 4e 54 45 52 46 41 43 45 20 31 0a 23 65 6e 64  INTERFACE 1.#end
02b0: 69 66 0a 2f 2a 20 54 68 65 20 6e 65 78 74 20 74  if./* The next t
02c0: 68 69 6e 67 20 69 6e 63 6c 75 64 65 64 20 69 73  hing included is
02d0: 20 73 65 72 69 65 73 20 6f 66 20 64 65 66 69 6e   series of defin
02e0: 65 73 20 77 68 69 63 68 20 63 6f 6e 74 72 6f 6c  es which control
02f0: 0a 2a 2a 20 76 61 72 69 6f 75 73 20 61 73 70 65  .** various aspe
0300: 63 74 73 20 6f 66 20 74 68 65 20 67 65 6e 65 72  cts of the gener
0310: 61 74 65 64 20 70 61 72 73 65 72 2e 0a 2a 2a 20  ated parser..** 
0320: 20 20 20 59 59 43 4f 44 45 54 59 50 45 20 20 20     YYCODETYPE   
0330: 20 20 20 20 20 20 69 73 20 74 68 65 20 64 61 74        is the dat
0340: 61 20 74 79 70 65 20 75 73 65 64 20 66 6f 72 20  a type used for 
0350: 73 74 6f 72 69 6e 67 20 74 65 72 6d 69 6e 61 6c  storing terminal
0360: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0370: 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 6e 6f            and no
0380: 6e 74 65 72 6d 69 6e 61 6c 20 6e 75 6d 62 65 72  nterminal number
0390: 73 2e 20 20 22 75 6e 73 69 67 6e 65 64 20 63 68  s.  "unsigned ch
03a0: 61 72 22 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ar" is.**       
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03c0: 75 73 65 64 20 69 66 20 74 68 65 72 65 20 61 72  used if there ar
03d0: 65 20 66 65 77 65 72 20 74 68 61 6e 20 32 35 30  e fewer than 250
03e0: 20 74 65 72 6d 69 6e 61 6c 73 0a 2a 2a 20 20 20   terminals.**   
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0400: 20 20 20 20 61 6e 64 20 6e 6f 6e 74 65 72 6d 69      and nontermi
0410: 6e 61 6c 73 2e 20 20 22 69 6e 74 22 20 69 73 20  nals.  "int" is 
0420: 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 0a  used otherwise..
0430: 2a 2a 20 20 20 20 59 59 4e 4f 43 4f 44 45 20 20  **    YYNOCODE  
0440: 20 20 20 20 20 20 20 20 20 69 73 20 61 20 6e 75           is a nu
0450: 6d 62 65 72 20 6f 66 20 74 79 70 65 20 59 59 43  mber of type YYC
0460: 4f 44 45 54 59 50 45 20 77 68 69 63 68 20 63 6f  ODETYPE which co
0470: 72 72 65 73 70 6f 6e 64 73 0a 2a 2a 20 20 20 20  rresponds.**    
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 20 74 6f 20 6e 6f 20 6c 65 67 61 6c 20 74     to no legal t
04a0: 65 72 6d 69 6e 61 6c 20 6f 72 20 6e 6f 6e 74 65  erminal or nonte
04b0: 72 6d 69 6e 61 6c 20 6e 75 6d 62 65 72 2e 20 20  rminal number.  
04c0: 54 68 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  This.**         
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
04e0: 6d 62 65 72 20 69 73 20 75 73 65 64 20 74 6f 20  mber is used to 
04f0: 66 69 6c 6c 20 69 6e 20 65 6d 70 74 79 20 73 6c  fill in empty sl
0500: 6f 74 73 20 6f 66 20 74 68 65 20 68 61 73 68 20  ots of the hash 
0510: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
0520: 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65 2e            table.
0530: 0a 2a 2a 20 20 20 20 59 59 41 43 54 49 4f 4e 54  .**    YYACTIONT
0540: 59 50 45 20 20 20 20 20 20 20 69 73 20 74 68 65  YPE       is the
0550: 20 64 61 74 61 20 74 79 70 65 20 75 73 65 64 20   data type used 
0560: 66 6f 72 20 73 74 6f 72 69 6e 67 20 74 65 72 6d  for storing term
0570: 69 6e 61 6c 0a 2a 2a 20 20 20 20 20 20 20 20 20  inal.**         
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
0590: 64 20 6e 6f 6e 74 65 72 6d 69 6e 61 6c 20 6e 75  d nonterminal nu
05a0: 6d 62 65 72 73 2e 20 20 22 75 6e 73 69 67 6e 65  mbers.  "unsigne
05b0: 64 20 63 68 61 72 22 20 69 73 0a 2a 2a 20 20 20  d char" is.**   
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 75 73 65 64 20 69 66 20 74 68 65 72      used if ther
05e0: 65 20 61 72 65 20 66 65 77 65 72 20 74 68 61 6e  e are fewer than
05f0: 20 32 35 30 20 72 75 6c 65 73 20 61 6e 64 0a 2a   250 rules and.*
0600: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
0610: 20 20 20 20 20 20 20 20 73 74 61 74 65 73 20 63          states c
0620: 6f 6d 62 69 6e 65 64 2e 20 20 22 69 6e 74 22 20  ombined.  "int" 
0630: 69 73 20 75 73 65 64 20 6f 74 68 65 72 77 69 73  is used otherwis
0640: 65 2e 0a 2a 2a 20 20 20 20 50 61 72 73 65 54 4f  e..**    ParseTO
0650: 4b 45 4e 54 59 50 45 20 20 20 20 20 69 73 20 74  KENTYPE     is t
0660: 68 65 20 64 61 74 61 20 74 79 70 65 20 75 73 65  he data type use
0670: 64 20 66 6f 72 20 6d 69 6e 6f 72 20 74 6f 6b 65  d for minor toke
0680: 6e 73 20 67 69 76 65 6e 20 0a 2a 2a 20 20 20 20  ns given .**    
0690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06a0: 20 20 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74     directly to t
06b0: 68 65 20 70 61 72 73 65 72 20 66 72 6f 6d 20 74  he parser from t
06c0: 68 65 20 74 6f 6b 65 6e 69 7a 65 72 2e 0a 2a 2a  he tokenizer..**
06d0: 20 20 20 20 59 59 4d 49 4e 4f 52 54 59 50 45 20      YYMINORTYPE 
06e0: 20 20 20 20 20 20 20 69 73 20 74 68 65 20 64 61         is the da
06f0: 74 61 20 74 79 70 65 20 75 73 65 64 20 66 6f 72  ta type used for
0700: 20 61 6c 6c 20 6d 69 6e 6f 72 20 74 6f 6b 65 6e   all minor token
0710: 73 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  s..**           
0720: 20 20 20 20 20 20 20 20 20 20 20 20 54 68 69 73              This
0730: 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 61 20   is typically a 
0740: 75 6e 69 6f 6e 20 6f 66 20 6d 61 6e 79 20 74 79  union of many ty
0750: 70 65 73 2c 20 6f 6e 65 20 6f 66 0a 2a 2a 20 20  pes, one of.**  
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0770: 20 20 20 20 20 77 68 69 63 68 20 69 73 20 50 61       which is Pa
0780: 72 73 65 54 4f 4b 45 4e 54 59 50 45 2e 20 20 54  rseTOKENTYPE.  T
0790: 68 65 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  he entry in the 
07a0: 75 6e 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 20  union.**        
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
07c0: 6f 72 20 62 61 73 65 20 74 6f 6b 65 6e 73 20 69  or base tokens i
07d0: 73 20 63 61 6c 6c 65 64 20 22 79 79 30 22 2e 0a  s called "yy0"..
07e0: 2a 2a 20 20 20 20 59 59 53 54 41 43 4b 44 45 50  **    YYSTACKDEP
07f0: 54 48 20 20 20 20 20 20 20 69 73 20 74 68 65 20  TH       is the 
0800: 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
0810: 20 74 68 65 20 70 61 72 73 65 72 27 73 20 73 74   the parser's st
0820: 61 63 6b 2e 0a 2a 2a 20 20 20 20 50 61 72 73 65  ack..**    Parse
0830: 41 52 47 44 45 43 4c 20 20 20 20 20 20 20 69 73  ARGDECL       is
0840: 20 61 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f   a declaration o
0850: 66 20 61 20 33 72 64 20 61 72 67 75 6d 65 6e 74  f a 3rd argument
0860: 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20 20   to the.**      
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0880: 20 70 61 72 73 65 72 2c 20 6f 72 20 6e 75 6c 6c   parser, or null
0890: 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
08a0: 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 2e 0a  extra argument..
08b0: 2a 2a 20 20 20 20 50 61 72 73 65 4b 52 41 52 47  **    ParseKRARG
08c0: 44 45 43 4c 20 20 20 20 20 41 20 76 65 72 73 69  DECL     A versi
08d0: 6f 6e 20 6f 66 20 50 61 72 73 65 41 52 47 44 45  on of ParseARGDE
08e0: 43 4c 20 66 6f 72 20 4b 26 52 20 43 2e 0a 2a 2a  CL for K&R C..**
08f0: 20 20 20 20 50 61 72 73 65 41 4e 53 49 41 52 47      ParseANSIARG
0900: 44 45 43 4c 20 20 20 41 20 76 65 72 73 69 6f 6e  DECL   A version
0910: 20 6f 66 20 50 61 72 73 65 41 52 47 44 45 43 4c   of ParseARGDECL
0920: 20 66 6f 72 20 41 4e 53 49 20 43 2e 0a 2a 2a 20   for ANSI C..** 
0930: 20 20 20 59 59 4e 53 54 41 54 45 20 20 20 20 20     YYNSTATE     
0940: 20 20 20 20 20 20 74 68 65 20 63 6f 6d 62 69 6e        the combin
0950: 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 73 74 61  ed number of sta
0960: 74 65 73 2e 0a 2a 2a 20 20 20 20 59 59 4e 52 55  tes..**    YYNRU
0970: 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 74 68  LE            th
0980: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 75 6c 65  e number of rule
0990: 73 20 69 6e 20 74 68 65 20 67 72 61 6d 6d 61 72  s in the grammar
09a0: 0a 2a 2a 20 20 20 20 59 59 45 52 52 4f 52 53 59  .**    YYERRORSY
09b0: 4d 42 4f 4c 20 20 20 20 20 20 69 73 20 74 68 65  MBOL      is the
09c0: 20 63 6f 64 65 20 6e 75 6d 62 65 72 20 6f 66 20   code number of 
09d0: 74 68 65 20 65 72 72 6f 72 20 73 79 6d 62 6f 6c  the error symbol
09e0: 2e 20 20 49 66 20 6e 6f 74 0a 2a 2a 20 20 20 20  .  If not.**    
09f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a00: 20 20 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e     defined, then
0a10: 20 64 6f 20 6e 6f 20 65 72 72 6f 72 20 70 72 6f   do no error pro
0a20: 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 25 25 0a 23  cessing..*/.%%.#
0a30: 64 65 66 69 6e 65 20 59 59 5f 4e 4f 5f 41 43 54  define YY_NO_ACT
0a40: 49 4f 4e 20 20 20 20 20 20 28 59 59 4e 53 54 41  ION      (YYNSTA
0a50: 54 45 2b 59 59 4e 52 55 4c 45 2b 32 29 0a 23 64  TE+YYNRULE+2).#d
0a60: 65 66 69 6e 65 20 59 59 5f 41 43 43 45 50 54 5f  efine YY_ACCEPT_
0a70: 41 43 54 49 4f 4e 20 20 28 59 59 4e 53 54 41 54  ACTION  (YYNSTAT
0a80: 45 2b 59 59 4e 52 55 4c 45 2b 31 29 0a 23 64 65  E+YYNRULE+1).#de
0a90: 66 69 6e 65 20 59 59 5f 45 52 52 4f 52 5f 41 43  fine YY_ERROR_AC
0aa0: 54 49 4f 4e 20 20 20 28 59 59 4e 53 54 41 54 45  TION   (YYNSTATE
0ab0: 2b 59 59 4e 52 55 4c 45 29 0a 2f 2a 20 4e 65 78  +YYNRULE)./* Nex
0ac0: 74 20 69 73 20 74 68 65 20 61 63 74 69 6f 6e 20  t is the action 
0ad0: 74 61 62 6c 65 2e 20 20 45 61 63 68 20 65 6e 74  table.  Each ent
0ae0: 72 79 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ry in this table
0af0: 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 0a 2a 2a 20   contains.**.** 
0b00: 20 2b 20 20 41 6e 20 69 6e 74 65 67 65 72 20 77   +  An integer w
0b10: 68 69 63 68 20 69 73 20 74 68 65 20 6e 75 6d 62  hich is the numb
0b20: 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  er representing 
0b30: 74 68 65 20 6c 6f 6f 6b 2d 61 68 65 61 64 0a 2a  the look-ahead.*
0b40: 2a 20 20 20 20 20 74 6f 6b 65 6e 0a 2a 2a 0a 2a  *     token.**.*
0b50: 2a 20 20 2b 20 20 41 6e 20 69 6e 74 65 67 65 72  *  +  An integer
0b60: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 61 74   indicating what
0b70: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
0b80: 20 20 4e 75 6d 62 65 72 20 28 4e 29 20 62 65 74    Number (N) bet
0b90: 77 65 65 6e 0a 2a 2a 20 20 20 20 20 30 20 61 6e  ween.**     0 an
0ba0: 64 20 59 59 4e 53 54 41 54 45 2d 31 20 6d 65 61  d YYNSTATE-1 mea
0bb0: 6e 20 73 68 69 66 74 20 74 68 65 20 6c 6f 6f 6b  n shift the look
0bc0: 2d 61 68 65 61 64 20 61 6e 64 20 67 6f 20 74 6f  -ahead and go to
0bd0: 20 73 74 61 74 65 20 4e 2e 0a 2a 2a 20 20 20 20   state N..**    
0be0: 20 4e 75 6d 62 65 72 73 20 62 65 74 77 65 65 6e   Numbers between
0bf0: 20 59 59 4e 53 54 41 54 45 20 61 6e 64 20 59 59   YYNSTATE and YY
0c00: 4e 53 54 41 54 45 2b 59 59 4e 52 55 4c 45 2d 31  NSTATE+YYNRULE-1
0c10: 20 6d 65 61 6e 20 72 65 64 75 63 65 20 62 79 0a   mean reduce by.
0c20: 2a 2a 20 20 20 20 20 72 75 6c 65 20 4e 2d 59 59  **     rule N-YY
0c30: 4e 53 54 41 54 45 2e 20 20 4e 75 6d 62 65 72 20  NSTATE.  Number 
0c40: 59 59 4e 53 54 41 54 45 2b 59 59 4e 52 55 4c 45  YYNSTATE+YYNRULE
0c50: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 73 79   means that a sy
0c60: 6e 74 61 78 0a 2a 2a 20 20 20 20 20 65 72 72 6f  ntax.**     erro
0c70: 72 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20  r has occurred. 
0c80: 20 4e 75 6d 62 65 72 20 59 59 4e 53 54 41 54 45   Number YYNSTATE
0c90: 2b 59 59 4e 52 55 4c 45 2b 31 20 6d 65 61 6e 73  +YYNRULE+1 means
0ca0: 20 74 68 65 20 70 61 72 73 65 72 0a 2a 2a 20 20   the parser.**  
0cb0: 20 20 20 61 63 63 65 70 74 73 20 69 74 73 20 69     accepts its i
0cc0: 6e 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 20 2b 20 20  nput..**.**  +  
0cd0: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
0ce0: 20 6e 65 78 74 20 65 6e 74 72 79 20 77 69 74 68   next entry with
0cf0: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 76   the same hash v
0d00: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  alue..**.** The 
0d10: 61 63 74 69 6f 6e 20 74 61 62 6c 65 20 69 73 20  action table is 
0d20: 72 65 61 6c 6c 79 20 61 20 73 65 72 69 65 73 20  really a series 
0d30: 6f 66 20 68 61 73 68 20 74 61 62 6c 65 73 2e 20  of hash tables. 
0d40: 20 45 61 63 68 20 68 61 73 68 0a 2a 2a 20 74 61   Each hash.** ta
0d50: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 6e  ble contains a n
0d60: 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
0d70: 20 77 68 69 63 68 20 69 73 20 61 20 70 6f 77 65   which is a powe
0d80: 72 20 6f 66 20 74 77 6f 2e 20 20 54 68 65 0a 2a  r of two.  The.*
0d90: 2a 20 22 73 74 61 74 65 22 20 74 61 62 6c 65 20  * "state" table 
0da0: 28 77 68 69 63 68 20 66 6f 6c 6c 6f 77 73 29 20  (which follows) 
0db0: 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
0dc0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 73  tion about the s
0dd0: 74 61 72 74 69 6e 67 0a 2a 2a 20 70 6f 69 6e 74  tarting.** point
0de0: 20 61 6e 64 20 73 69 7a 65 20 6f 66 20 65 61 63   and size of eac
0df0: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  h hash table..*/
0e00: 0a 73 74 72 75 63 74 20 79 79 41 63 74 69 6f 6e  .struct yyAction
0e10: 45 6e 74 72 79 20 7b 0a 20 20 59 59 43 4f 44 45  Entry {.  YYCODE
0e20: 54 59 50 45 20 20 20 6c 6f 6f 6b 61 68 65 61 64  TYPE   lookahead
0e30: 3b 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65  ;   /* The value
0e40: 20 6f 66 20 74 68 65 20 6c 6f 6f 6b 2d 61 68 65   of the look-ahe
0e50: 61 64 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 59 59  ad token */.  YY
0e60: 43 4f 44 45 54 59 50 45 20 20 20 6e 65 78 74 3b  CODETYPE   next;
0e70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
0e80: 65 6e 74 72 79 20 2b 20 31 2e 20 5a 65 72 6f 20  entry + 1. Zero 
0e90: 61 74 20 65 6e 64 20 6f 66 20 63 6f 6c 6c 69 73  at end of collis
0ea0: 69 6f 6e 20 63 68 61 69 6e 20 2a 2f 0a 20 20 59  ion chain */.  Y
0eb0: 59 41 43 54 49 4f 4e 54 59 50 45 20 61 63 74 69  YACTIONTYPE acti
0ec0: 6f 6e 3b 20 20 20 20 20 20 2f 2a 20 41 63 74 69  on;      /* Acti
0ed0: 6f 6e 20 74 6f 20 74 61 6b 65 20 66 6f 72 20 74  on to take for t
0ee0: 68 69 73 20 6c 6f 6f 6b 2d 61 68 65 61 64 20 2a  his look-ahead *
0ef0: 2f 0a 7d 3b 0a 73 74 61 74 69 63 20 73 74 72 75  /.};.static stru
0f00: 63 74 20 79 79 41 63 74 69 6f 6e 45 6e 74 72 79  ct yyActionEntry
0f10: 20 79 79 41 63 74 69 6f 6e 54 61 62 6c 65 5b 5d   yyActionTable[]
0f20: 20 3d 20 7b 0a 25 25 0a 7d 3b 0a 0a 2f 2a 20 54   = {.%%.};../* T
0f30: 68 65 20 73 74 61 74 65 20 74 61 62 6c 65 20 63  he state table c
0f40: 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
0f50: 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 6c 6f  ion needed to lo
0f60: 6f 6b 20 75 70 20 74 68 65 20 63 6f 72 72 65 63  ok up the correc
0f70: 74 0a 2a 2a 20 61 63 74 69 6f 6e 20 69 6e 20 74  t.** action in t
0f80: 68 65 20 61 63 74 69 6f 6e 20 74 61 62 6c 65 2c  he action table,
0f90: 20 67 69 76 65 6e 20 74 68 65 20 63 75 72 72 65   given the curre
0fa0: 6e 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  nt state of the 
0fb0: 70 61 72 73 65 72 2e 0a 2a 2a 20 49 6e 66 6f 72  parser..** Infor
0fc0: 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e  mation needed in
0fd0: 63 6c 75 64 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 2b  cludes:.**.**  +
0fe0: 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74    A pointer to t
0ff0: 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
1000: 61 63 74 69 6f 6e 20 68 61 73 68 20 74 61 62 6c  action hash tabl
1010: 65 20 69 6e 20 79 79 41 63 74 69 6f 6e 54 61 62  e in yyActionTab
1020: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 20 2b 20 20 54 68  le..**.**  +  Th
1030: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
1040: 69 65 73 20 69 6e 20 74 68 65 20 61 63 74 69 6f  ies in the actio
1050: 6e 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  n hash table..**
1060: 0a 2a 2a 20 20 2b 20 20 54 68 65 20 64 65 66 61  .**  +  The defa
1070: 75 6c 74 20 61 63 74 69 6f 6e 2e 20 20 54 68 69  ult action.  Thi
1080: 73 20 69 73 20 74 68 65 20 61 63 74 69 6f 6e 20  s is the action 
1090: 74 6f 20 74 61 6b 65 20 69 66 20 6e 6f 20 65 6e  to take if no en
10a0: 74 72 79 20 66 6f 72 0a 2a 2a 20 20 20 20 20 74  try for.**     t
10b0: 68 65 20 67 69 76 65 6e 20 6c 6f 6f 6b 2d 61 68  he given look-ah
10c0: 65 61 64 20 69 73 20 66 6f 75 6e 64 20 69 6e 20  ead is found in 
10d0: 74 68 65 20 61 63 74 69 6f 6e 20 68 61 73 68 20  the action hash 
10e0: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
10f0: 20 79 79 53 74 61 74 65 45 6e 74 72 79 20 7b 0a   yyStateEntry {.
1100: 20 20 73 74 72 75 63 74 20 79 79 41 63 74 69 6f    struct yyActio
1110: 6e 45 6e 74 72 79 20 2a 68 61 73 68 74 62 6c 3b  nEntry *hashtbl;
1120: 20 2f 2a 20 53 74 61 72 74 20 6f 66 20 74 68 65   /* Start of the
1130: 20 68 61 73 68 20 74 61 62 6c 65 20 69 6e 20 79   hash table in y
1140: 79 41 63 74 69 6f 6e 54 61 62 6c 65 20 2a 2f 0a  yActionTable */.
1150: 20 20 59 59 43 4f 44 45 54 59 50 45 20 6e 45 6e    YYCODETYPE nEn
1160: 74 72 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  try;            
1170: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1180: 74 72 69 65 73 20 69 6e 20 61 63 74 69 6f 6e 20  tries in action 
1190: 68 61 73 68 20 74 61 62 6c 65 20 2a 2f 0a 20 20  hash table */.  
11a0: 59 59 41 43 54 49 4f 4e 54 59 50 45 20 61 63 74  YYACTIONTYPE act
11b0: 69 6f 6e 44 65 66 61 75 6c 74 3b 20 20 20 20 2f  ionDefault;    /
11c0: 2a 20 44 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  * Default action
11d0: 20 69 66 20 6c 6f 6f 6b 2d 61 68 65 61 64 20 6e   if look-ahead n
11e0: 6f 74 20 66 6f 75 6e 64 20 2a 2f 0a 7d 3b 0a 73  ot found */.};.s
11f0: 74 61 74 69 63 20 73 74 72 75 63 74 20 79 79 53  tatic struct yyS
1200: 74 61 74 65 45 6e 74 72 79 20 79 79 53 74 61 74  tateEntry yyStat
1210: 65 54 61 62 6c 65 5b 5d 20 3d 20 7b 0a 25 25 0a  eTable[] = {.%%.
1220: 7d 3b 0a 0a 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  };../* The follo
1230: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 72  wing structure r
1240: 65 70 72 65 73 65 6e 74 73 20 61 20 73 69 6e 67  epresents a sing
1250: 6c 65 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  le element of th
1260: 65 0a 2a 2a 20 70 61 72 73 65 72 27 73 20 73 74  e.** parser's st
1270: 61 63 6b 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  ack.  Informatio
1280: 6e 20 73 74 6f 72 65 64 20 69 6e 63 6c 75 64 65  n stored include
1290: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 2b 20 20 54 68  s:.**.**   +  Th
12a0: 65 20 73 74 61 74 65 20 6e 75 6d 62 65 72 20 66  e state number f
12b0: 6f 72 20 74 68 65 20 70 61 72 73 65 72 20 61 74  or the parser at
12c0: 20 74 68 69 73 20 6c 65 76 65 6c 20 6f 66 20 74   this level of t
12d0: 68 65 20 73 74 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20  he stack..**.** 
12e0: 20 20 2b 20 20 54 68 65 20 76 61 6c 75 65 20 6f    +  The value o
12f0: 66 20 74 68 65 20 74 6f 6b 65 6e 20 73 74 6f 72  f the token stor
1300: 65 64 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  ed at this level
1310: 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 0a 2a   of the stack..*
1320: 2a 20 20 20 20 20 20 28 49 6e 20 6f 74 68 65 72  *      (In other
1330: 20 77 6f 72 64 73 2c 20 74 68 65 20 22 6d 61 6a   words, the "maj
1340: 6f 72 22 20 74 6f 6b 65 6e 2e 29 0a 2a 2a 0a 2a  or" token.).**.*
1350: 2a 20 20 20 2b 20 20 54 68 65 20 73 65 6d 61 6e  *   +  The seman
1360: 74 69 63 20 76 61 6c 75 65 20 73 74 6f 72 65 64  tic value stored
1370: 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 6f   at this level o
1380: 66 20 74 68 65 20 73 74 61 63 6b 2e 20 20 54 68  f the stack.  Th
1390: 69 73 20 69 73 0a 2a 2a 20 20 20 20 20 20 74 68  is is.**      th
13a0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  e information us
13b0: 65 64 20 62 79 20 74 68 65 20 61 63 74 69 6f 6e  ed by the action
13c0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
13d0: 20 67 72 61 6d 6d 61 72 2e 0a 2a 2a 20 20 20 20   grammar..**    
13e0: 20 20 49 74 20 69 73 20 73 6f 6d 65 74 69 6d 65    It is sometime
13f0: 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 6d 69  s called the "mi
1400: 6e 6f 72 22 20 74 6f 6b 65 6e 2e 0a 2a 2f 0a 73  nor" token..*/.s
1410: 74 72 75 63 74 20 79 79 53 74 61 63 6b 45 6e 74  truct yyStackEnt
1420: 72 79 20 7b 0a 20 20 69 6e 74 20 73 74 61 74 65  ry {.  int state
1430: 6e 6f 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  no;       /* The
1440: 20 73 74 61 74 65 2d 6e 75 6d 62 65 72 20 2a 2f   state-number */
1450: 0a 20 20 69 6e 74 20 6d 61 6a 6f 72 3b 20 20 20  .  int major;   
1460: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 6a        /* The maj
1470: 6f 72 20 74 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  or token value. 
1480: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 64   This is the cod
1490: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
14a0: 20 20 20 20 20 20 20 2a 2a 20 6e 75 6d 62 65 72         ** number
14b0: 20 66 6f 72 20 74 68 65 20 74 6f 6b 65 6e 20 61   for the token a
14c0: 74 20 74 68 69 73 20 73 74 61 63 6b 20 6c 65 76  t this stack lev
14d0: 65 6c 20 2a 2f 0a 20 20 59 59 4d 49 4e 4f 52 54  el */.  YYMINORT
14e0: 59 50 45 20 6d 69 6e 6f 72 3b 20 2f 2a 20 54 68  YPE minor; /* Th
14f0: 65 20 75 73 65 72 2d 73 75 70 70 6c 69 65 64 20  e user-supplied 
1500: 6d 69 6e 6f 72 20 74 6f 6b 65 6e 20 76 61 6c 75  minor token valu
1510: 65 2e 20 20 54 68 69 73 0a 20 20 20 20 20 20 20  e.  This.       
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
1530: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
1540: 20 74 68 65 20 74 6f 6b 65 6e 20 20 2a 2f 0a 7d   the token  */.}
1550: 3b 0a 0a 2f 2a 20 54 68 65 20 73 74 61 74 65 20  ;../* The state 
1560: 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 69 73  of the parser is
1570: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 63 6f 6e 74   completely cont
1580: 61 69 6e 65 64 20 69 6e 20 61 6e 20 69 6e 73 74  ained in an inst
1590: 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 65 20 66  ance of.** the f
15a0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
15b0: 72 65 20 2a 2f 0a 73 74 72 75 63 74 20 79 79 50  re */.struct yyP
15c0: 61 72 73 65 72 20 7b 0a 20 20 69 6e 74 20 69 64  arser {.  int id
15d0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
15e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15f0: 20 49 6e 64 65 78 20 6f 66 20 74 6f 70 20 65 6c   Index of top el
1600: 65 6d 65 6e 74 20 69 6e 20 73 74 61 63 6b 20 2a  ement in stack *
1610: 2f 0a 20 20 69 6e 74 20 65 72 72 63 6e 74 3b 20  /.  int errcnt; 
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 20 20 2f 2a 20 53 68 69 66 74          /* Shift
1640: 73 20 6c 65 66 74 20 62 65 66 6f 72 65 20 6f 75  s left before ou
1650: 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 2a  t of the error *
1660: 2f 0a 20 20 73 74 72 75 63 74 20 79 79 53 74 61  /.  struct yySta
1670: 63 6b 45 6e 74 72 79 20 2a 74 6f 70 3b 20 20 20  ckEntry *top;   
1680: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1690: 65 72 20 74 6f 20 74 68 65 20 74 6f 70 20 73 74  er to the top st
16a0: 61 63 6b 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a 20  ack element */. 
16b0: 20 73 74 72 75 63 74 20 79 79 53 74 61 63 6b 45   struct yyStackE
16c0: 6e 74 72 79 20 73 74 61 63 6b 5b 59 59 53 54 41  ntry stack[YYSTA
16d0: 43 4b 44 45 50 54 48 5d 3b 20 20 2f 2a 20 54 68  CKDEPTH];  /* Th
16e0: 65 20 70 61 72 73 65 72 27 73 20 73 74 61 63 6b  e parser's stack
16f0: 20 2a 2f 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73   */.};.typedef s
1700: 74 72 75 63 74 20 79 79 50 61 72 73 65 72 20 79  truct yyParser y
1710: 79 50 61 72 73 65 72 3b 0a 0a 23 69 66 6e 64 65  yParser;..#ifnde
1720: 66 20 4e 44 45 42 55 47 0a 23 69 6e 63 6c 75 64  f NDEBUG.#includ
1730: 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 73 74 61 74  e <stdio.h>.stat
1740: 69 63 20 46 49 4c 45 20 2a 79 79 54 72 61 63 65  ic FILE *yyTrace
1750: 46 49 4c 45 20 3d 20 30 3b 0a 73 74 61 74 69 63  FILE = 0;.static
1760: 20 63 68 61 72 20 2a 79 79 54 72 61 63 65 50 72   char *yyTracePr
1770: 6f 6d 70 74 20 3d 20 30 3b 0a 0a 2f 2a 20 0a 2a  ompt = 0;../* .*
1780: 2a 20 54 75 72 6e 20 70 61 72 73 65 72 20 74 72  * Turn parser tr
1790: 61 63 69 6e 67 20 6f 6e 20 62 79 20 67 69 76 69  acing on by givi
17a0: 6e 67 20 61 20 73 74 72 65 61 6d 20 74 6f 20 77  ng a stream to w
17b0: 68 69 63 68 20 74 6f 20 77 72 69 74 65 20 74 68  hich to write th
17c0: 65 20 74 72 61 63 65 0a 2a 2a 20 61 6e 64 20 61  e trace.** and a
17d0: 20 70 72 6f 6d 70 74 20 74 6f 20 70 72 65 66 61   prompt to prefa
17e0: 63 65 20 65 61 63 68 20 74 72 61 63 65 20 6d 65  ce each trace me
17f0: 73 73 61 67 65 2e 20 20 54 72 61 63 69 6e 67 20  ssage.  Tracing 
1800: 69 73 20 74 75 72 6e 65 64 20 6f 66 66 0a 2a 2a  is turned off.**
1810: 20 62 79 20 6d 61 6b 69 6e 67 20 65 69 74 68 65   by making eithe
1820: 72 20 61 72 67 75 6d 65 6e 74 20 4e 55 4c 4c 20  r argument NULL 
1830: 0a 2a 2a 0a 2a 2a 20 49 6e 70 75 74 73 3a 0a 2a  .**.** Inputs:.*
1840: 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 41  * <ul>.** <li> A
1850: 20 46 49 4c 45 2a 20 74 6f 20 77 68 69 63 68 20   FILE* to which 
1860: 74 72 61 63 65 20 6f 75 74 70 75 74 20 73 68 6f  trace output sho
1870: 75 6c 64 20 62 65 20 77 72 69 74 74 65 6e 2e 0a  uld be written..
1880: 2a 2a 20 20 20 20 20 20 49 66 20 4e 55 4c 4c 2c  **      If NULL,
1890: 20 74 68 65 6e 20 74 72 61 63 69 6e 67 20 69 73   then tracing is
18a0: 20 74 75 72 6e 65 64 20 6f 66 66 2e 0a 2a 2a 20   turned off..** 
18b0: 3c 6c 69 3e 20 41 20 70 72 65 66 69 78 20 73 74  <li> A prefix st
18c0: 72 69 6e 67 20 77 72 69 74 74 65 6e 20 61 74 20  ring written at 
18d0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
18e0: 20 65 76 65 72 79 0a 2a 2a 20 20 20 20 20 20 6c   every.**      l
18f0: 69 6e 65 20 6f 66 20 74 72 61 63 65 20 6f 75 74  ine of trace out
1900: 70 75 74 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 74  put.  If NULL, t
1910: 68 65 6e 20 74 72 61 63 69 6e 67 20 69 73 0a 2a  hen tracing is.*
1920: 2a 20 20 20 20 20 20 74 75 72 6e 65 64 20 6f 66  *      turned of
1930: 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a  f..** </ul>.**.*
1940: 2a 20 4f 75 74 70 75 74 73 3a 0a 2a 2a 20 4e 6f  * Outputs:.** No
1950: 6e 65 2e 0a 2a 2f 0a 76 6f 69 64 20 50 61 72 73  ne..*/.void Pars
1960: 65 54 72 61 63 65 28 46 49 4c 45 20 2a 54 72 61  eTrace(FILE *Tra
1970: 63 65 46 49 4c 45 2c 20 63 68 61 72 20 2a 7a 54  ceFILE, char *zT
1980: 72 61 63 65 50 72 6f 6d 70 74 29 7b 0a 20 20 79  racePrompt){.  y
1990: 79 54 72 61 63 65 46 49 4c 45 20 3d 20 54 72 61  yTraceFILE = Tra
19a0: 63 65 46 49 4c 45 3b 0a 20 20 79 79 54 72 61 63  ceFILE;.  yyTrac
19b0: 65 50 72 6f 6d 70 74 20 3d 20 7a 54 72 61 63 65  ePrompt = zTrace
19c0: 50 72 6f 6d 70 74 3b 0a 20 20 69 66 28 20 79 79  Prompt;.  if( yy
19d0: 54 72 61 63 65 46 49 4c 45 3d 3d 30 20 29 20 79  TraceFILE==0 ) y
19e0: 79 54 72 61 63 65 50 72 6f 6d 70 74 20 3d 20 30  yTracePrompt = 0
19f0: 3b 0a 20 20 65 6c 73 65 20 69 66 28 20 79 79 54  ;.  else if( yyT
1a00: 72 61 63 65 50 72 6f 6d 70 74 3d 3d 30 20 29 20  racePrompt==0 ) 
1a10: 79 79 54 72 61 63 65 46 49 4c 45 20 3d 20 30 3b  yyTraceFILE = 0;
1a20: 0a 7d 0a 0a 2f 2a 20 46 6f 72 20 74 72 61 63 69  .}../* For traci
1a30: 6e 67 20 73 68 69 66 74 73 2c 20 74 68 65 20 6e  ng shifts, the n
1a40: 61 6d 65 73 20 6f 66 20 61 6c 6c 20 74 65 72 6d  ames of all term
1a50: 69 6e 61 6c 73 20 61 6e 64 20 6e 6f 6e 74 65 72  inals and nonter
1a60: 6d 69 6e 61 6c 73 0a 2a 2a 20 61 72 65 20 72 65  minals.** are re
1a70: 71 75 69 72 65 64 2e 20 20 54 68 65 20 66 6f 6c  quired.  The fol
1a80: 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 75 70  lowing table sup
1a90: 70 6c 69 65 73 20 74 68 65 73 65 20 6e 61 6d 65  plies these name
1aa0: 73 20 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  s */.static char
1ab0: 20 2a 79 79 54 6f 6b 65 6e 4e 61 6d 65 5b 5d 20   *yyTokenName[] 
1ac0: 3d 20 7b 20 0a 25 25 0a 7d 3b 0a 23 64 65 66 69  = { .%%.};.#defi
1ad0: 6e 65 20 59 59 54 52 41 43 45 28 58 29 20 69 66  ne YYTRACE(X) if
1ae0: 28 20 79 79 54 72 61 63 65 46 49 4c 45 20 29 20  ( yyTraceFILE ) 
1af0: 66 70 72 69 6e 74 66 28 79 79 54 72 61 63 65 46  fprintf(yyTraceF
1b00: 49 4c 45 2c 22 25 73 52 65 64 75 63 65 20 5b 25  ILE,"%sReduce [%
1b10: 73 5d 2e 5c 6e 22 2c 79 79 54 72 61 63 65 50 72  s].\n",yyTracePr
1b20: 6f 6d 70 74 2c 58 29 3b 0a 23 65 6c 73 65 0a 23  ompt,X);.#else.#
1b30: 64 65 66 69 6e 65 20 59 59 54 52 41 43 45 28 58  define YYTRACE(X
1b40: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
1b50: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72   This function r
1b60: 65 74 75 72 6e 73 20 74 68 65 20 73 79 6d 62 6f  eturns the symbo
1b70: 6c 69 63 20 6e 61 6d 65 20 61 73 73 6f 63 69 61  lic name associa
1b80: 74 65 64 20 77 69 74 68 20 61 20 74 6f 6b 65 6e  ted with a token
1b90: 0a 2a 2a 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 6f  .** value..*/.co
1ba0: 6e 73 74 20 63 68 61 72 20 2a 50 61 72 73 65 54  nst char *ParseT
1bb0: 6f 6b 65 6e 4e 61 6d 65 28 69 6e 74 20 74 6f 6b  okenName(int tok
1bc0: 65 6e 54 79 70 65 29 7b 0a 23 69 66 6e 64 65 66  enType){.#ifndef
1bd0: 20 4e 44 45 42 55 47 0a 20 20 69 66 28 20 74 6f   NDEBUG.  if( to
1be0: 6b 65 6e 54 79 70 65 3e 30 20 26 26 20 74 6f 6b  kenType>0 && tok
1bf0: 65 6e 54 79 70 65 3c 28 73 69 7a 65 6f 66 28 79  enType<(sizeof(y
1c00: 79 54 6f 6b 65 6e 4e 61 6d 65 29 2f 73 69 7a 65  yTokenName)/size
1c10: 6f 66 28 79 79 54 6f 6b 65 6e 4e 61 6d 65 5b 30  of(yyTokenName[0
1c20: 5d 29 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ])) ){.    retur
1c30: 6e 20 79 79 54 6f 6b 65 6e 4e 61 6d 65 5b 74 6f  n yyTokenName[to
1c40: 6b 65 6e 54 79 70 65 5d 3b 0a 20 20 7d 65 6c 73  kenType];.  }els
1c50: 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 22 55  e{.    return "U
1c60: 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 7d 0a 23 65 6c  nknown";.  }.#el
1c70: 73 65 0a 20 20 72 65 74 75 72 6e 20 22 22 3b 0a  se.  return "";.
1c80: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 20 0a 2a 2a  #endif.}../* .**
1c90: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61   This function a
1ca0: 6c 6c 6f 63 61 74 65 73 20 61 20 6e 65 77 20 70  llocates a new p
1cb0: 61 72 73 65 72 2e 0a 2a 2a 20 54 68 65 20 6f 6e  arser..** The on
1cc0: 6c 79 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  ly argument is a
1cd0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75   pointer to a fu
1ce0: 6e 63 74 69 6f 6e 20 77 68 69 63 68 20 77 6f 72  nction which wor
1cf0: 6b 73 20 6c 69 6b 65 0a 2a 2a 20 6d 61 6c 6c 6f  ks like.** mallo
1d00: 63 2e 0a 2a 2a 0a 2a 2a 20 49 6e 70 75 74 73 3a  c..**.** Inputs:
1d10: 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1d20: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
1d30: 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6d  ed to allocate m
1d40: 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 4f 75 74  emory..**.** Out
1d50: 70 75 74 73 3a 0a 2a 2a 20 41 20 70 6f 69 6e 74  puts:.** A point
1d60: 65 72 20 74 6f 20 61 20 70 61 72 73 65 72 2e 20  er to a parser. 
1d70: 20 54 68 69 73 20 70 6f 69 6e 74 65 72 20 69 73   This pointer is
1d80: 20 75 73 65 64 20 69 6e 20 73 75 62 73 65 71 75   used in subsequ
1d90: 65 6e 74 20 63 61 6c 6c 73 0a 2a 2a 20 74 6f 20  ent calls.** to 
1da0: 50 61 72 73 65 20 61 6e 64 20 50 61 72 73 65 46  Parse and ParseF
1db0: 72 65 65 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 50 61  ree..*/.void *Pa
1dc0: 72 73 65 41 6c 6c 6f 63 28 76 6f 69 64 20 2a 28  rseAlloc(void *(
1dd0: 2a 6d 61 6c 6c 6f 63 50 72 6f 63 29 28 73 69 7a  *mallocProc)(siz
1de0: 65 5f 74 29 29 7b 0a 20 20 79 79 50 61 72 73 65  e_t)){.  yyParse
1df0: 72 20 2a 70 50 61 72 73 65 72 3b 0a 20 20 70 50  r *pParser;.  pP
1e00: 61 72 73 65 72 20 3d 20 28 79 79 50 61 72 73 65  arser = (yyParse
1e10: 72 2a 29 28 2a 6d 61 6c 6c 6f 63 50 72 6f 63 29  r*)(*mallocProc)
1e20: 28 20 28 73 69 7a 65 5f 74 29 73 69 7a 65 6f 66  ( (size_t)sizeof
1e30: 28 79 79 50 61 72 73 65 72 29 20 29 3b 0a 20 20  (yyParser) );.  
1e40: 69 66 28 20 70 50 61 72 73 65 72 20 29 7b 0a 20  if( pParser ){. 
1e50: 20 20 20 70 50 61 72 73 65 72 2d 3e 69 64 78 20     pParser->idx 
1e60: 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  = -1;.  }.  retu
1e70: 72 6e 20 70 50 61 72 73 65 72 3b 0a 7d 0a 0a 2f  rn pParser;.}../
1e80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1e90: 66 75 6e 63 74 69 6f 6e 20 64 65 6c 65 74 65 73  function deletes
1ea0: 20 74 68 65 20 76 61 6c 75 65 20 61 73 73 6f 63   the value assoc
1eb0: 69 61 74 65 64 20 77 69 74 68 20 61 0a 2a 2a 20  iated with a.** 
1ec0: 73 79 6d 62 6f 6c 2e 20 20 54 68 65 20 73 79 6d  symbol.  The sym
1ed0: 62 6f 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65  bol can be eithe
1ee0: 72 20 61 20 74 65 72 6d 69 6e 61 6c 20 6f 72 20  r a terminal or 
1ef0: 6e 6f 6e 74 65 72 6d 69 6e 61 6c 2e 0a 2a 2a 20  nonterminal..** 
1f00: 22 79 79 6d 61 6a 6f 72 22 20 69 73 20 74 68 65  "yymajor" is the
1f10: 20 73 79 6d 62 6f 6c 20 63 6f 64 65 2c 20 61 6e   symbol code, an
1f20: 64 20 22 79 79 70 6d 69 6e 6f 72 22 20 69 73 20  d "yypminor" is 
1f30: 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1f40: 74 68 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  the value..*/.st
1f50: 61 74 69 63 20 76 6f 69 64 20 79 79 5f 64 65 73  atic void yy_des
1f60: 74 72 75 63 74 6f 72 28 59 59 43 4f 44 45 54 59  tructor(YYCODETY
1f70: 50 45 20 79 79 6d 61 6a 6f 72 2c 20 59 59 4d 49  PE yymajor, YYMI
1f80: 4e 4f 52 54 59 50 45 20 2a 79 79 70 6d 69 6e 6f  NORTYPE *yypmino
1f90: 72 29 7b 0a 20 20 73 77 69 74 63 68 28 20 79 79  r){.  switch( yy
1fa0: 6d 61 6a 6f 72 20 29 7b 0a 20 20 20 20 2f 2a 20  major ){.    /* 
1fb0: 48 65 72 65 20 69 73 20 69 6e 73 65 72 74 65 64  Here is inserted
1fc0: 20 74 68 65 20 61 63 74 69 6f 6e 73 20 77 68 69   the actions whi
1fd0: 63 68 20 74 61 6b 65 20 70 6c 61 63 65 20 77 68  ch take place wh
1fe0: 65 6e 20 61 0a 20 20 20 20 2a 2a 20 74 65 72 6d  en a.    ** term
1ff0: 69 6e 61 6c 20 6f 72 20 6e 6f 6e 2d 74 65 72 6d  inal or non-term
2000: 69 6e 61 6c 20 69 73 20 64 65 73 74 72 6f 79 65  inal is destroye
2010: 64 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61 70  d.  This can hap
2020: 70 65 6e 0a 20 20 20 20 2a 2a 20 77 68 65 6e 20  pen.    ** when 
2030: 74 68 65 20 73 79 6d 62 6f 6c 20 69 73 20 70 6f  the symbol is po
2040: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 73 74  pped from the st
2050: 61 63 6b 20 64 75 72 69 6e 67 20 61 0a 20 20 20  ack during a.   
2060: 20 2a 2a 20 72 65 64 75 63 65 20 6f 72 20 64 75   ** reduce or du
2070: 72 69 6e 67 20 65 72 72 6f 72 20 70 72 6f 63 65  ring error proce
2080: 73 73 69 6e 67 20 6f 72 20 77 68 65 6e 20 61 20  ssing or when a 
2090: 70 61 72 73 65 72 20 69 73 20 0a 20 20 20 20 2a  parser is .    *
20a0: 2a 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  * being destroye
20b0: 64 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 66  d before it is f
20c0: 69 6e 69 73 68 65 64 20 70 61 72 73 69 6e 67 2e  inished parsing.
20d0: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e  .    **.    ** N
20e0: 6f 74 65 3a 20 64 75 72 69 6e 67 20 61 20 72 65  ote: during a re
20f0: 64 75 63 65 2c 20 74 68 65 20 6f 6e 6c 79 20 73  duce, the only s
2100: 79 6d 62 6f 6c 73 20 64 65 73 74 72 6f 79 65 64  ymbols destroyed
2110: 20 61 72 65 20 74 68 6f 73 65 0a 20 20 20 20 2a   are those.    *
2120: 2a 20 77 68 69 63 68 20 61 70 70 65 61 72 20 6f  * which appear o
2130: 6e 20 74 68 65 20 52 48 53 20 6f 66 20 74 68 65  n the RHS of the
2140: 20 72 75 6c 65 2c 20 62 75 74 20 77 68 69 63 68   rule, but which
2150: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 0a 20 20   are not used.  
2160: 20 20 2a 2a 20 69 6e 73 69 64 65 20 74 68 65 20    ** inside the 
2170: 43 20 63 6f 64 65 2e 0a 20 20 20 20 2a 2f 0a 25  C code..    */.%
2180: 25 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  %.    default:  
2190: 62 72 65 61 6b 3b 20 20 20 2f 2a 20 49 66 20 6e  break;   /* If n
21a0: 6f 20 64 65 73 74 72 75 63 74 6f 72 20 61 63 74  o destructor act
21b0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 3a 20 64  ion specified: d
21c0: 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 20 20 7d  o nothing */.  }
21d0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f 70 20 74 68  .}../*.** Pop th
21e0: 65 20 70 61 72 73 65 72 27 73 20 73 74 61 63 6b  e parser's stack
21f0: 20 6f 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   once..**.** If 
2200: 74 68 65 72 65 20 69 73 20 61 20 64 65 73 74 72  there is a destr
2210: 75 63 74 6f 72 20 72 6f 75 74 69 6e 65 20 61 73  uctor routine as
2220: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
2230: 65 20 74 6f 6b 65 6e 20 77 68 69 63 68 0a 2a 2a  e token which.**
2240: 20 69 73 20 70 6f 70 70 65 64 20 66 72 6f 6d 20   is popped from 
2250: 74 68 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  the stack, then 
2260: 63 61 6c 6c 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 52  call it..**.** R
2270: 65 74 75 72 6e 20 74 68 65 20 6d 61 6a 6f 72 20  eturn the major 
2280: 74 6f 6b 65 6e 20 6e 75 6d 62 65 72 20 66 6f 72  token number for
2290: 20 74 68 65 20 73 79 6d 62 6f 6c 20 70 6f 70 70   the symbol popp
22a0: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
22b0: 74 20 79 79 5f 70 6f 70 5f 70 61 72 73 65 72 5f  t yy_pop_parser_
22c0: 73 74 61 63 6b 28 79 79 50 61 72 73 65 72 20 2a  stack(yyParser *
22d0: 70 50 61 72 73 65 72 29 7b 0a 20 20 59 59 43 4f  pParser){.  YYCO
22e0: 44 45 54 59 50 45 20 79 79 6d 61 6a 6f 72 3b 0a  DETYPE yymajor;.
22f0: 0a 20 20 69 66 28 20 70 50 61 72 73 65 72 2d 3e  .  if( pParser->
2300: 69 64 78 3c 30 20 29 20 72 65 74 75 72 6e 20 30  idx<0 ) return 0
2310: 3b 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ;.#ifndef NDEBUG
2320: 0a 20 20 69 66 28 20 79 79 54 72 61 63 65 46 49  .  if( yyTraceFI
2330: 4c 45 20 26 26 20 70 50 61 72 73 65 72 2d 3e 69  LE && pParser->i
2340: 64 78 3e 3d 30 20 29 7b 0a 20 20 20 20 66 70 72  dx>=0 ){.    fpr
2350: 69 6e 74 66 28 79 79 54 72 61 63 65 46 49 4c 45  intf(yyTraceFILE
2360: 2c 22 25 73 50 6f 70 70 69 6e 67 20 25 73 5c 6e  ,"%sPopping %s\n
2370: 22 2c 0a 20 20 20 20 20 20 79 79 54 72 61 63 65  ",.      yyTrace
2380: 50 72 6f 6d 70 74 2c 0a 20 20 20 20 20 20 79 79  Prompt,.      yy
2390: 54 6f 6b 65 6e 4e 61 6d 65 5b 70 50 61 72 73 65  TokenName[pParse
23a0: 72 2d 3e 74 6f 70 2d 3e 6d 61 6a 6f 72 5d 29 3b  r->top->major]);
23b0: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 79 79  .  }.#endif.  yy
23c0: 6d 61 6a 6f 72 20 3d 20 70 50 61 72 73 65 72 2d  major = pParser-
23d0: 3e 74 6f 70 2d 3e 6d 61 6a 6f 72 3b 0a 20 20 79  >top->major;.  y
23e0: 79 5f 64 65 73 74 72 75 63 74 6f 72 28 20 79 79  y_destructor( yy
23f0: 6d 61 6a 6f 72 2c 20 26 70 50 61 72 73 65 72 2d  major, &pParser-
2400: 3e 74 6f 70 2d 3e 6d 69 6e 6f 72 29 3b 0a 20 20  >top->minor);.  
2410: 70 50 61 72 73 65 72 2d 3e 69 64 78 2d 2d 3b 0a  pParser->idx--;.
2420: 20 20 70 50 61 72 73 65 72 2d 3e 74 6f 70 2d 2d    pParser->top--
2430: 3b 0a 20 20 72 65 74 75 72 6e 20 79 79 6d 61 6a  ;.  return yymaj
2440: 6f 72 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 44 65  or;.}../* .** De
2450: 61 6c 6c 6f 63 61 74 65 20 61 6e 64 20 64 65 73  allocate and des
2460: 74 72 6f 79 20 61 20 70 61 72 73 65 72 2e 20 20  troy a parser.  
2470: 44 65 73 74 72 75 63 74 6f 72 73 20 61 72 65 20  Destructors are 
2480: 61 6c 6c 20 63 61 6c 6c 65 64 20 66 6f 72 0a 2a  all called for.*
2490: 2a 20 61 6c 6c 20 73 74 61 63 6b 20 65 6c 65 6d  * all stack elem
24a0: 65 6e 74 73 20 62 65 66 6f 72 65 20 73 68 75 74  ents before shut
24b0: 74 69 6e 67 20 74 68 65 20 70 61 72 73 65 72 20  ting the parser 
24c0: 64 6f 77 6e 2e 0a 2a 2a 0a 2a 2a 20 49 6e 70 75  down..**.** Inpu
24d0: 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
24e0: 6c 69 3e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  li>  A pointer t
24f0: 6f 20 74 68 65 20 70 61 72 73 65 72 2e 20 20 54  o the parser.  T
2500: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61 20  his should be a 
2510: 70 6f 69 6e 74 65 72 0a 2a 2a 20 20 20 20 20 20  pointer.**      
2520: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 50   obtained from P
2530: 61 72 73 65 41 6c 6c 6f 63 2e 0a 2a 2a 20 3c 6c  arseAlloc..** <l
2540: 69 3e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  i>  A pointer to
2550: 20 61 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64   a function used
2560: 20 74 6f 20 72 65 63 6c 61 69 6d 20 6d 65 6d 6f   to reclaim memo
2570: 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 20  ry obtained.**  
2580: 20 20 20 20 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63       from malloc
2590: 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 76 6f  ..** </ul>.*/.vo
25a0: 69 64 20 50 61 72 73 65 46 72 65 65 28 0a 20 20  id ParseFree(.  
25b0: 76 6f 69 64 20 2a 70 2c 20 20 20 20 20 20 20 20  void *p,        
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25d0: 68 65 20 70 61 72 73 65 72 20 74 6f 20 62 65 20  he parser to be 
25e0: 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 76 6f 69  deleted */.  voi
25f0: 64 20 28 2a 66 72 65 65 50 72 6f 63 29 28 76 6f  d (*freeProc)(vo
2600: 69 64 2a 29 20 20 20 20 20 2f 2a 20 46 75 6e 63  id*)     /* Func
2610: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72 65 63  tion used to rec
2620: 6c 61 69 6d 20 6d 65 6d 6f 72 79 20 2a 2f 0a 29  laim memory */.)
2630: 7b 0a 20 20 79 79 50 61 72 73 65 72 20 2a 70 50  {.  yyParser *pP
2640: 61 72 73 65 72 20 3d 20 28 79 79 50 61 72 73 65  arser = (yyParse
2650: 72 2a 29 70 3b 0a 20 20 69 66 28 20 70 50 61 72  r*)p;.  if( pPar
2660: 73 65 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  ser==0 ) return;
2670: 0a 20 20 77 68 69 6c 65 28 20 70 50 61 72 73 65  .  while( pParse
2680: 72 2d 3e 69 64 78 3e 3d 30 20 29 20 79 79 5f 70  r->idx>=0 ) yy_p
2690: 6f 70 5f 70 61 72 73 65 72 5f 73 74 61 63 6b 28  op_parser_stack(
26a0: 70 50 61 72 73 65 72 29 3b 0a 20 20 28 2a 66 72  pParser);.  (*fr
26b0: 65 65 50 72 6f 63 29 28 28 76 6f 69 64 2a 29 70  eeProc)((void*)p
26c0: 50 61 72 73 65 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  Parser);.}../*.*
26d0: 2a 20 46 69 6e 64 20 74 68 65 20 61 70 70 72 6f  * Find the appro
26e0: 70 72 69 61 74 65 20 61 63 74 69 6f 6e 20 66 6f  priate action fo
26f0: 72 20 61 20 70 61 72 73 65 72 20 67 69 76 65 6e  r a parser given
2700: 20 74 68 65 20 6c 6f 6f 6b 2d 61 68 65 61 64 20   the look-ahead 
2710: 74 6f 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  token..**.** If 
2720: 74 68 65 20 6c 6f 6f 6b 2d 61 68 65 61 64 20 74  the look-ahead t
2730: 6f 6b 65 6e 20 69 73 20 59 59 4e 4f 43 4f 44 45  oken is YYNOCODE
2740: 2c 20 74 68 65 6e 20 63 68 65 63 6b 20 74 6f 20  , then check to 
2750: 73 65 65 20 69 66 20 74 68 65 20 61 63 74 69 6f  see if the actio
2760: 6e 20 69 73 0a 2a 2a 20 69 6e 64 65 70 65 6e 64  n is.** independ
2770: 65 6e 74 20 6f 66 20 74 68 65 20 6c 6f 6f 6b 2d  ent of the look-
2780: 61 68 65 61 64 2e 20 20 49 66 20 69 74 20 69 73  ahead.  If it is
2790: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 61 63 74  , return the act
27a0: 69 6f 6e 2c 20 6f 74 68 65 72 77 69 73 65 0a 2a  ion, otherwise.*
27b0: 2a 20 72 65 74 75 72 6e 20 59 59 5f 4e 4f 5f 41  * return YY_NO_A
27c0: 43 54 49 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  CTION..*/.static
27d0: 20 69 6e 74 20 79 79 5f 66 69 6e 64 5f 70 61 72   int yy_find_par
27e0: 73 65 72 5f 61 63 74 69 6f 6e 28 0a 20 20 79 79  ser_action(.  yy
27f0: 50 61 72 73 65 72 20 2a 70 50 61 72 73 65 72 2c  Parser *pParser,
2800: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
2810: 61 72 73 65 72 20 2a 2f 0a 20 20 69 6e 74 20 69  arser */.  int i
2820: 4c 6f 6f 6b 41 68 65 61 64 20 20 20 20 20 20 20  LookAhead       
2830: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 6f 6f        /* The loo
2840: 6b 2d 61 68 65 61 64 20 74 6f 6b 65 6e 20 2a 2f  k-ahead token */
2850: 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 79 79 53  .){.  struct yyS
2860: 74 61 74 65 45 6e 74 72 79 20 2a 70 53 74 61 74  tateEntry *pStat
2870: 65 3b 20 20 20 2f 2a 20 41 70 70 72 6f 70 72 69  e;   /* Appropri
2880: 61 74 65 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ate entry in the
2890: 20 73 74 61 74 65 20 74 61 62 6c 65 20 2a 2f 0a   state table */.
28a0: 20 20 73 74 72 75 63 74 20 79 79 41 63 74 69 6f    struct yyActio
28b0: 6e 45 6e 74 72 79 20 2a 70 41 63 74 69 6f 6e 3b  nEntry *pAction;
28c0: 20 2f 2a 20 41 63 74 69 6f 6e 20 61 70 70 72 6f   /* Action appro
28d0: 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 6c  priate for the l
28e0: 6f 6f 6b 2d 61 68 65 61 64 20 2a 2f 0a 20 0a 20  ook-ahead */. . 
28f0: 20 2f 2a 20 69 66 28 20 70 50 61 72 73 65 72 2d   /* if( pParser-
2900: 3e 69 64 78 3c 30 20 29 20 72 65 74 75 72 6e 20  >idx<0 ) return 
2910: 59 59 5f 4e 4f 5f 41 43 54 49 4f 4e 3b 20 20 2a  YY_NO_ACTION;  *
2920: 2f 0a 20 20 70 53 74 61 74 65 20 3d 20 26 79 79  /.  pState = &yy
2930: 53 74 61 74 65 54 61 62 6c 65 5b 70 50 61 72 73  StateTable[pPars
2940: 65 72 2d 3e 74 6f 70 2d 3e 73 74 61 74 65 6e 6f  er->top->stateno
2950: 5d 3b 0a 20 20 69 66 28 20 70 53 74 61 74 65 2d  ];.  if( pState-
2960: 3e 6e 45 6e 74 72 79 3d 3d 30 20 29 7b 0a 20 20  >nEntry==0 ){.  
2970: 20 20 72 65 74 75 72 6e 20 70 53 74 61 74 65 2d    return pState-
2980: 3e 61 63 74 69 6f 6e 44 65 66 61 75 6c 74 3b 0a  >actionDefault;.
2990: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 4c 6f 6f    }else if( iLoo
29a0: 6b 41 68 65 61 64 21 3d 59 59 4e 4f 43 4f 44 45  kAhead!=YYNOCODE
29b0: 20 29 7b 0a 20 20 20 20 70 41 63 74 69 6f 6e 20   ){.    pAction 
29c0: 3d 20 26 70 53 74 61 74 65 2d 3e 68 61 73 68 74  = &pState->hasht
29d0: 62 6c 5b 69 4c 6f 6f 6b 41 68 65 61 64 20 25 20  bl[iLookAhead % 
29e0: 70 53 74 61 74 65 2d 3e 6e 45 6e 74 72 79 5d 3b  pState->nEntry];
29f0: 0a 20 20 20 20 77 68 69 6c 65 28 20 31 20 29 7b  .    while( 1 ){
2a00: 0a 20 20 20 20 20 20 69 66 28 20 70 41 63 74 69  .      if( pActi
2a10: 6f 6e 2d 3e 6c 6f 6f 6b 61 68 65 61 64 3d 3d 69  on->lookahead==i
2a20: 4c 6f 6f 6b 41 68 65 61 64 20 29 20 72 65 74 75  LookAhead ) retu
2a30: 72 6e 20 70 41 63 74 69 6f 6e 2d 3e 61 63 74 69  rn pAction->acti
2a40: 6f 6e 3b 0a 20 20 20 20 20 20 69 66 28 20 70 41  on;.      if( pA
2a50: 63 74 69 6f 6e 2d 3e 6e 65 78 74 3d 3d 30 20 29  ction->next==0 )
2a60: 20 72 65 74 75 72 6e 20 70 53 74 61 74 65 2d 3e   return pState->
2a70: 61 63 74 69 6f 6e 44 65 66 61 75 6c 74 3b 0a 20  actionDefault;. 
2a80: 20 20 20 20 20 70 41 63 74 69 6f 6e 20 3d 20 26       pAction = &
2a90: 70 53 74 61 74 65 2d 3e 68 61 73 68 74 62 6c 5b  pState->hashtbl[
2aa0: 70 41 63 74 69 6f 6e 2d 3e 6e 65 78 74 2d 31 5d  pAction->next-1]
2ab0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
2ac0: 69 66 28 20 70 53 74 61 74 65 2d 3e 68 61 73 68  if( pState->hash
2ad0: 74 62 6c 2d 3e 6c 6f 6f 6b 61 68 65 61 64 21 3d  tbl->lookahead!=
2ae0: 59 59 4e 4f 43 4f 44 45 20 29 7b 0a 20 20 20 20  YYNOCODE ){.    
2af0: 72 65 74 75 72 6e 20 59 59 5f 4e 4f 5f 41 43 54  return YY_NO_ACT
2b00: 49 4f 4e 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ION;.  }.  retur
2b10: 6e 20 70 53 74 61 74 65 2d 3e 61 63 74 69 6f 6e  n pState->action
2b20: 44 65 66 61 75 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  Default;.}../*.*
2b30: 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 68 69 66  * Perform a shif
2b40: 74 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  t action..*/.sta
2b50: 74 69 63 20 76 6f 69 64 20 79 79 5f 73 68 69 66  tic void yy_shif
2b60: 74 28 0a 20 20 79 79 50 61 72 73 65 72 20 2a 79  t(.  yyParser *y
2b70: 79 70 50 61 72 73 65 72 2c 20 20 20 20 20 20 20  ypParser,       
2b80: 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
2b90: 20 74 6f 20 62 65 20 73 68 69 66 74 65 64 20 2a   to be shifted *
2ba0: 2f 0a 20 20 69 6e 74 20 79 79 4e 65 77 53 74 61  /.  int yyNewSta
2bb0: 74 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  te,             
2bc0: 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 73 74 61    /* The new sta
2bd0: 74 65 20 74 6f 20 73 68 69 66 74 20 69 6e 20 2a  te to shift in *
2be0: 2f 0a 20 20 69 6e 74 20 79 79 4d 61 6a 6f 72 2c  /.  int yyMajor,
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c00: 20 20 2f 2a 20 54 68 65 20 6d 61 6a 6f 72 20 74    /* The major t
2c10: 6f 6b 65 6e 20 74 6f 20 73 68 69 66 74 20 69 6e  oken to shift in
2c20: 20 2a 2f 0a 20 20 59 59 4d 49 4e 4f 52 54 59 50   */.  YYMINORTYP
2c30: 45 20 2a 79 79 70 4d 69 6e 6f 72 20 20 20 20 20  E *yypMinor     
2c40: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 6f      /* Pointer o
2c50: 74 20 74 68 65 20 6d 69 6e 6f 72 20 74 6f 6b 65  t the minor toke
2c60: 6e 20 74 6f 20 73 68 69 66 74 20 69 6e 20 2a 2f  n to shift in */
2c70: 0a 29 7b 0a 20 20 79 79 70 50 61 72 73 65 72 2d  .){.  yypParser-
2c80: 3e 69 64 78 2b 2b 3b 0a 20 20 79 79 70 50 61 72  >idx++;.  yypPar
2c90: 73 65 72 2d 3e 74 6f 70 2b 2b 3b 0a 20 20 69 66  ser->top++;.  if
2ca0: 28 20 79 79 70 50 61 72 73 65 72 2d 3e 69 64 78  ( yypParser->idx
2cb0: 3e 3d 59 59 53 54 41 43 4b 44 45 50 54 48 20 29  >=YYSTACKDEPTH )
2cc0: 7b 0a 20 20 20 20 20 79 79 70 50 61 72 73 65 72  {.     yypParser
2cd0: 2d 3e 69 64 78 2d 2d 3b 0a 20 20 20 20 20 79 79  ->idx--;.     yy
2ce0: 70 50 61 72 73 65 72 2d 3e 74 6f 70 2d 2d 3b 0a  pParser->top--;.
2cf0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
2d00: 20 20 20 20 69 66 28 20 79 79 54 72 61 63 65 46      if( yyTraceF
2d10: 49 4c 45 20 29 7b 0a 20 20 20 20 20 20 20 66 70  ILE ){.       fp
2d20: 72 69 6e 74 66 28 79 79 54 72 61 63 65 46 49 4c  rintf(yyTraceFIL
2d30: 45 2c 22 25 73 53 74 61 63 6b 20 4f 76 65 72 66  E,"%sStack Overf
2d40: 6c 6f 77 21 5c 6e 22 2c 79 79 54 72 61 63 65 50  low!\n",yyTraceP
2d50: 72 6f 6d 70 74 29 3b 0a 20 20 20 20 20 7d 0a 23  rompt);.     }.#
2d60: 65 6e 64 69 66 0a 20 20 20 20 20 77 68 69 6c 65  endif.     while
2d70: 28 20 79 79 70 50 61 72 73 65 72 2d 3e 69 64 78  ( yypParser->idx
2d80: 3e 3d 30 20 29 20 79 79 5f 70 6f 70 5f 70 61 72  >=0 ) yy_pop_par
2d90: 73 65 72 5f 73 74 61 63 6b 28 79 79 70 50 61 72  ser_stack(yypPar
2da0: 73 65 72 29 3b 0a 20 20 20 20 20 2f 2a 20 48 65  ser);.     /* He
2db0: 72 65 20 63 6f 64 65 20 69 73 20 69 6e 73 65 72  re code is inser
2dc0: 74 65 64 20 77 68 69 63 68 20 77 69 6c 6c 20 65  ted which will e
2dd0: 78 65 63 75 74 65 20 69 66 20 74 68 65 20 70 61  xecute if the pa
2de0: 72 73 65 72 0a 20 20 20 20 20 2a 2a 20 73 74 61  rser.     ** sta
2df0: 63 6b 20 65 76 65 72 79 20 6f 76 65 72 66 6c 6f  ck every overflo
2e00: 77 73 20 2a 2f 0a 25 25 0a 20 20 20 20 20 72 65  ws */.%%.     re
2e10: 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 79 79 70 50  turn;.  }.  yypP
2e20: 61 72 73 65 72 2d 3e 74 6f 70 2d 3e 73 74 61 74  arser->top->stat
2e30: 65 6e 6f 20 3d 20 79 79 4e 65 77 53 74 61 74 65  eno = yyNewState
2e40: 3b 0a 20 20 79 79 70 50 61 72 73 65 72 2d 3e 74  ;.  yypParser->t
2e50: 6f 70 2d 3e 6d 61 6a 6f 72 20 3d 20 79 79 4d 61  op->major = yyMa
2e60: 6a 6f 72 3b 0a 20 20 79 79 70 50 61 72 73 65 72  jor;.  yypParser
2e70: 2d 3e 74 6f 70 2d 3e 6d 69 6e 6f 72 20 3d 20 2a  ->top->minor = *
2e80: 79 79 70 4d 69 6e 6f 72 3b 0a 23 69 66 6e 64 65  yypMinor;.#ifnde
2e90: 66 20 4e 44 45 42 55 47 0a 20 20 69 66 28 20 79  f NDEBUG.  if( y
2ea0: 79 54 72 61 63 65 46 49 4c 45 20 26 26 20 79 79  yTraceFILE && yy
2eb0: 70 50 61 72 73 65 72 2d 3e 69 64 78 3e 30 20 29  pParser->idx>0 )
2ec0: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
2ed0: 20 66 70 72 69 6e 74 66 28 79 79 54 72 61 63 65   fprintf(yyTrace
2ee0: 46 49 4c 45 2c 22 25 73 53 68 69 66 74 20 25 64  FILE,"%sShift %d
2ef0: 5c 6e 22 2c 79 79 54 72 61 63 65 50 72 6f 6d 70  \n",yyTracePromp
2f00: 74 2c 79 79 4e 65 77 53 74 61 74 65 29 3b 0a 20  t,yyNewState);. 
2f10: 20 20 20 66 70 72 69 6e 74 66 28 79 79 54 72 61     fprintf(yyTra
2f20: 63 65 46 49 4c 45 2c 22 25 73 53 74 61 63 6b 3a  ceFILE,"%sStack:
2f30: 22 2c 79 79 54 72 61 63 65 50 72 6f 6d 70 74 29  ",yyTracePrompt)
2f40: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69  ;.    for(i=1; i
2f50: 3c 3d 79 79 70 50 61 72 73 65 72 2d 3e 69 64 78  <=yypParser->idx
2f60: 3b 20 69 2b 2b 29 0a 20 20 20 20 20 20 66 70 72  ; i++).      fpr
2f70: 69 6e 74 66 28 79 79 54 72 61 63 65 46 49 4c 45  intf(yyTraceFILE
2f80: 2c 22 20 25 73 22 2c 79 79 54 6f 6b 65 6e 4e 61  ," %s",yyTokenNa
2f90: 6d 65 5b 79 79 70 50 61 72 73 65 72 2d 3e 73 74  me[yypParser->st
2fa0: 61 63 6b 5b 69 5d 2e 6d 61 6a 6f 72 5d 29 3b 0a  ack[i].major]);.
2fb0: 20 20 20 20 66 70 72 69 6e 74 66 28 79 79 54 72      fprintf(yyTr
2fc0: 61 63 65 46 49 4c 45 2c 22 5c 6e 22 29 3b 0a 20  aceFILE,"\n");. 
2fd0: 20 7d 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 20   }.#endif.}../* 
2fe0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  The following ta
2ff0: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ble contains inf
3000: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
3010: 76 65 72 79 20 72 75 6c 65 20 74 68 61 74 0a 2a  very rule that.*
3020: 2a 20 69 73 20 75 73 65 64 20 64 75 72 69 6e 67  * is used during
3030: 20 74 68 65 20 72 65 64 75 63 65 2e 0a 2a 2f 0a   the reduce..*/.
3040: 73 74 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a  static struct {.
3050: 20 20 59 59 43 4f 44 45 54 59 50 45 20 6c 68 73    YYCODETYPE lhs
3060: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 79 6d  ;         /* Sym
3070: 62 6f 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d  bol on the left-
3080: 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
3090: 20 72 75 6c 65 20 2a 2f 0a 20 20 75 6e 73 69 67   rule */.  unsig
30a0: 6e 65 64 20 63 68 61 72 20 6e 72 68 73 3b 20 20  ned char nrhs;  
30b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
30c0: 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20  right-hand side 
30d0: 73 79 6d 62 6f 6c 73 20 69 6e 20 74 68 65 20 72  symbols in the r
30e0: 75 6c 65 20 2a 2f 0a 7d 20 79 79 52 75 6c 65 49  ule */.} yyRuleI
30f0: 6e 66 6f 5b 5d 20 3d 20 7b 0a 25 25 0a 7d 3b 0a  nfo[] = {.%%.};.
3100: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 79 79 5f  .static void yy_
3110: 61 63 63 65 70 74 28 79 79 50 61 72 73 65 72 20  accept(yyParser 
3120: 2a 20 20 50 61 72 73 65 41 4e 53 49 41 52 47 44  *  ParseANSIARGD
3130: 45 43 4c 29 3b 20 20 2f 2a 20 46 6f 72 77 61 72  ECL);  /* Forwar
3140: 64 20 44 65 63 6c 61 72 61 74 69 6f 6e 20 2a 2f  d Declaration */
3150: 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  ../*.** Perform 
3160: 61 20 72 65 64 75 63 65 20 61 63 74 69 6f 6e 20  a reduce action 
3170: 61 6e 64 20 74 68 65 20 73 68 69 66 74 20 74 68  and the shift th
3180: 61 74 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74  at must immediat
3190: 65 6c 79 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 74 68  ely.** follow th
31a0: 65 20 72 65 64 75 63 65 2e 0a 2a 2f 0a 73 74 61  e reduce..*/.sta
31b0: 74 69 63 20 76 6f 69 64 20 79 79 5f 72 65 64 75  tic void yy_redu
31c0: 63 65 28 0a 20 20 79 79 50 61 72 73 65 72 20 2a  ce(.  yyParser *
31d0: 79 79 70 50 61 72 73 65 72 2c 20 20 20 20 20 20  yypParser,      
31e0: 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
31f0: 20 2a 2f 0a 20 20 69 6e 74 20 79 79 72 75 6c 65   */.  int yyrule
3200: 6e 6f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  no              
3210: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3220: 74 68 65 20 72 75 6c 65 20 62 79 20 77 68 69 63  the rule by whic
3230: 68 20 74 6f 20 72 65 64 75 63 65 20 2a 2f 0a 20  h to reduce */. 
3240: 20 50 61 72 73 65 41 4e 53 49 41 52 47 44 45 43   ParseANSIARGDEC
3250: 4c 0a 29 7b 0a 20 20 69 6e 74 20 79 79 67 6f 74  L.){.  int yygot
3260: 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o;              
3270: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
3280: 78 74 20 73 74 61 74 65 20 2a 2f 0a 20 20 69 6e  xt state */.  in
3290: 74 20 79 79 61 63 74 3b 20 20 20 20 20 20 20 20  t yyact;        
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32b0: 20 54 68 65 20 6e 65 78 74 20 61 63 74 69 6f 6e   The next action
32c0: 20 2a 2f 0a 20 20 59 59 4d 49 4e 4f 52 54 59 50   */.  YYMINORTYP
32d0: 45 20 79 79 67 6f 74 6f 6d 69 6e 6f 72 3b 20 20  E yygotominor;  
32e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4c 48 53        /* The LHS
32f0: 20 6f 66 20 74 68 65 20 72 75 6c 65 20 72 65 64   of the rule red
3300: 75 63 65 64 20 2a 2f 0a 20 20 73 74 72 75 63 74  uced */.  struct
3310: 20 79 79 53 74 61 63 6b 45 6e 74 72 79 20 2a 79   yyStackEntry *y
3320: 79 6d 73 70 3b 20 20 20 20 20 2f 2a 20 54 68 65  ymsp;     /* The
3330: 20 74 6f 70 20 6f 66 20 74 68 65 20 70 61 72 73   top of the pars
3340: 65 72 27 73 20 73 74 61 63 6b 20 2a 2f 0a 20 20  er's stack */.  
3350: 69 6e 74 20 79 79 73 69 7a 65 3b 20 20 20 20 20  int yysize;     
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3370: 2f 2a 20 41 6d 6f 75 6e 74 20 74 6f 20 70 6f 70  /* Amount to pop
3380: 20 74 68 65 20 73 74 61 63 6b 20 2a 2f 0a 20 20   the stack */.  
3390: 79 79 6d 73 70 20 3d 20 79 79 70 50 61 72 73 65  yymsp = yypParse
33a0: 72 2d 3e 74 6f 70 3b 0a 20 20 73 77 69 74 63 68  r->top;.  switch
33b0: 28 20 79 79 72 75 6c 65 6e 6f 20 29 7b 0a 20 20  ( yyruleno ){.  
33c0: 2f 2a 20 42 65 67 69 6e 6e 69 6e 67 20 68 65 72  /* Beginning her
33d0: 65 20 61 72 65 20 74 68 65 20 72 65 64 75 63 74  e are the reduct
33e0: 69 6f 6e 20 63 61 73 65 73 2e 20 20 41 20 74 79  ion cases.  A ty
33f0: 70 69 63 61 6c 20 65 78 61 6d 70 6c 65 0a 20 20  pical example.  
3400: 2a 2a 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a  ** follows:.  **
3410: 20 20 20 63 61 73 65 20 30 3a 0a 20 20 2a 2a 20     case 0:.  ** 
3420: 20 20 20 20 59 59 54 52 41 43 45 28 22 3c 74 65      YYTRACE("<te
3430: 78 74 20 6f 66 20 74 68 65 20 72 75 6c 65 3e 22  xt of the rule>"
3440: 29 3b 0a 20 20 2a 2a 20 20 23 6c 69 6e 65 20 3c  );.  **  #line <
3450: 6c 69 6e 65 6e 6f 3e 20 3c 67 72 61 6d 6d 61 72  lineno> <grammar
3460: 66 69 6c 65 3e 0a 20 20 2a 2a 20 20 20 20 20 7b  file>.  **     {
3470: 20 2e 2e 2e 20 7d 20 20 20 20 20 20 20 20 20 20   ... }          
3480: 20 2f 2f 20 55 73 65 72 20 73 75 70 70 6c 69 65   // User supplie
3490: 64 20 63 6f 64 65 0a 20 20 2a 2a 20 20 23 6c 69  d code.  **  #li
34a0: 6e 65 20 3c 6c 69 6e 65 6e 6f 3e 20 3c 74 68 69  ne <lineno> <thi
34b0: 73 66 69 6c 65 3e 0a 20 20 2a 2a 20 20 20 20 20  sfile>.  **     
34c0: 62 72 65 61 6b 3b 0a 20 20 2a 2f 0a 25 25 0a 20  break;.  */.%%. 
34d0: 20 7d 3b 0a 20 20 79 79 67 6f 74 6f 20 3d 20 79   };.  yygoto = y
34e0: 79 52 75 6c 65 49 6e 66 6f 5b 79 79 72 75 6c 65  yRuleInfo[yyrule
34f0: 6e 6f 5d 2e 6c 68 73 3b 0a 20 20 79 79 73 69 7a  no].lhs;.  yysiz
3500: 65 20 3d 20 79 79 52 75 6c 65 49 6e 66 6f 5b 79  e = yyRuleInfo[y
3510: 79 72 75 6c 65 6e 6f 5d 2e 6e 72 68 73 3b 0a 20  yruleno].nrhs;. 
3520: 20 79 79 70 50 61 72 73 65 72 2d 3e 69 64 78 20   yypParser->idx 
3530: 2d 3d 20 79 79 73 69 7a 65 3b 0a 20 20 79 79 70  -= yysize;.  yyp
3540: 50 61 72 73 65 72 2d 3e 74 6f 70 20 2d 3d 20 79  Parser->top -= y
3550: 79 73 69 7a 65 3b 0a 20 20 79 79 61 63 74 20 3d  ysize;.  yyact =
3560: 20 79 79 5f 66 69 6e 64 5f 70 61 72 73 65 72 5f   yy_find_parser_
3570: 61 63 74 69 6f 6e 28 79 79 70 50 61 72 73 65 72  action(yypParser
3580: 2c 79 79 67 6f 74 6f 29 3b 0a 20 20 69 66 28 20  ,yygoto);.  if( 
3590: 79 79 61 63 74 20 3c 20 59 59 4e 53 54 41 54 45  yyact < YYNSTATE
35a0: 20 29 7b 0a 20 20 20 20 79 79 5f 73 68 69 66 74   ){.    yy_shift
35b0: 28 79 79 70 50 61 72 73 65 72 2c 79 79 61 63 74  (yypParser,yyact
35c0: 2c 79 79 67 6f 74 6f 2c 26 79 79 67 6f 74 6f 6d  ,yygoto,&yygotom
35d0: 69 6e 6f 72 29 3b 0a 20 20 7d 65 6c 73 65 20 69  inor);.  }else i
35e0: 66 28 20 79 79 61 63 74 20 3d 3d 20 59 59 4e 53  f( yyact == YYNS
35f0: 54 41 54 45 20 2b 20 59 59 4e 52 55 4c 45 20 2b  TATE + YYNRULE +
3600: 20 31 20 29 7b 0a 20 20 20 20 79 79 5f 61 63 63   1 ){.    yy_acc
3610: 65 70 74 28 79 79 70 50 61 72 73 65 72 20 50 61  ept(yypParser Pa
3620: 72 73 65 41 52 47 44 45 43 4c 29 3b 0a 20 20 7d  rseARGDECL);.  }
3630: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
3640: 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 65 78 65  llowing code exe
3650: 63 75 74 65 73 20 77 68 65 6e 20 74 68 65 20 70  cutes when the p
3660: 61 72 73 65 20 66 61 69 6c 73 0a 2a 2f 0a 73 74  arse fails.*/.st
3670: 61 74 69 63 20 76 6f 69 64 20 79 79 5f 70 61 72  atic void yy_par
3680: 73 65 5f 66 61 69 6c 65 64 28 0a 20 20 79 79 50  se_failed(.  yyP
3690: 61 72 73 65 72 20 2a 79 79 70 50 61 72 73 65 72  arser *yypParser
36a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
36b0: 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 50 61  e parser */.  Pa
36c0: 72 73 65 41 4e 53 49 41 52 47 44 45 43 4c 20 20  rseANSIARGDECL  
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
36e0: 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 20 28  xtra arguments (
36f0: 69 66 20 61 6e 79 29 20 2a 2f 0a 29 7b 0a 23 69  if any) */.){.#i
3700: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69  fndef NDEBUG.  i
3710: 66 28 20 79 79 54 72 61 63 65 46 49 4c 45 20 29  f( yyTraceFILE )
3720: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 79 79  {.    fprintf(yy
3730: 54 72 61 63 65 46 49 4c 45 2c 22 25 73 46 61 69  TraceFILE,"%sFai
3740: 6c 21 5c 6e 22 2c 79 79 54 72 61 63 65 50 72 6f  l!\n",yyTracePro
3750: 6d 70 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  mpt);.  }.#endif
3760: 0a 20 20 77 68 69 6c 65 28 20 79 79 70 50 61 72  .  while( yypPar
3770: 73 65 72 2d 3e 69 64 78 3e 3d 30 20 29 20 79 79  ser->idx>=0 ) yy
3780: 5f 70 6f 70 5f 70 61 72 73 65 72 5f 73 74 61 63  _pop_parser_stac
3790: 6b 28 79 79 70 50 61 72 73 65 72 29 3b 0a 20 20  k(yypParser);.  
37a0: 2f 2a 20 48 65 72 65 20 63 6f 64 65 20 69 73 20  /* Here code is 
37b0: 69 6e 73 65 72 74 65 64 20 77 68 69 63 68 20 77  inserted which w
37c0: 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20  ill be executed 
37d0: 77 68 65 6e 65 76 65 72 20 74 68 65 0a 20 20 2a  whenever the.  *
37e0: 2a 20 70 61 72 73 65 72 20 66 61 69 6c 73 20 2a  * parser fails *
37f0: 2f 0a 25 25 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  /.%%.}../*.** Th
3800: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65  e following code
3810: 20 65 78 65 63 75 74 65 73 20 77 68 65 6e 20 61   executes when a
3820: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 66 69   syntax error fi
3830: 72 73 74 20 6f 63 63 75 72 73 2e 0a 2a 2f 0a 73  rst occurs..*/.s
3840: 74 61 74 69 63 20 76 6f 69 64 20 79 79 5f 73 79  tatic void yy_sy
3850: 6e 74 61 78 5f 65 72 72 6f 72 28 0a 20 20 79 79  ntax_error(.  yy
3860: 50 61 72 73 65 72 20 2a 79 79 70 50 61 72 73 65  Parser *yypParse
3870: 72 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r,           /* 
3880: 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
3890: 69 6e 74 20 79 79 6d 61 6a 6f 72 2c 20 20 20 20  int yymajor,    
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
38b0: 2a 20 54 68 65 20 6d 61 6a 6f 72 20 74 79 70 65  * The major type
38c0: 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 74 6f   of the error to
38d0: 6b 65 6e 20 2a 2f 0a 20 20 59 59 4d 49 4e 4f 52  ken */.  YYMINOR
38e0: 54 59 50 45 20 79 79 6d 69 6e 6f 72 20 20 20 20  TYPE yyminor    
38f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
3900: 69 6e 6f 72 20 74 79 70 65 20 6f 66 20 74 68 65  inor type of the
3910: 20 65 72 72 6f 72 20 74 6f 6b 65 6e 20 2a 2f 0a   error token */.
3920: 20 20 50 61 72 73 65 41 4e 53 49 41 52 47 44 45    ParseANSIARGDE
3930: 43 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  CL              
3940: 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65   /* Extra argume
3950: 6e 74 73 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  nts (if any) */.
3960: 29 7b 0a 23 64 65 66 69 6e 65 20 54 4f 4b 45 4e  ){.#define TOKEN
3970: 20 28 79 79 6d 69 6e 6f 72 2e 79 79 30 29 0a 25   (yyminor.yy0).%
3980: 25 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  %.}../*.** The f
3990: 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 65 78 65 63  ollowing is exec
39a0: 75 74 65 64 20 77 68 65 6e 20 74 68 65 20 70 61  uted when the pa
39b0: 72 73 65 72 20 61 63 63 65 70 74 73 0a 2a 2f 0a  rser accepts.*/.
39c0: 73 74 61 74 69 63 20 76 6f 69 64 20 79 79 5f 61  static void yy_a
39d0: 63 63 65 70 74 28 0a 20 20 79 79 50 61 72 73 65  ccept(.  yyParse
39e0: 72 20 2a 79 79 70 50 61 72 73 65 72 20 20 20 20  r *yypParser    
39f0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
3a00: 72 73 65 72 20 2a 2f 0a 20 20 50 61 72 73 65 41  rser */.  ParseA
3a10: 4e 53 49 41 52 47 44 45 43 4c 20 20 20 20 20 20  NSIARGDECL      
3a20: 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
3a30: 20 61 72 67 75 6d 65 6e 74 73 20 28 69 66 20 61   arguments (if a
3a40: 6e 79 29 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64 65  ny) */.){.#ifnde
3a50: 66 20 4e 44 45 42 55 47 0a 20 20 69 66 28 20 79  f NDEBUG.  if( y
3a60: 79 54 72 61 63 65 46 49 4c 45 20 29 7b 0a 20 20  yTraceFILE ){.  
3a70: 20 20 66 70 72 69 6e 74 66 28 79 79 54 72 61 63    fprintf(yyTrac
3a80: 65 46 49 4c 45 2c 22 25 73 41 63 63 65 70 74 21  eFILE,"%sAccept!
3a90: 5c 6e 22 2c 79 79 54 72 61 63 65 50 72 6f 6d 70  \n",yyTracePromp
3aa0: 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  t);.  }.#endif. 
3ab0: 20 77 68 69 6c 65 28 20 79 79 70 50 61 72 73 65   while( yypParse
3ac0: 72 2d 3e 69 64 78 3e 3d 30 20 29 20 79 79 5f 70  r->idx>=0 ) yy_p
3ad0: 6f 70 5f 70 61 72 73 65 72 5f 73 74 61 63 6b 28  op_parser_stack(
3ae0: 79 79 70 50 61 72 73 65 72 29 3b 0a 20 20 2f 2a  yypParser);.  /*
3af0: 20 48 65 72 65 20 63 6f 64 65 20 69 73 20 69 6e   Here code is in
3b00: 73 65 72 74 65 64 20 77 68 69 63 68 20 77 69 6c  serted which wil
3b10: 6c 20 62 65 20 65 78 65 63 75 74 65 64 20 77 68  l be executed wh
3b20: 65 6e 65 76 65 72 20 74 68 65 0a 20 20 2a 2a 20  enever the.  ** 
3b30: 70 61 72 73 65 72 20 61 63 63 65 70 74 73 20 2a  parser accepts *
3b40: 2f 0a 25 25 0a 7d 0a 0a 2f 2a 20 54 68 65 20 6d  /.%%.}../* The m
3b50: 61 69 6e 20 70 61 72 73 65 72 20 70 72 6f 67 72  ain parser progr
3b60: 61 6d 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  am..** The first
3b70: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
3b80: 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 74 72 75  ointer to a stru
3b90: 63 74 75 72 65 20 6f 62 74 61 69 6e 65 64 20 66  cture obtained f
3ba0: 72 6f 6d 0a 2a 2a 20 22 50 61 72 73 65 41 6c 6c  rom.** "ParseAll
3bb0: 6f 63 22 20 77 68 69 63 68 20 64 65 73 63 72 69  oc" which descri
3bc0: 62 65 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  bes the current 
3bd0: 73 74 61 74 65 20 6f 66 20 74 68 65 20 70 61 72  state of the par
3be0: 73 65 72 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  ser..** The seco
3bf0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74  nd argument is t
3c00: 68 65 20 6d 61 6a 6f 72 20 74 6f 6b 65 6e 20 6e  he major token n
3c10: 75 6d 62 65 72 2e 20 20 54 68 65 20 74 68 69 72  umber.  The thir
3c20: 64 20 69 73 0a 2a 2a 20 74 68 65 20 6d 69 6e 6f  d is.** the mino
3c30: 72 20 74 6f 6b 65 6e 2e 20 20 54 68 65 20 66 6f  r token.  The fo
3c40: 75 72 74 68 20 6f 70 74 69 6f 6e 61 6c 20 61 72  urth optional ar
3c50: 67 75 6d 65 6e 74 20 69 73 20 77 68 61 74 65 76  gument is whatev
3c60: 65 72 20 74 68 65 0a 2a 2a 20 75 73 65 72 20 77  er the.** user w
3c70: 61 6e 74 73 20 28 61 6e 64 20 73 70 65 63 69 66  ants (and specif
3c80: 69 65 64 20 69 6e 20 74 68 65 20 67 72 61 6d 6d  ied in the gramm
3c90: 61 72 29 20 61 6e 64 20 69 73 20 61 76 61 69 6c  ar) and is avail
3ca0: 61 62 6c 65 20 66 6f 72 0a 2a 2a 20 75 73 65 20  able for.** use 
3cb0: 62 79 20 74 68 65 20 61 63 74 69 6f 6e 20 72 6f  by the action ro
3cc0: 75 74 69 6e 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e  utines..**.** In
3cd0: 70 75 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  puts:.** <ul>.**
3ce0: 20 3c 6c 69 3e 20 41 20 70 6f 69 6e 74 65 72 20   <li> A pointer 
3cf0: 74 6f 20 74 68 65 20 70 61 72 73 65 72 20 28 61  to the parser (a
3d00: 6e 20 6f 70 61 71 75 65 20 73 74 72 75 63 74 75  n opaque structu
3d10: 72 65 2e 29 0a 2a 2a 20 3c 6c 69 3e 20 54 68 65  re.).** <li> The
3d20: 20 6d 61 6a 6f 72 20 74 6f 6b 65 6e 20 6e 75 6d   major token num
3d30: 62 65 72 2e 0a 2a 2a 20 3c 6c 69 3e 20 54 68 65  ber..** <li> The
3d40: 20 6d 69 6e 6f 72 20 74 6f 6b 65 6e 20 6e 75 6d   minor token num
3d50: 62 65 72 2e 0a 2a 2a 20 3c 6c 69 3e 20 41 6e 20  ber..** <li> An 
3d60: 6f 70 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  option argument 
3d70: 6f 66 20 61 20 67 72 61 6d 6d 61 72 2d 73 70 65  of a grammar-spe
3d80: 63 69 66 69 65 64 20 74 79 70 65 2e 0a 2a 2a 20  cified type..** 
3d90: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 4f 75 74 70  </ul>.**.** Outp
3da0: 75 74 73 3a 0a 2a 2a 20 4e 6f 6e 65 2e 0a 2a 2f  uts:.** None..*/
3db0: 0a 76 6f 69 64 20 50 61 72 73 65 28 0a 20 20 76  .void Parse(.  v
3dc0: 6f 69 64 20 2a 79 79 70 2c 20 20 20 20 20 20 20  oid *yyp,       
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
3de0: 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 69  he parser */.  i
3df0: 6e 74 20 79 79 6d 61 6a 6f 72 2c 20 20 20 20 20  nt yymajor,     
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
3e10: 68 65 20 6d 61 6a 6f 72 20 74 6f 6b 65 6e 20 63  he major token c
3e20: 6f 64 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ode number */.  
3e30: 50 61 72 73 65 54 4f 4b 45 4e 54 59 50 45 20 79  ParseTOKENTYPE y
3e40: 79 6d 69 6e 6f 72 20 20 20 20 20 20 20 2f 2a 20  yminor       /* 
3e50: 54 68 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  The value for th
3e60: 65 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 50 61 72  e token */.  Par
3e70: 73 65 41 4e 53 49 41 52 47 44 45 43 4c 0a 29 7b  seANSIARGDECL.){
3e80: 0a 20 20 59 59 4d 49 4e 4f 52 54 59 50 45 20 79  .  YYMINORTYPE y
3e90: 79 6d 69 6e 6f 72 75 6e 69 6f 6e 3b 0a 20 20 69  yminorunion;.  i
3ea0: 6e 74 20 79 79 61 63 74 3b 20 20 20 20 20 20 20  nt yyact;       
3eb0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
3ec0: 65 72 20 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  er action. */.  
3ed0: 69 6e 74 20 79 79 65 6e 64 6f 66 69 6e 70 75 74  int yyendofinput
3ee0: 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
3ef0: 20 77 65 20 61 72 65 20 61 74 20 74 68 65 20 65   we are at the e
3f00: 6e 64 20 6f 66 20 69 6e 70 75 74 20 2a 2f 0a 20  nd of input */. 
3f10: 20 69 6e 74 20 79 79 65 72 72 6f 72 68 69 74 20   int yyerrorhit 
3f20: 3d 20 30 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  = 0;   /* True i
3f30: 66 20 79 79 6d 61 6a 6f 72 20 68 61 73 20 69 6e  f yymajor has in
3f40: 76 6f 6b 65 64 20 61 6e 20 65 72 72 6f 72 20 2a  voked an error *
3f50: 2f 0a 20 20 79 79 50 61 72 73 65 72 20 2a 79 79  /.  yyParser *yy
3f60: 70 50 61 72 73 65 72 3b 20 20 2f 2a 20 54 68 65  pParser;  /* The
3f70: 20 70 61 72 73 65 72 20 2a 2f 0a 0a 20 20 2f 2a   parser */..  /*
3f80: 20 28 72 65 29 69 6e 69 74 69 61 6c 69 7a 65 20   (re)initialize 
3f90: 74 68 65 20 70 61 72 73 65 72 2c 20 69 66 20 6e  the parser, if n
3fa0: 65 63 65 73 73 61 72 79 20 2a 2f 0a 20 20 79 79  ecessary */.  yy
3fb0: 70 50 61 72 73 65 72 20 3d 20 28 79 79 50 61 72  pParser = (yyPar
3fc0: 73 65 72 2a 29 79 79 70 3b 0a 20 20 69 66 28 20  ser*)yyp;.  if( 
3fd0: 79 79 70 50 61 72 73 65 72 2d 3e 69 64 78 3c 30  yypParser->idx<0
3fe0: 20 29 7b 0a 20 20 20 20 69 66 28 20 79 79 6d 61   ){.    if( yyma
3ff0: 6a 6f 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  jor==0 ) return;
4000: 0a 20 20 20 20 79 79 70 50 61 72 73 65 72 2d 3e  .    yypParser->
4010: 69 64 78 20 3d 20 30 3b 0a 20 20 20 20 79 79 70  idx = 0;.    yyp
4020: 50 61 72 73 65 72 2d 3e 65 72 72 63 6e 74 20 3d  Parser->errcnt =
4030: 20 2d 31 3b 0a 20 20 20 20 79 79 70 50 61 72 73   -1;.    yypPars
4040: 65 72 2d 3e 74 6f 70 20 3d 20 26 79 79 70 50 61  er->top = &yypPa
4050: 72 73 65 72 2d 3e 73 74 61 63 6b 5b 30 5d 3b 0a  rser->stack[0];.
4060: 20 20 20 20 79 79 70 50 61 72 73 65 72 2d 3e 74      yypParser->t
4070: 6f 70 2d 3e 73 74 61 74 65 6e 6f 20 3d 20 30 3b  op->stateno = 0;
4080: 0a 20 20 20 20 79 79 70 50 61 72 73 65 72 2d 3e  .    yypParser->
4090: 74 6f 70 2d 3e 6d 61 6a 6f 72 20 3d 20 30 3b 0a  top->major = 0;.
40a0: 20 20 7d 0a 20 20 79 79 6d 69 6e 6f 72 75 6e 69    }.  yyminoruni
40b0: 6f 6e 2e 79 79 30 20 3d 20 79 79 6d 69 6e 6f 72  on.yy0 = yyminor
40c0: 3b 0a 20 20 79 79 65 6e 64 6f 66 69 6e 70 75 74  ;.  yyendofinput
40d0: 20 3d 20 28 79 79 6d 61 6a 6f 72 3d 3d 30 29 3b   = (yymajor==0);
40e0: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
40f0: 0a 20 20 69 66 28 20 79 79 54 72 61 63 65 46 49  .  if( yyTraceFI
4100: 4c 45 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  LE ){.    fprint
4110: 66 28 79 79 54 72 61 63 65 46 49 4c 45 2c 22 25  f(yyTraceFILE,"%
4120: 73 49 6e 70 75 74 20 25 73 5c 6e 22 2c 79 79 54  sInput %s\n",yyT
4130: 72 61 63 65 50 72 6f 6d 70 74 2c 79 79 54 6f 6b  racePrompt,yyTok
4140: 65 6e 4e 61 6d 65 5b 79 79 6d 61 6a 6f 72 5d 29  enName[yymajor])
4150: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
4160: 64 6f 7b 0a 20 20 20 20 79 79 61 63 74 20 3d 20  do{.    yyact = 
4170: 79 79 5f 66 69 6e 64 5f 70 61 72 73 65 72 5f 61  yy_find_parser_a
4180: 63 74 69 6f 6e 28 79 79 70 50 61 72 73 65 72 2c  ction(yypParser,
4190: 79 79 6d 61 6a 6f 72 29 3b 0a 20 20 20 20 69 66  yymajor);.    if
41a0: 28 20 79 79 61 63 74 3c 59 59 4e 53 54 41 54 45  ( yyact<YYNSTATE
41b0: 20 29 7b 0a 20 20 20 20 20 20 79 79 5f 73 68 69   ){.      yy_shi
41c0: 66 74 28 79 79 70 50 61 72 73 65 72 2c 79 79 61  ft(yypParser,yya
41d0: 63 74 2c 79 79 6d 61 6a 6f 72 2c 26 79 79 6d 69  ct,yymajor,&yymi
41e0: 6e 6f 72 75 6e 69 6f 6e 29 3b 0a 20 20 20 20 20  norunion);.     
41f0: 20 79 79 70 50 61 72 73 65 72 2d 3e 65 72 72 63   yypParser->errc
4200: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
4210: 79 79 65 6e 64 6f 66 69 6e 70 75 74 20 26 26 20  yyendofinput && 
4220: 79 79 70 50 61 72 73 65 72 2d 3e 69 64 78 3e 3d  yypParser->idx>=
4230: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 79 79 6d  0 ){.        yym
4240: 61 6a 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  ajor = 0;.      
4250: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 79  }else{.        y
4260: 79 6d 61 6a 6f 72 20 3d 20 59 59 4e 4f 43 4f 44  ymajor = YYNOCOD
4270: 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  E;.      }.    }
4280: 65 6c 73 65 20 69 66 28 20 79 79 61 63 74 20 3c  else if( yyact <
4290: 20 59 59 4e 53 54 41 54 45 20 2b 20 59 59 4e 52   YYNSTATE + YYNR
42a0: 55 4c 45 20 29 7b 0a 20 20 20 20 20 20 79 79 5f  ULE ){.      yy_
42b0: 72 65 64 75 63 65 28 79 79 70 50 61 72 73 65 72  reduce(yypParser
42c0: 2c 79 79 61 63 74 2d 59 59 4e 53 54 41 54 45 20  ,yyact-YYNSTATE 
42d0: 50 61 72 73 65 41 52 47 44 45 43 4c 29 3b 0a 20  ParseARGDECL);. 
42e0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 79 79 61     }else if( yya
42f0: 63 74 20 3d 3d 20 59 59 5f 45 52 52 4f 52 5f 41  ct == YY_ERROR_A
4300: 43 54 49 4f 4e 20 29 7b 0a 23 69 66 6e 64 65 66  CTION ){.#ifndef
4310: 20 4e 44 45 42 55 47 0a 20 20 20 20 20 20 69 66   NDEBUG.      if
4320: 28 20 79 79 54 72 61 63 65 46 49 4c 45 20 29 7b  ( yyTraceFILE ){
4330: 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
4340: 28 79 79 54 72 61 63 65 46 49 4c 45 2c 22 25 73  (yyTraceFILE,"%s
4350: 53 79 6e 74 61 78 20 45 72 72 6f 72 21 5c 6e 22  Syntax Error!\n"
4360: 2c 79 79 54 72 61 63 65 50 72 6f 6d 70 74 29 3b  ,yyTracePrompt);
4370: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  .      }.#endif.
4380: 23 69 66 64 65 66 20 59 59 45 52 52 4f 52 53 59  #ifdef YYERRORSY
4390: 4d 42 4f 4c 0a 20 20 20 20 20 20 2f 2a 20 41 20  MBOL.      /* A 
43a0: 73 79 6e 74 61 78 20 65 72 72 6f 72 20 68 61 73  syntax error has
43b0: 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20   occurred..     
43c0: 20 2a 2a 20 54 68 65 20 72 65 73 70 6f 6e 73 65   ** The response
43d0: 20 74 6f 20 61 6e 20 65 72 72 6f 72 20 64 65 70   to an error dep
43e0: 65 6e 64 73 20 75 70 6f 6e 20 77 68 65 74 68 65  ends upon whethe
43f0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 0a 20 20 20  r or not the.   
4400: 20 20 20 2a 2a 20 67 72 61 6d 6d 61 72 20 64 65     ** grammar de
4410: 66 69 6e 65 73 20 61 6e 20 65 72 72 6f 72 20 74  fines an error t
4420: 6f 6b 65 6e 20 22 45 52 52 4f 52 22 2e 20 20 0a  oken "ERROR".  .
4430: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
4440: 2a 20 54 68 69 73 20 69 73 20 77 68 61 74 20 77  * This is what w
4450: 65 20 64 6f 20 69 66 20 74 68 65 20 67 72 61 6d  e do if the gram
4460: 6d 61 72 20 64 6f 65 73 20 64 65 66 69 6e 65 20  mar does define 
4470: 45 52 52 4f 52 3a 0a 20 20 20 20 20 20 2a 2a 0a  ERROR:.      **.
4480: 20 20 20 20 20 20 2a 2a 20 20 2a 20 43 61 6c 6c        **  * Call
4490: 20 74 68 65 20 25 73 79 6e 74 61 78 5f 65 72 72   the %syntax_err
44a0: 6f 72 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 20  or function..   
44b0: 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20     **.      **  
44c0: 2a 20 42 65 67 69 6e 20 70 6f 70 70 69 6e 67 20  * Begin popping 
44d0: 74 68 65 20 73 74 61 63 6b 20 75 6e 74 69 6c 20  the stack until 
44e0: 77 65 20 65 6e 74 65 72 20 61 20 73 74 61 74 65  we enter a state
44f0: 20 77 68 65 72 65 0a 20 20 20 20 20 20 2a 2a 20   where.      ** 
4500: 20 20 20 69 74 20 69 73 20 6c 65 67 61 6c 20 74     it is legal t
4510: 6f 20 73 68 69 66 74 20 74 68 65 20 65 72 72 6f  o shift the erro
4520: 72 20 73 79 6d 62 6f 6c 2c 20 74 68 65 6e 20 73  r symbol, then s
4530: 68 69 66 74 0a 20 20 20 20 20 20 2a 2a 20 20 20  hift.      **   
4540: 20 74 68 65 20 65 72 72 6f 72 20 73 79 6d 62 6f   the error symbo
4550: 6c 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  l..      **.    
4560: 20 20 2a 2a 20 20 2a 20 53 65 74 20 74 68 65 20    **  * Set the 
4570: 65 72 72 6f 72 20 63 6f 75 6e 74 20 74 6f 20 74  error count to t
4580: 68 72 65 65 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  hree..      **. 
4590: 20 20 20 20 20 2a 2a 20 20 2a 20 42 65 67 69 6e       **  * Begin
45a0: 20 61 63 63 65 70 74 69 6e 67 20 61 6e 64 20 73   accepting and s
45b0: 68 69 66 74 69 6e 67 20 6e 65 77 20 74 6f 6b 65  hifting new toke
45c0: 6e 73 2e 20 20 4e 6f 20 6e 65 77 20 65 72 72 6f  ns.  No new erro
45d0: 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 70 72  r.      **    pr
45e0: 6f 63 65 73 73 69 6e 67 20 77 69 6c 6c 20 6f 63  ocessing will oc
45f0: 63 75 72 20 75 6e 74 69 6c 20 74 68 72 65 65 20  cur until three 
4600: 74 6f 6b 65 6e 73 20 68 61 76 65 20 62 65 65 6e  tokens have been
4610: 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 73 68 69  .      **    shi
4620: 66 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  fted successfull
4630: 79 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  y..      **.    
4640: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 79    */.      if( y
4650: 79 70 50 61 72 73 65 72 2d 3e 65 72 72 63 6e 74  ypParser->errcnt
4660: 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 79 79  <0 ){.        yy
4670: 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 28 79 79  _syntax_error(yy
4680: 70 50 61 72 73 65 72 2c 79 79 6d 61 6a 6f 72 2c  pParser,yymajor,
4690: 79 79 6d 69 6e 6f 72 75 6e 69 6f 6e 20 50 61 72  yyminorunion Par
46a0: 73 65 41 52 47 44 45 43 4c 29 3b 0a 20 20 20 20  seARGDECL);.    
46b0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 79 79    }.      if( yy
46c0: 70 50 61 72 73 65 72 2d 3e 74 6f 70 2d 3e 6d 61  pParser->top->ma
46d0: 6a 6f 72 3d 3d 59 59 45 52 52 4f 52 53 59 4d 42  jor==YYERRORSYMB
46e0: 4f 4c 20 7c 7c 20 79 79 65 72 72 6f 72 68 69 74  OL || yyerrorhit
46f0: 20 29 7b 0a 23 69 66 6e 64 65 66 20 4e 44 45 42   ){.#ifndef NDEB
4700: 55 47 0a 20 20 20 20 20 20 20 20 69 66 28 20 79  UG.        if( y
4710: 79 54 72 61 63 65 46 49 4c 45 20 29 7b 0a 20 20  yTraceFILE ){.  
4720: 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
4730: 79 79 54 72 61 63 65 46 49 4c 45 2c 22 25 73 44  yyTraceFILE,"%sD
4740: 69 73 63 61 72 64 20 69 6e 70 75 74 20 74 6f 6b  iscard input tok
4750: 65 6e 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20  en %s\n",.      
4760: 20 20 20 20 20 20 20 79 79 54 72 61 63 65 50 72         yyTracePr
4770: 6f 6d 70 74 2c 79 79 54 6f 6b 65 6e 4e 61 6d 65  ompt,yyTokenName
4780: 5b 79 79 6d 61 6a 6f 72 5d 29 3b 0a 20 20 20 20  [yymajor]);.    
4790: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
47a0: 20 20 20 20 20 79 79 5f 64 65 73 74 72 75 63 74       yy_destruct
47b0: 6f 72 28 79 79 6d 61 6a 6f 72 2c 26 79 79 6d 69  or(yymajor,&yymi
47c0: 6e 6f 72 75 6e 69 6f 6e 29 3b 0a 20 20 20 20 20  norunion);.     
47d0: 20 20 20 79 79 6d 61 6a 6f 72 20 3d 20 59 59 4e     yymajor = YYN
47e0: 4f 43 4f 44 45 3b 0a 20 20 20 20 20 20 7d 65 6c  OCODE;.      }el
47f0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 77 68 69  se{.         whi
4800: 6c 65 28 0a 20 20 20 20 20 20 20 20 20 20 79 79  le(.          yy
4810: 70 50 61 72 73 65 72 2d 3e 69 64 78 20 3e 3d 20  pParser->idx >= 
4820: 30 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 79  0 &&.          y
4830: 79 70 50 61 72 73 65 72 2d 3e 74 6f 70 2d 3e 6d  ypParser->top->m
4840: 61 6a 6f 72 20 21 3d 20 59 59 45 52 52 4f 52 53  ajor != YYERRORS
4850: 59 4d 42 4f 4c 20 26 26 0a 20 20 20 20 20 20 20  YMBOL &&.       
4860: 20 20 20 28 79 79 61 63 74 20 3d 20 79 79 5f 66     (yyact = yy_f
4870: 69 6e 64 5f 70 61 72 73 65 72 5f 61 63 74 69 6f  ind_parser_actio
4880: 6e 28 79 79 70 50 61 72 73 65 72 2c 59 59 45 52  n(yypParser,YYER
4890: 52 4f 52 53 59 4d 42 4f 4c 29 29 20 3e 3d 20 59  RORSYMBOL)) >= Y
48a0: 59 4e 53 54 41 54 45 0a 20 20 20 20 20 20 20 20  YNSTATE.        
48b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 79 79 5f  ){.          yy_
48c0: 70 6f 70 5f 70 61 72 73 65 72 5f 73 74 61 63 6b  pop_parser_stack
48d0: 28 79 79 70 50 61 72 73 65 72 29 3b 0a 20 20 20  (yypParser);.   
48e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
48f0: 66 28 20 79 79 70 50 61 72 73 65 72 2d 3e 69 64  f( yypParser->id
4900: 78 20 3c 20 30 20 7c 7c 20 79 79 6d 61 6a 6f 72  x < 0 || yymajor
4910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
4920: 20 79 79 5f 64 65 73 74 72 75 63 74 6f 72 28 79   yy_destructor(y
4930: 79 6d 61 6a 6f 72 2c 26 79 79 6d 69 6e 6f 72 75  ymajor,&yyminoru
4940: 6e 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  nion);.         
4950: 20 79 79 5f 70 61 72 73 65 5f 66 61 69 6c 65 64   yy_parse_failed
4960: 28 79 79 70 50 61 72 73 65 72 20 50 61 72 73 65  (yypParser Parse
4970: 41 52 47 44 45 43 4c 29 3b 0a 20 20 20 20 20 20  ARGDECL);.      
4980: 20 20 20 20 79 79 6d 61 6a 6f 72 20 3d 20 59 59      yymajor = YY
4990: 4e 4f 43 4f 44 45 3b 0a 20 20 20 20 20 20 20 20  NOCODE;.        
49a0: 7d 65 6c 73 65 20 69 66 28 20 79 79 70 50 61 72  }else if( yypPar
49b0: 73 65 72 2d 3e 74 6f 70 2d 3e 6d 61 6a 6f 72 21  ser->top->major!
49c0: 3d 59 59 45 52 52 4f 52 53 59 4d 42 4f 4c 20 29  =YYERRORSYMBOL )
49d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 59 59 4d 49  {.          YYMI
49e0: 4e 4f 52 54 59 50 45 20 75 32 3b 0a 20 20 20 20  NORTYPE u2;.    
49f0: 20 20 20 20 20 20 75 32 2e 59 59 45 52 52 53 59        u2.YYERRSY
4a00: 4d 44 54 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  MDT = 0;.       
4a10: 20 20 20 79 79 5f 73 68 69 66 74 28 79 79 70 50     yy_shift(yypP
4a20: 61 72 73 65 72 2c 79 79 61 63 74 2c 59 59 45 52  arser,yyact,YYER
4a30: 52 4f 52 53 59 4d 42 4f 4c 2c 26 75 32 29 3b 0a  RORSYMBOL,&u2);.
4a40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4a50: 7d 0a 20 20 20 20 20 20 79 79 70 50 61 72 73 65  }.      yypParse
4a60: 72 2d 3e 65 72 72 63 6e 74 20 3d 20 33 3b 0a 20  r->errcnt = 3;. 
4a70: 20 20 20 20 20 79 79 65 72 72 6f 72 68 69 74 20       yyerrorhit 
4a80: 3d 20 31 3b 0a 23 65 6c 73 65 20 20 2f 2a 20 59  = 1;.#else  /* Y
4a90: 59 45 52 52 4f 52 53 59 4d 42 4f 4c 20 69 73 20  YERRORSYMBOL is 
4aa0: 6e 6f 74 20 64 65 66 69 6e 65 64 20 2a 2f 0a 20  not defined */. 
4ab0: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
4ac0: 77 68 61 74 20 77 65 20 64 6f 20 69 66 20 74 68  what we do if th
4ad0: 65 20 67 72 61 6d 6d 61 72 20 64 6f 65 73 20 6e  e grammar does n
4ae0: 6f 74 20 64 65 66 69 6e 65 20 45 52 52 4f 52 3a  ot define ERROR:
4af0: 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
4b00: 2a 2a 20 20 2a 20 52 65 70 6f 72 74 20 61 6e 20  **  * Report an 
4b10: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2c 20 61  error message, a
4b20: 6e 64 20 74 68 72 6f 77 20 61 77 61 79 20 74 68  nd throw away th
4b30: 65 20 69 6e 70 75 74 20 74 6f 6b 65 6e 2e 0a 20  e input token.. 
4b40: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
4b50: 20 20 2a 20 49 66 20 74 68 65 20 69 6e 70 75 74    * If the input
4b60: 20 74 6f 6b 65 6e 20 69 73 20 24 2c 20 74 68 65   token is $, the
4b70: 6e 20 66 61 69 6c 20 74 68 65 20 70 61 72 73 65  n fail the parse
4b80: 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
4b90: 20 2a 2a 20 41 73 20 62 65 66 6f 72 65 2c 20 73   ** As before, s
4ba0: 75 62 73 65 71 75 65 6e 74 20 65 72 72 6f 72 20  ubsequent error 
4bb0: 6d 65 73 73 61 67 65 73 20 61 72 65 20 73 75 70  messages are sup
4bc0: 70 72 65 73 73 65 64 20 75 6e 74 69 6c 0a 20 20  pressed until.  
4bd0: 20 20 20 20 2a 2a 20 74 68 72 65 65 20 69 6e 70      ** three inp
4be0: 75 74 20 74 6f 6b 65 6e 73 20 68 61 76 65 20 62  ut tokens have b
4bf0: 65 65 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79  een successfully
4c00: 20 73 68 69 66 74 65 64 2e 0a 20 20 20 20 20 20   shifted..      
4c10: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 79 79 70  */.      if( yyp
4c20: 50 61 72 73 65 72 2d 3e 65 72 72 63 6e 74 3c 3d  Parser->errcnt<=
4c30: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 79 79 5f  0 ){.        yy_
4c40: 73 79 6e 74 61 78 5f 65 72 72 6f 72 28 79 79 70  syntax_error(yyp
4c50: 50 61 72 73 65 72 2c 79 79 6d 61 6a 6f 72 2c 79  Parser,yymajor,y
4c60: 79 6d 69 6e 6f 72 75 6e 69 6f 6e 20 50 61 72 73  yminorunion Pars
4c70: 65 41 52 47 44 45 43 4c 29 3b 0a 20 20 20 20 20  eARGDECL);.     
4c80: 20 7d 0a 20 20 20 20 20 20 79 79 70 50 61 72 73   }.      yypPars
4c90: 65 72 2d 3e 65 72 72 63 6e 74 20 3d 20 33 3b 0a  er->errcnt = 3;.
4ca0: 20 20 20 20 20 20 79 79 5f 64 65 73 74 72 75 63        yy_destruc
4cb0: 74 6f 72 28 79 79 6d 61 6a 6f 72 2c 26 79 79 6d  tor(yymajor,&yym
4cc0: 69 6e 6f 72 75 6e 69 6f 6e 29 3b 0a 20 20 20 20  inorunion);.    
4cd0: 20 20 69 66 28 20 79 79 65 6e 64 6f 66 69 6e 70    if( yyendofinp
4ce0: 75 74 20 29 7b 0a 20 20 20 20 20 20 20 20 79 79  ut ){.        yy
4cf0: 5f 70 61 72 73 65 5f 66 61 69 6c 65 64 28 79 79  _parse_failed(yy
4d00: 70 50 61 72 73 65 72 20 50 61 72 73 65 41 52 47  pParser ParseARG
4d10: 44 45 43 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  DECL);.      }. 
4d20: 20 20 20 20 20 79 79 6d 61 6a 6f 72 20 3d 20 59       yymajor = Y
4d30: 59 4e 4f 43 4f 44 45 3b 0a 23 65 6e 64 69 66 0a  YNOCODE;.#endif.
4d40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4d50: 20 79 79 5f 61 63 63 65 70 74 28 79 79 70 50 61   yy_accept(yypPa
4d60: 72 73 65 72 20 50 61 72 73 65 41 52 47 44 45 43  rser ParseARGDEC
4d70: 4c 29 3b 0a 20 20 20 20 20 20 79 79 6d 61 6a 6f  L);.      yymajo
4d80: 72 20 3d 20 59 59 4e 4f 43 4f 44 45 3b 0a 20 20  r = YYNOCODE;.  
4d90: 20 20 7d 0a 20 20 7d 77 68 69 6c 65 28 20 79 79    }.  }while( yy
4da0: 6d 61 6a 6f 72 21 3d 59 59 4e 4f 43 4f 44 45 20  major!=YYNOCODE 
4db0: 26 26 20 79 79 70 50 61 72 73 65 72 2d 3e 69 64  && yypParser->id
4dc0: 78 3e 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e  x>=0 );.  return
4dd0: 3b 0a 7d 0a                                      ;.}.