pyacc.pas 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536
  1. (* Yacc parser template (TP Yacc V3.0), V1.2 6-17-91 AG *)
  2. (* global definitions: *)
  3. (*
  4. TP Yacc - Yet Another Compiler Compiler for Turbo Pascal
  5. Copyright (C) 1990-92 Albert Graef <[email protected]>
  6. Copyright (C) 1996 Berend de Boer <[email protected]>
  7. This program is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2 of the License, or
  10. (at your option) any later version.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. $Revision$
  19. $Modtime: 96-08-01 11:24 $
  20. Last changes:
  21. Version 3.0 as of April 91
  22. Version 3.0a as of May 92 (bug fixes in precedence and type information
  23. updates)
  24. $History: YACC.PAS $
  25. *
  26. * ***************** Version 2 *****************
  27. * User: Berend Date: 96-10-10 Time: 21:16
  28. * Updated in $/Lex and Yacc/tply
  29. * Updated for protected mode, windows and Delphi 1.X and 2.X.
  30. ------------------------- Synopsis ------------------------
  31. Synopsis yacc [options] yacc-file[.y] [output-file[.pas]]
  32. Options
  33. -v "Verbose:" Yacc generates a readable description of the generated
  34. parser, written to yacc-file with new extension .lst.
  35. -d "Debug:" Yacc generates parser with debugging output.
  36. Description
  37. This is a reimplementation of the popular UNIX compiler generator
  38. Yacc for MS-DOS and Turbo Pascal.
  39. Differences from UNIX Yacc:
  40. - Produces output code for Turbo Pascal, rather than for C.
  41. - Does not support %union definitions. Instead, a value type is declared
  42. by specifying the type identifier *itself* as the tag of a %token
  43. or %type definition. Yacc will automatically generate an appropriate
  44. yylval variable of a variant record type (YYSType) which is capable of
  45. holding values of any of the types used in %token and %type.
  46. Type checking is *very* strict. If you use type definitions, then
  47. any symbol referred to in an action *must* have a type introduced
  48. in a type definition. Either the symbol must have been assigned a
  49. type in the definitions section, or the $<type-identifier> notation
  50. must be used. The syntax of the %type definition has been changed
  51. slightly to allow definitions of the form
  52. %type <type-identifier>
  53. (omitting the nonterminals) which may be used to declare types which
  54. are not assigned to any grammar symbol, but are used with the
  55. $<...> construct.
  56. - The parse tables constructed by this Yacc version are slightly greater
  57. than those constructed by UNIX Yacc, since a reduce action will only be
  58. chosen as the default action if it is the *only* action in the state.
  59. In difference, UNIX Yacc chooses a reduce action as the default action
  60. whenever it is the only *reduce* action of the state (even if there are
  61. other shift actions).
  62. This solves a bug in UNIX Yacc that makes the generated parser start
  63. error recovery too late with certain types of error productions (see
  64. also Schreiner/Friedman, "Introduction to compiler construction with
  65. UNIX," 1985). Also, errors will be caught sooner in most cases where
  66. standard Yacc would carry out an additional (default) reduction before
  67. detecting the error.
  68. ------------------------- Synopsis ------------------------
  69. *)
  70. {$IFDEF MsDos}
  71. {$M 16384,0,655360}
  72. {$ENDIF}
  73. {$IFDEF DPMI}
  74. {$M 32768}
  75. {$ENDIF}
  76. {$IFDEF Windows}
  77. {$M 32768,0}
  78. {$ENDIF}
  79. {$X+}
  80. {$I-}
  81. program Yacc;
  82. uses
  83. {$IFDEF Debug}
  84. {$IFDEF DPMI}
  85. YaccChk,
  86. {$ENDIF}
  87. {$ENDIF}
  88. {$IFDEF Windows}
  89. {$IFNDEF Console}
  90. WinCrt,
  91. {$ENDIF}
  92. {$ENDIF}
  93. YaccLib, YaccBase, YaccMsgs, YaccSem, YaccTabl, YaccPars;
  94. const ID = 257;
  95. const C_ID = 258;
  96. const LITERAL = 259;
  97. const LITID = 260;
  98. const NUMBER = 261;
  99. const PTOKEN = 262;
  100. const PLEFT = 263;
  101. const PRIGHT = 264;
  102. const PNONASSOC = 265;
  103. const PTYPE = 266;
  104. const PSTART = 267;
  105. const PPREC = 268;
  106. const PP = 269;
  107. const LCURL = 270;
  108. const RCURL = 271;
  109. const ILLEGAL = 272;
  110. var yylval : YYSType;
  111. function yylex : Integer; forward;
  112. function yyparse : Integer;
  113. var yystate, yysp, yyn : Integer;
  114. yys : array [1..yymaxdepth] of Integer;
  115. yyv : array [1..yymaxdepth] of YYSType;
  116. yyval : YYSType;
  117. procedure yyaction ( yyruleno : Integer );
  118. (* local definitions: *)
  119. begin
  120. (* actions: *)
  121. case yyruleno of
  122. 1 : begin
  123. yyval := yyv[yysp-0];
  124. end;
  125. 2 : begin
  126. yyval := yyv[yysp-0];
  127. end;
  128. 3 : begin
  129. yyval := yyv[yysp-0];
  130. end;
  131. 4 : begin
  132. yyval := yyv[yysp-0];
  133. end;
  134. 5 : begin
  135. yyval := yyv[yysp-0];
  136. end;
  137. 6 : begin
  138. yyerrok;
  139. end;
  140. 7 : begin
  141. yyerrok;
  142. end;
  143. 8 : begin
  144. yyerrok;
  145. end;
  146. 9 : begin
  147. yyerrok;
  148. end;
  149. 10 : begin
  150. yyerrok;
  151. end;
  152. 11 : begin
  153. yyerrok;
  154. end;
  155. 12 : begin
  156. yyval := yyv[yysp-0];
  157. end;
  158. 13 : begin
  159. yyerrok;
  160. end;
  161. 14 : begin
  162. yyval := yyv[yysp-0];
  163. end;
  164. 15 : begin
  165. yyval := yyv[yysp-0];
  166. end;
  167. 16 : begin
  168. error(rcurl_expected);
  169. end;
  170. 17 : begin
  171. yyval := yyv[yysp-0];
  172. end;
  173. 18 : begin
  174. yyerrok;
  175. end;
  176. 19 : begin
  177. yyerrok;
  178. end;
  179. 20 : begin
  180. yyerrok;
  181. end;
  182. 21 : begin
  183. yyval := yyv[yysp-0];
  184. end;
  185. 22 : begin
  186. yyval := yyv[yysp-0];
  187. end;
  188. 23 : begin
  189. error(rbrace_expected);
  190. end;
  191. 24 : begin
  192. yyval := yyv[yysp-0];
  193. end;
  194. 25 : begin
  195. yyval := yyv[yysp-0];
  196. end;
  197. 26 : begin
  198. error(rangle_expected);
  199. end;
  200. 27 : begin
  201. yyval := yyv[yysp-0];
  202. end;
  203. 28 : begin
  204. sort_types;
  205. definitions;
  206. next_section;
  207. end;
  208. 29 : begin
  209. next_section;
  210. generate_parser;
  211. next_section;
  212. end;
  213. 30 : begin
  214. yyval := yyv[yysp-5];
  215. end;
  216. 31 : begin
  217. end;
  218. 32 : begin
  219. copy_rest_of_file;
  220. end;
  221. 33 : begin
  222. end;
  223. 34 : begin
  224. yyerrok;
  225. end;
  226. 35 : begin
  227. error(error_in_def);
  228. end;
  229. 36 : begin
  230. startnt := ntsym(yyv[yysp-0]);
  231. end;
  232. 37 : begin
  233. error(ident_expected);
  234. end;
  235. 38 : begin
  236. copy_code;
  237. end;
  238. 39 : begin
  239. yyval := yyv[yysp-2];
  240. end;
  241. 40 : begin
  242. act_prec := 0;
  243. end;
  244. 41 : begin
  245. yyval := yyv[yysp-3];
  246. end;
  247. 42 : begin
  248. act_prec := new_prec_level(left);
  249. end;
  250. 43 : begin
  251. yyval := yyv[yysp-3];
  252. end;
  253. 44 : begin
  254. act_prec := new_prec_level(right);
  255. end;
  256. 45 : begin
  257. yyval := yyv[yysp-3];
  258. end;
  259. 46 : begin
  260. act_prec := new_prec_level(nonassoc);
  261. end;
  262. 47 : begin
  263. yyval := yyv[yysp-3];
  264. end;
  265. 48 : begin
  266. yyval := yyv[yysp-2];
  267. end;
  268. 49 : begin
  269. yyval := yyv[yysp-1];
  270. end;
  271. 50 : begin
  272. act_type := 0;
  273. end;
  274. 51 : begin
  275. act_type := yyv[yysp-1]; add_type(yyv[yysp-1]);
  276. end;
  277. 52 : begin
  278. yyval := yyv[yysp-0];
  279. end;
  280. 53 : begin
  281. yyerrok;
  282. end;
  283. 54 : begin
  284. yyerrok;
  285. end;
  286. 55 : begin
  287. error(ident_expected);
  288. end;
  289. 56 : begin
  290. error(error_in_def);
  291. end;
  292. 57 : begin
  293. error(ident_expected);
  294. end;
  295. 58 : begin
  296. if act_type<>0 then
  297. sym_type^[yyv[yysp-0]] := act_type;
  298. if act_prec<>0 then
  299. sym_prec^[yyv[yysp-0]] := act_prec;
  300. end;
  301. 59 : begin
  302. litsym(yyv[yysp-0], 0);
  303. if act_type<>0 then
  304. sym_type^[litsym(yyv[yysp-0], 0)] := act_type;
  305. if act_prec<>0 then
  306. sym_prec^[litsym(yyv[yysp-0], 0)] := act_prec;
  307. end;
  308. 60 : begin
  309. litsym(yyv[yysp-0], 0);
  310. if act_type<>0 then
  311. sym_type^[litsym(yyv[yysp-0], 0)] := act_type;
  312. if act_prec<>0 then
  313. sym_prec^[litsym(yyv[yysp-0], 0)] := act_prec;
  314. end;
  315. 61 : begin
  316. litsym(yyv[yysp-1], 0);
  317. if act_type<>0 then
  318. sym_type^[litsym(yyv[yysp-1], yyv[yysp-0])] := act_type;
  319. if act_prec<>0 then
  320. sym_prec^[litsym(yyv[yysp-1], 0)] := act_prec;
  321. end;
  322. 62 : begin
  323. litsym(yyv[yysp-1], 0);
  324. if act_type<>0 then
  325. sym_type^[litsym(yyv[yysp-1], yyv[yysp-0])] := act_type;
  326. if act_prec<>0 then
  327. sym_prec^[litsym(yyv[yysp-1], 0)] := act_prec;
  328. end;
  329. 63 : begin
  330. yyval := yyv[yysp-0];
  331. end;
  332. 64 : begin
  333. yyerrok;
  334. end;
  335. 65 : begin
  336. yyerrok;
  337. end;
  338. 66 : begin
  339. error(ident_expected);
  340. end;
  341. 67 : begin
  342. error(error_in_def);
  343. end;
  344. 68 : begin
  345. error(ident_expected);
  346. end;
  347. 69 : begin
  348. if act_type<>0 then
  349. sym_type^[ntsym(yyv[yysp-0])] := act_type;
  350. end;
  351. 70 : begin
  352. next_section;
  353. end;
  354. 71 : begin
  355. yyval := yyv[yysp-1];
  356. end;
  357. 72 : begin
  358. copy_code;
  359. end;
  360. 73 : begin
  361. next_section;
  362. end;
  363. 74 : begin
  364. yyval := yyv[yysp-4];
  365. end;
  366. 75 : begin
  367. yyerrok;
  368. end;
  369. 76 : begin
  370. error(error_in_rule);
  371. end;
  372. 77 : begin
  373. error(error_in_rule);
  374. end;
  375. 78 : begin
  376. start_rule(ntsym(yyv[yysp-0]));
  377. end;
  378. 79 : begin
  379. start_body;
  380. end;
  381. 80 : begin
  382. end_body;
  383. end;
  384. 81 : begin
  385. yyval := yyv[yysp-0];
  386. end;
  387. 82 : begin
  388. start_body;
  389. end;
  390. 83 : begin
  391. end_body;
  392. end;
  393. 84 : begin
  394. end;
  395. 85 : begin
  396. add_symbol(yyv[yysp-0]); yyerrok;
  397. end;
  398. 86 : begin
  399. add_symbol(sym(yyv[yysp-0])); yyerrok;
  400. end;
  401. 87 : begin
  402. add_symbol(sym(yyv[yysp-0])); yyerrok;
  403. end;
  404. 88 : begin
  405. add_action; yyerrok;
  406. end;
  407. 89 : begin
  408. error(error_in_rule);
  409. end;
  410. 90 : begin
  411. copy_action;
  412. end;
  413. 91 : begin
  414. yyval := yyv[yysp-2];
  415. end;
  416. 92 : begin
  417. copy_single_action;
  418. end;
  419. 93 : begin
  420. end;
  421. 94 : begin
  422. add_rule_prec(yyv[yysp-0]);
  423. end;
  424. 95 : begin
  425. yyval := yyv[yysp-3];
  426. end;
  427. 96 : begin
  428. add_rule_prec(litsym(yyv[yysp-0], 0));
  429. end;
  430. 97 : begin
  431. yyval := yyv[yysp-3];
  432. end;
  433. 98 : begin
  434. add_rule_prec(litsym(yyv[yysp-0], 0));
  435. end;
  436. 99 : begin
  437. yyval := yyv[yysp-3];
  438. end;
  439. 100 : begin
  440. yyval := yyv[yysp-1];
  441. end;
  442. 101 : begin
  443. end;
  444. 102 : begin
  445. add_action;
  446. end;
  447. end;
  448. end(*yyaction*);
  449. (* parse table: *)
  450. type YYARec = record
  451. sym, act : Integer;
  452. end;
  453. YYRRec = record
  454. len, sym : Integer;
  455. end;
  456. const
  457. yynacts = 251;
  458. yyngotos = 146;
  459. yynstates = 128;
  460. yynrules = 102;
  461. yya : array [1..yynacts] of YYARec = (
  462. { 0: }
  463. { 1: }
  464. ( sym: 256; act: 12 ),
  465. ( sym: 262; act: 13 ),
  466. ( sym: 263; act: 14 ),
  467. ( sym: 264; act: 15 ),
  468. ( sym: 265; act: 16 ),
  469. ( sym: 266; act: 17 ),
  470. ( sym: 267; act: 18 ),
  471. ( sym: 269; act: 19 ),
  472. ( sym: 270; act: 20 ),
  473. { 2: }
  474. ( sym: 0; act: 0 ),
  475. { 3: }
  476. { 4: }
  477. { 5: }
  478. { 6: }
  479. ( sym: 256; act: 24 ),
  480. ( sym: 257; act: 25 ),
  481. { 7: }
  482. ( sym: 60; act: 28 ),
  483. ( sym: 256; act: -50 ),
  484. ( sym: 257; act: -50 ),
  485. ( sym: 262; act: -50 ),
  486. ( sym: 263; act: -50 ),
  487. ( sym: 264; act: -50 ),
  488. ( sym: 265; act: -50 ),
  489. ( sym: 266; act: -50 ),
  490. ( sym: 267; act: -50 ),
  491. ( sym: 269; act: -50 ),
  492. ( sym: 270; act: -50 ),
  493. { 8: }
  494. { 9: }
  495. { 10: }
  496. { 11: }
  497. { 12: }
  498. { 13: }
  499. { 14: }
  500. { 15: }
  501. { 16: }
  502. { 17: }
  503. { 18: }
  504. { 19: }
  505. { 20: }
  506. { 21: }
  507. ( sym: 256; act: 34 ),
  508. ( sym: 271; act: 35 ),
  509. { 22: }
  510. ( sym: 256; act: 39 ),
  511. ( sym: 270; act: 20 ),
  512. ( sym: 258; act: -70 ),
  513. { 23: }
  514. { 24: }
  515. { 25: }
  516. { 26: }
  517. ( sym: 256; act: 43 ),
  518. ( sym: 257; act: 25 ),
  519. ( sym: 262; act: -49 ),
  520. ( sym: 263; act: -49 ),
  521. ( sym: 264; act: -49 ),
  522. ( sym: 265; act: -49 ),
  523. ( sym: 266; act: -49 ),
  524. ( sym: 267; act: -49 ),
  525. ( sym: 269; act: -49 ),
  526. ( sym: 270; act: -49 ),
  527. { 27: }
  528. ( sym: 257; act: 25 ),
  529. { 28: }
  530. { 29: }
  531. ( sym: 60; act: 28 ),
  532. ( sym: 256; act: -50 ),
  533. ( sym: 257; act: -50 ),
  534. ( sym: 259; act: -50 ),
  535. ( sym: 260; act: -50 ),
  536. { 30: }
  537. ( sym: 60; act: 28 ),
  538. ( sym: 256; act: -50 ),
  539. ( sym: 257; act: -50 ),
  540. ( sym: 259; act: -50 ),
  541. ( sym: 260; act: -50 ),
  542. { 31: }
  543. ( sym: 60; act: 28 ),
  544. ( sym: 256; act: -50 ),
  545. ( sym: 257; act: -50 ),
  546. ( sym: 259; act: -50 ),
  547. ( sym: 260; act: -50 ),
  548. { 32: }
  549. ( sym: 60; act: 28 ),
  550. ( sym: 256; act: -50 ),
  551. ( sym: 257; act: -50 ),
  552. ( sym: 259; act: -50 ),
  553. ( sym: 260; act: -50 ),
  554. { 33: }
  555. { 34: }
  556. { 35: }
  557. { 36: }
  558. ( sym: 258; act: 51 ),
  559. { 37: }
  560. ( sym: 124; act: 56 ),
  561. ( sym: 256; act: 57 ),
  562. ( sym: 258; act: 51 ),
  563. ( sym: 0; act: -29 ),
  564. ( sym: 269; act: -29 ),
  565. { 38: }
  566. { 39: }
  567. { 40: }
  568. { 41: }
  569. ( sym: 44; act: 61 ),
  570. ( sym: 256; act: 62 ),
  571. ( sym: 257; act: 25 ),
  572. ( sym: 262; act: -48 ),
  573. ( sym: 263; act: -48 ),
  574. ( sym: 264; act: -48 ),
  575. ( sym: 265; act: -48 ),
  576. ( sym: 266; act: -48 ),
  577. ( sym: 267; act: -48 ),
  578. ( sym: 269; act: -48 ),
  579. ( sym: 270; act: -48 ),
  580. { 42: }
  581. { 43: }
  582. { 44: }
  583. ( sym: 62; act: 64 ),
  584. ( sym: 256; act: 65 ),
  585. { 45: }
  586. ( sym: 256; act: 71 ),
  587. ( sym: 257; act: 25 ),
  588. ( sym: 259; act: 72 ),
  589. ( sym: 260; act: 73 ),
  590. { 46: }
  591. ( sym: 256; act: 71 ),
  592. ( sym: 257; act: 25 ),
  593. ( sym: 259; act: 72 ),
  594. ( sym: 260; act: 73 ),
  595. { 47: }
  596. ( sym: 256; act: 71 ),
  597. ( sym: 257; act: 25 ),
  598. ( sym: 259; act: 72 ),
  599. ( sym: 260; act: 73 ),
  600. { 48: }
  601. ( sym: 256; act: 71 ),
  602. ( sym: 257; act: 25 ),
  603. ( sym: 259; act: 72 ),
  604. ( sym: 260; act: 73 ),
  605. { 49: }
  606. { 50: }
  607. { 51: }
  608. { 52: }
  609. { 53: }
  610. { 54: }
  611. ( sym: 269; act: 19 ),
  612. ( sym: 0; act: -31 ),
  613. { 55: }
  614. { 56: }
  615. { 57: }
  616. { 58: }
  617. ( sym: 256; act: 34 ),
  618. ( sym: 271; act: 35 ),
  619. { 59: }
  620. { 60: }
  621. ( sym: 256; act: 83 ),
  622. ( sym: 257; act: 25 ),
  623. { 61: }
  624. { 62: }
  625. { 63: }
  626. { 64: }
  627. { 65: }
  628. { 66: }
  629. { 67: }
  630. ( sym: 44; act: 61 ),
  631. ( sym: 256; act: 86 ),
  632. ( sym: 257; act: 25 ),
  633. ( sym: 259; act: 72 ),
  634. ( sym: 260; act: 73 ),
  635. ( sym: 262; act: -47 ),
  636. ( sym: 263; act: -47 ),
  637. ( sym: 264; act: -47 ),
  638. ( sym: 265; act: -47 ),
  639. ( sym: 266; act: -47 ),
  640. ( sym: 267; act: -47 ),
  641. ( sym: 269; act: -47 ),
  642. ( sym: 270; act: -47 ),
  643. { 68: }
  644. ( sym: 261; act: 88 ),
  645. ( sym: 44; act: -59 ),
  646. ( sym: 256; act: -59 ),
  647. ( sym: 257; act: -59 ),
  648. ( sym: 259; act: -59 ),
  649. ( sym: 260; act: -59 ),
  650. ( sym: 262; act: -59 ),
  651. ( sym: 263; act: -59 ),
  652. ( sym: 264; act: -59 ),
  653. ( sym: 265; act: -59 ),
  654. ( sym: 266; act: -59 ),
  655. ( sym: 267; act: -59 ),
  656. ( sym: 269; act: -59 ),
  657. ( sym: 270; act: -59 ),
  658. { 69: }
  659. { 70: }
  660. ( sym: 261; act: 88 ),
  661. ( sym: 44; act: -60 ),
  662. ( sym: 256; act: -60 ),
  663. ( sym: 257; act: -60 ),
  664. ( sym: 259; act: -60 ),
  665. ( sym: 260; act: -60 ),
  666. ( sym: 262; act: -60 ),
  667. ( sym: 263; act: -60 ),
  668. ( sym: 264; act: -60 ),
  669. ( sym: 265; act: -60 ),
  670. ( sym: 266; act: -60 ),
  671. ( sym: 267; act: -60 ),
  672. ( sym: 269; act: -60 ),
  673. ( sym: 270; act: -60 ),
  674. { 71: }
  675. { 72: }
  676. { 73: }
  677. { 74: }
  678. ( sym: 44; act: 61 ),
  679. ( sym: 256; act: 86 ),
  680. ( sym: 257; act: 25 ),
  681. ( sym: 259; act: 72 ),
  682. ( sym: 260; act: 73 ),
  683. ( sym: 262; act: -45 ),
  684. ( sym: 263; act: -45 ),
  685. ( sym: 264; act: -45 ),
  686. ( sym: 265; act: -45 ),
  687. ( sym: 266; act: -45 ),
  688. ( sym: 267; act: -45 ),
  689. ( sym: 269; act: -45 ),
  690. ( sym: 270; act: -45 ),
  691. { 75: }
  692. ( sym: 44; act: 61 ),
  693. ( sym: 256; act: 86 ),
  694. ( sym: 257; act: 25 ),
  695. ( sym: 259; act: 72 ),
  696. ( sym: 260; act: 73 ),
  697. ( sym: 262; act: -43 ),
  698. ( sym: 263; act: -43 ),
  699. ( sym: 264; act: -43 ),
  700. ( sym: 265; act: -43 ),
  701. ( sym: 266; act: -43 ),
  702. ( sym: 267; act: -43 ),
  703. ( sym: 269; act: -43 ),
  704. ( sym: 270; act: -43 ),
  705. { 76: }
  706. ( sym: 44; act: 61 ),
  707. ( sym: 256; act: 86 ),
  708. ( sym: 257; act: 25 ),
  709. ( sym: 259; act: 72 ),
  710. ( sym: 260; act: 73 ),
  711. ( sym: 262; act: -41 ),
  712. ( sym: 263; act: -41 ),
  713. ( sym: 264; act: -41 ),
  714. ( sym: 265; act: -41 ),
  715. ( sym: 266; act: -41 ),
  716. ( sym: 267; act: -41 ),
  717. ( sym: 269; act: -41 ),
  718. ( sym: 270; act: -41 ),
  719. { 77: }
  720. ( sym: 58; act: 91 ),
  721. { 78: }
  722. { 79: }
  723. { 80: }
  724. { 81: }
  725. { 82: }
  726. { 83: }
  727. { 84: }
  728. { 85: }
  729. ( sym: 256; act: 95 ),
  730. ( sym: 257; act: 25 ),
  731. ( sym: 259; act: 72 ),
  732. ( sym: 260; act: 73 ),
  733. { 86: }
  734. { 87: }
  735. { 88: }
  736. { 89: }
  737. { 90: }
  738. { 91: }
  739. { 92: }
  740. ( sym: 61; act: 105 ),
  741. ( sym: 123; act: 106 ),
  742. ( sym: 256; act: 107 ),
  743. ( sym: 257; act: 25 ),
  744. ( sym: 259; act: 72 ),
  745. ( sym: 260; act: 73 ),
  746. ( sym: 268; act: 108 ),
  747. ( sym: 0; act: -93 ),
  748. ( sym: 59; act: -93 ),
  749. ( sym: 124; act: -93 ),
  750. ( sym: 258; act: -93 ),
  751. ( sym: 269; act: -93 ),
  752. { 93: }
  753. ( sym: 258; act: 51 ),
  754. { 94: }
  755. { 95: }
  756. { 96: }
  757. { 97: }
  758. { 98: }
  759. ( sym: 59; act: 112 ),
  760. ( sym: 0; act: -83 ),
  761. ( sym: 124; act: -83 ),
  762. ( sym: 256; act: -83 ),
  763. ( sym: 258; act: -83 ),
  764. ( sym: 269; act: -83 ),
  765. { 99: }
  766. { 100: }
  767. { 101: }
  768. ( sym: 257; act: 25 ),
  769. ( sym: 259; act: 72 ),
  770. ( sym: 260; act: 73 ),
  771. { 102: }
  772. { 103: }
  773. { 104: }
  774. { 105: }
  775. { 106: }
  776. { 107: }
  777. { 108: }
  778. { 109: }
  779. { 110: }
  780. ( sym: 61; act: 105 ),
  781. ( sym: 123; act: 106 ),
  782. ( sym: 256; act: 107 ),
  783. ( sym: 257; act: 25 ),
  784. ( sym: 259; act: 72 ),
  785. ( sym: 260; act: 73 ),
  786. ( sym: 268; act: 108 ),
  787. ( sym: 0; act: -93 ),
  788. ( sym: 59; act: -93 ),
  789. ( sym: 124; act: -93 ),
  790. ( sym: 258; act: -93 ),
  791. ( sym: 269; act: -93 ),
  792. { 111: }
  793. { 112: }
  794. { 113: }
  795. ( sym: 125; act: 119 ),
  796. ( sym: 256; act: 120 ),
  797. { 114: }
  798. { 115: }
  799. { 116: }
  800. { 117: }
  801. ( sym: 59; act: 112 ),
  802. ( sym: 0; act: -80 ),
  803. ( sym: 124; act: -80 ),
  804. ( sym: 256; act: -80 ),
  805. ( sym: 258; act: -80 ),
  806. ( sym: 269; act: -80 ),
  807. { 118: }
  808. { 119: }
  809. { 120: }
  810. { 121: }
  811. ( sym: 61; act: 105 ),
  812. ( sym: 123; act: 106 ),
  813. ( sym: 0; act: -101 ),
  814. ( sym: 59; act: -101 ),
  815. ( sym: 124; act: -101 ),
  816. ( sym: 256; act: -101 ),
  817. ( sym: 258; act: -101 ),
  818. ( sym: 269; act: -101 ),
  819. { 122: }
  820. ( sym: 61; act: 105 ),
  821. ( sym: 123; act: 106 ),
  822. ( sym: 0; act: -101 ),
  823. ( sym: 59; act: -101 ),
  824. ( sym: 124; act: -101 ),
  825. ( sym: 256; act: -101 ),
  826. ( sym: 258; act: -101 ),
  827. ( sym: 269; act: -101 ),
  828. { 123: }
  829. ( sym: 61; act: 105 ),
  830. ( sym: 123; act: 106 ),
  831. ( sym: 0; act: -101 ),
  832. ( sym: 59; act: -101 ),
  833. ( sym: 124; act: -101 ),
  834. ( sym: 256; act: -101 ),
  835. ( sym: 258; act: -101 ),
  836. ( sym: 269; act: -101 )
  837. { 124: }
  838. { 125: }
  839. { 126: }
  840. { 127: }
  841. );
  842. yyg : array [1..yyngotos] of YYARec = (
  843. { 0: }
  844. ( sym: -27; act: 1 ),
  845. ( sym: -2; act: 2 ),
  846. { 1: }
  847. ( sym: -32; act: 3 ),
  848. ( sym: -16; act: 4 ),
  849. ( sym: -15; act: 5 ),
  850. ( sym: -13; act: 6 ),
  851. ( sym: -12; act: 7 ),
  852. ( sym: -11; act: 8 ),
  853. ( sym: -10; act: 9 ),
  854. ( sym: -9; act: 10 ),
  855. ( sym: -8; act: 11 ),
  856. { 2: }
  857. { 3: }
  858. { 4: }
  859. ( sym: -33; act: 21 ),
  860. { 5: }
  861. ( sym: -29; act: 22 ),
  862. { 6: }
  863. ( sym: -3; act: 23 ),
  864. { 7: }
  865. ( sym: -34; act: 26 ),
  866. ( sym: -24; act: 27 ),
  867. { 8: }
  868. ( sym: -39; act: 29 ),
  869. { 9: }
  870. ( sym: -38; act: 30 ),
  871. { 10: }
  872. ( sym: -37; act: 31 ),
  873. { 11: }
  874. ( sym: -35; act: 32 ),
  875. { 12: }
  876. { 13: }
  877. { 14: }
  878. { 15: }
  879. { 16: }
  880. { 17: }
  881. { 18: }
  882. { 19: }
  883. { 20: }
  884. { 21: }
  885. ( sym: -17; act: 33 ),
  886. { 22: }
  887. ( sym: -44; act: 36 ),
  888. ( sym: -28; act: 37 ),
  889. ( sym: -16; act: 38 ),
  890. { 23: }
  891. { 24: }
  892. { 25: }
  893. { 26: }
  894. ( sym: -42; act: 40 ),
  895. ( sym: -40; act: 41 ),
  896. ( sym: -3; act: 42 ),
  897. { 27: }
  898. ( sym: -3; act: 44 ),
  899. { 28: }
  900. { 29: }
  901. ( sym: -34; act: 45 ),
  902. ( sym: -24; act: 27 ),
  903. { 30: }
  904. ( sym: -34; act: 46 ),
  905. ( sym: -24; act: 27 ),
  906. { 31: }
  907. ( sym: -34; act: 47 ),
  908. ( sym: -24; act: 27 ),
  909. { 32: }
  910. ( sym: -34; act: 48 ),
  911. ( sym: -24; act: 27 ),
  912. { 33: }
  913. { 34: }
  914. { 35: }
  915. { 36: }
  916. ( sym: -43; act: 49 ),
  917. ( sym: -4; act: 50 ),
  918. { 37: }
  919. ( sym: -47; act: 52 ),
  920. ( sym: -43; act: 53 ),
  921. ( sym: -31; act: 54 ),
  922. ( sym: -21; act: 55 ),
  923. ( sym: -4; act: 50 ),
  924. { 38: }
  925. ( sym: -45; act: 58 ),
  926. { 39: }
  927. { 40: }
  928. { 41: }
  929. ( sym: -42; act: 59 ),
  930. ( sym: -18; act: 60 ),
  931. ( sym: -3; act: 42 ),
  932. { 42: }
  933. { 43: }
  934. { 44: }
  935. ( sym: -25; act: 63 ),
  936. { 45: }
  937. ( sym: -41; act: 66 ),
  938. ( sym: -36; act: 67 ),
  939. ( sym: -6; act: 68 ),
  940. ( sym: -5; act: 69 ),
  941. ( sym: -3; act: 70 ),
  942. { 46: }
  943. ( sym: -41; act: 66 ),
  944. ( sym: -36; act: 74 ),
  945. ( sym: -6; act: 68 ),
  946. ( sym: -5; act: 69 ),
  947. ( sym: -3; act: 70 ),
  948. { 47: }
  949. ( sym: -41; act: 66 ),
  950. ( sym: -36; act: 75 ),
  951. ( sym: -6; act: 68 ),
  952. ( sym: -5; act: 69 ),
  953. ( sym: -3; act: 70 ),
  954. { 48: }
  955. ( sym: -41; act: 66 ),
  956. ( sym: -36; act: 76 ),
  957. ( sym: -6; act: 68 ),
  958. ( sym: -5; act: 69 ),
  959. ( sym: -3; act: 70 ),
  960. { 49: }
  961. { 50: }
  962. ( sym: -48; act: 77 ),
  963. { 51: }
  964. { 52: }
  965. { 53: }
  966. { 54: }
  967. ( sym: -30; act: 78 ),
  968. ( sym: -15; act: 79 ),
  969. { 55: }
  970. ( sym: -52; act: 80 ),
  971. { 56: }
  972. { 57: }
  973. { 58: }
  974. ( sym: -17; act: 81 ),
  975. { 59: }
  976. { 60: }
  977. ( sym: -42; act: 82 ),
  978. ( sym: -3; act: 42 ),
  979. { 61: }
  980. { 62: }
  981. { 63: }
  982. { 64: }
  983. { 65: }
  984. { 66: }
  985. { 67: }
  986. ( sym: -41; act: 84 ),
  987. ( sym: -18; act: 85 ),
  988. ( sym: -6; act: 68 ),
  989. ( sym: -5; act: 69 ),
  990. ( sym: -3; act: 70 ),
  991. { 68: }
  992. ( sym: -7; act: 87 ),
  993. { 69: }
  994. { 70: }
  995. ( sym: -7; act: 89 ),
  996. { 71: }
  997. { 72: }
  998. { 73: }
  999. { 74: }
  1000. ( sym: -41; act: 84 ),
  1001. ( sym: -18; act: 85 ),
  1002. ( sym: -6; act: 68 ),
  1003. ( sym: -5; act: 69 ),
  1004. ( sym: -3; act: 70 ),
  1005. { 75: }
  1006. ( sym: -41; act: 84 ),
  1007. ( sym: -18; act: 85 ),
  1008. ( sym: -6; act: 68 ),
  1009. ( sym: -5; act: 69 ),
  1010. ( sym: -3; act: 70 ),
  1011. { 76: }
  1012. ( sym: -41; act: 84 ),
  1013. ( sym: -18; act: 85 ),
  1014. ( sym: -6; act: 68 ),
  1015. ( sym: -5; act: 69 ),
  1016. ( sym: -3; act: 70 ),
  1017. { 77: }
  1018. ( sym: -19; act: 90 ),
  1019. { 78: }
  1020. { 79: }
  1021. { 80: }
  1022. ( sym: -49; act: 92 ),
  1023. { 81: }
  1024. ( sym: -46; act: 93 ),
  1025. { 82: }
  1026. { 83: }
  1027. { 84: }
  1028. { 85: }
  1029. ( sym: -41; act: 94 ),
  1030. ( sym: -6; act: 68 ),
  1031. ( sym: -5; act: 69 ),
  1032. ( sym: -3; act: 70 ),
  1033. { 86: }
  1034. { 87: }
  1035. { 88: }
  1036. { 89: }
  1037. { 90: }
  1038. ( sym: -50; act: 96 ),
  1039. { 91: }
  1040. { 92: }
  1041. ( sym: -53; act: 97 ),
  1042. ( sym: -51; act: 98 ),
  1043. ( sym: -26; act: 99 ),
  1044. ( sym: -22; act: 100 ),
  1045. ( sym: -14; act: 101 ),
  1046. ( sym: -6; act: 102 ),
  1047. ( sym: -5; act: 103 ),
  1048. ( sym: -3; act: 104 ),
  1049. { 93: }
  1050. ( sym: -43; act: 109 ),
  1051. ( sym: -4; act: 50 ),
  1052. { 94: }
  1053. { 95: }
  1054. { 96: }
  1055. ( sym: -49; act: 110 ),
  1056. { 97: }
  1057. { 98: }
  1058. ( sym: -20; act: 111 ),
  1059. { 99: }
  1060. { 100: }
  1061. ( sym: -54; act: 113 ),
  1062. { 101: }
  1063. ( sym: -6; act: 114 ),
  1064. ( sym: -5; act: 115 ),
  1065. ( sym: -3; act: 116 ),
  1066. { 102: }
  1067. { 103: }
  1068. { 104: }
  1069. { 105: }
  1070. { 106: }
  1071. { 107: }
  1072. { 108: }
  1073. { 109: }
  1074. { 110: }
  1075. ( sym: -53; act: 97 ),
  1076. ( sym: -51; act: 117 ),
  1077. ( sym: -26; act: 99 ),
  1078. ( sym: -22; act: 100 ),
  1079. ( sym: -14; act: 101 ),
  1080. ( sym: -6; act: 102 ),
  1081. ( sym: -5; act: 103 ),
  1082. ( sym: -3; act: 104 ),
  1083. { 111: }
  1084. { 112: }
  1085. { 113: }
  1086. ( sym: -23; act: 118 ),
  1087. { 114: }
  1088. ( sym: -57; act: 121 ),
  1089. { 115: }
  1090. ( sym: -56; act: 122 ),
  1091. { 116: }
  1092. ( sym: -58; act: 123 ),
  1093. { 117: }
  1094. ( sym: -20; act: 111 ),
  1095. { 118: }
  1096. { 119: }
  1097. { 120: }
  1098. { 121: }
  1099. ( sym: -55; act: 124 ),
  1100. ( sym: -53; act: 125 ),
  1101. ( sym: -26; act: 99 ),
  1102. ( sym: -22; act: 100 ),
  1103. { 122: }
  1104. ( sym: -55; act: 126 ),
  1105. ( sym: -53; act: 125 ),
  1106. ( sym: -26; act: 99 ),
  1107. ( sym: -22; act: 100 ),
  1108. { 123: }
  1109. ( sym: -55; act: 127 ),
  1110. ( sym: -53; act: 125 ),
  1111. ( sym: -26; act: 99 ),
  1112. ( sym: -22; act: 100 )
  1113. { 124: }
  1114. { 125: }
  1115. { 126: }
  1116. { 127: }
  1117. );
  1118. yyd : array [0..yynstates-1] of Integer = (
  1119. { 0: } -33,
  1120. { 1: } 0,
  1121. { 2: } 0,
  1122. { 3: } -34,
  1123. { 4: } -38,
  1124. { 5: } -28,
  1125. { 6: } 0,
  1126. { 7: } 0,
  1127. { 8: } -46,
  1128. { 9: } -44,
  1129. { 10: } -42,
  1130. { 11: } -40,
  1131. { 12: } -35,
  1132. { 13: } -6,
  1133. { 14: } -7,
  1134. { 15: } -8,
  1135. { 16: } -9,
  1136. { 17: } -10,
  1137. { 18: } -11,
  1138. { 19: } -13,
  1139. { 20: } -14,
  1140. { 21: } 0,
  1141. { 22: } 0,
  1142. { 23: } -36,
  1143. { 24: } -37,
  1144. { 25: } -1,
  1145. { 26: } 0,
  1146. { 27: } 0,
  1147. { 28: } -24,
  1148. { 29: } 0,
  1149. { 30: } 0,
  1150. { 31: } 0,
  1151. { 32: } 0,
  1152. { 33: } -39,
  1153. { 34: } -16,
  1154. { 35: } -15,
  1155. { 36: } 0,
  1156. { 37: } 0,
  1157. { 38: } -72,
  1158. { 39: } -76,
  1159. { 40: } -63,
  1160. { 41: } 0,
  1161. { 42: } -69,
  1162. { 43: } -66,
  1163. { 44: } 0,
  1164. { 45: } 0,
  1165. { 46: } 0,
  1166. { 47: } 0,
  1167. { 48: } 0,
  1168. { 49: } -71,
  1169. { 50: } -78,
  1170. { 51: } -2,
  1171. { 52: } -75,
  1172. { 53: } -81,
  1173. { 54: } 0,
  1174. { 55: } -82,
  1175. { 56: } -20,
  1176. { 57: } -77,
  1177. { 58: } 0,
  1178. { 59: } -64,
  1179. { 60: } 0,
  1180. { 61: } -17,
  1181. { 62: } -67,
  1182. { 63: } -51,
  1183. { 64: } -25,
  1184. { 65: } -26,
  1185. { 66: } -52,
  1186. { 67: } 0,
  1187. { 68: } 0,
  1188. { 69: } -58,
  1189. { 70: } 0,
  1190. { 71: } -55,
  1191. { 72: } -3,
  1192. { 73: } -4,
  1193. { 74: } 0,
  1194. { 75: } 0,
  1195. { 76: } 0,
  1196. { 77: } 0,
  1197. { 78: } -30,
  1198. { 79: } -32,
  1199. { 80: } -84,
  1200. { 81: } -73,
  1201. { 82: } -65,
  1202. { 83: } -68,
  1203. { 84: } -53,
  1204. { 85: } 0,
  1205. { 86: } -56,
  1206. { 87: } -61,
  1207. { 88: } -5,
  1208. { 89: } -62,
  1209. { 90: } -79,
  1210. { 91: } -18,
  1211. { 92: } 0,
  1212. { 93: } 0,
  1213. { 94: } -54,
  1214. { 95: } -57,
  1215. { 96: } -84,
  1216. { 97: } -88,
  1217. { 98: } 0,
  1218. { 99: } -92,
  1219. { 100: } -90,
  1220. { 101: } 0,
  1221. { 102: } -86,
  1222. { 103: } -85,
  1223. { 104: } -87,
  1224. { 105: } -27,
  1225. { 106: } -21,
  1226. { 107: } -89,
  1227. { 108: } -12,
  1228. { 109: } -74,
  1229. { 110: } 0,
  1230. { 111: } -100,
  1231. { 112: } -19,
  1232. { 113: } 0,
  1233. { 114: } -96,
  1234. { 115: } -94,
  1235. { 116: } -98,
  1236. { 117: } 0,
  1237. { 118: } -91,
  1238. { 119: } -22,
  1239. { 120: } -23,
  1240. { 121: } 0,
  1241. { 122: } 0,
  1242. { 123: } 0,
  1243. { 124: } -97,
  1244. { 125: } -102,
  1245. { 126: } -95,
  1246. { 127: } -99
  1247. );
  1248. yyal : array [0..yynstates-1] of Integer = (
  1249. { 0: } 1,
  1250. { 1: } 1,
  1251. { 2: } 10,
  1252. { 3: } 11,
  1253. { 4: } 11,
  1254. { 5: } 11,
  1255. { 6: } 11,
  1256. { 7: } 13,
  1257. { 8: } 24,
  1258. { 9: } 24,
  1259. { 10: } 24,
  1260. { 11: } 24,
  1261. { 12: } 24,
  1262. { 13: } 24,
  1263. { 14: } 24,
  1264. { 15: } 24,
  1265. { 16: } 24,
  1266. { 17: } 24,
  1267. { 18: } 24,
  1268. { 19: } 24,
  1269. { 20: } 24,
  1270. { 21: } 24,
  1271. { 22: } 26,
  1272. { 23: } 29,
  1273. { 24: } 29,
  1274. { 25: } 29,
  1275. { 26: } 29,
  1276. { 27: } 39,
  1277. { 28: } 40,
  1278. { 29: } 40,
  1279. { 30: } 45,
  1280. { 31: } 50,
  1281. { 32: } 55,
  1282. { 33: } 60,
  1283. { 34: } 60,
  1284. { 35: } 60,
  1285. { 36: } 60,
  1286. { 37: } 61,
  1287. { 38: } 66,
  1288. { 39: } 66,
  1289. { 40: } 66,
  1290. { 41: } 66,
  1291. { 42: } 77,
  1292. { 43: } 77,
  1293. { 44: } 77,
  1294. { 45: } 79,
  1295. { 46: } 83,
  1296. { 47: } 87,
  1297. { 48: } 91,
  1298. { 49: } 95,
  1299. { 50: } 95,
  1300. { 51: } 95,
  1301. { 52: } 95,
  1302. { 53: } 95,
  1303. { 54: } 95,
  1304. { 55: } 97,
  1305. { 56: } 97,
  1306. { 57: } 97,
  1307. { 58: } 97,
  1308. { 59: } 99,
  1309. { 60: } 99,
  1310. { 61: } 101,
  1311. { 62: } 101,
  1312. { 63: } 101,
  1313. { 64: } 101,
  1314. { 65: } 101,
  1315. { 66: } 101,
  1316. { 67: } 101,
  1317. { 68: } 114,
  1318. { 69: } 128,
  1319. { 70: } 128,
  1320. { 71: } 142,
  1321. { 72: } 142,
  1322. { 73: } 142,
  1323. { 74: } 142,
  1324. { 75: } 155,
  1325. { 76: } 168,
  1326. { 77: } 181,
  1327. { 78: } 182,
  1328. { 79: } 182,
  1329. { 80: } 182,
  1330. { 81: } 182,
  1331. { 82: } 182,
  1332. { 83: } 182,
  1333. { 84: } 182,
  1334. { 85: } 182,
  1335. { 86: } 186,
  1336. { 87: } 186,
  1337. { 88: } 186,
  1338. { 89: } 186,
  1339. { 90: } 186,
  1340. { 91: } 186,
  1341. { 92: } 186,
  1342. { 93: } 198,
  1343. { 94: } 199,
  1344. { 95: } 199,
  1345. { 96: } 199,
  1346. { 97: } 199,
  1347. { 98: } 199,
  1348. { 99: } 205,
  1349. { 100: } 205,
  1350. { 101: } 205,
  1351. { 102: } 208,
  1352. { 103: } 208,
  1353. { 104: } 208,
  1354. { 105: } 208,
  1355. { 106: } 208,
  1356. { 107: } 208,
  1357. { 108: } 208,
  1358. { 109: } 208,
  1359. { 110: } 208,
  1360. { 111: } 220,
  1361. { 112: } 220,
  1362. { 113: } 220,
  1363. { 114: } 222,
  1364. { 115: } 222,
  1365. { 116: } 222,
  1366. { 117: } 222,
  1367. { 118: } 228,
  1368. { 119: } 228,
  1369. { 120: } 228,
  1370. { 121: } 228,
  1371. { 122: } 236,
  1372. { 123: } 244,
  1373. { 124: } 252,
  1374. { 125: } 252,
  1375. { 126: } 252,
  1376. { 127: } 252
  1377. );
  1378. yyah : array [0..yynstates-1] of Integer = (
  1379. { 0: } 0,
  1380. { 1: } 9,
  1381. { 2: } 10,
  1382. { 3: } 10,
  1383. { 4: } 10,
  1384. { 5: } 10,
  1385. { 6: } 12,
  1386. { 7: } 23,
  1387. { 8: } 23,
  1388. { 9: } 23,
  1389. { 10: } 23,
  1390. { 11: } 23,
  1391. { 12: } 23,
  1392. { 13: } 23,
  1393. { 14: } 23,
  1394. { 15: } 23,
  1395. { 16: } 23,
  1396. { 17: } 23,
  1397. { 18: } 23,
  1398. { 19: } 23,
  1399. { 20: } 23,
  1400. { 21: } 25,
  1401. { 22: } 28,
  1402. { 23: } 28,
  1403. { 24: } 28,
  1404. { 25: } 28,
  1405. { 26: } 38,
  1406. { 27: } 39,
  1407. { 28: } 39,
  1408. { 29: } 44,
  1409. { 30: } 49,
  1410. { 31: } 54,
  1411. { 32: } 59,
  1412. { 33: } 59,
  1413. { 34: } 59,
  1414. { 35: } 59,
  1415. { 36: } 60,
  1416. { 37: } 65,
  1417. { 38: } 65,
  1418. { 39: } 65,
  1419. { 40: } 65,
  1420. { 41: } 76,
  1421. { 42: } 76,
  1422. { 43: } 76,
  1423. { 44: } 78,
  1424. { 45: } 82,
  1425. { 46: } 86,
  1426. { 47: } 90,
  1427. { 48: } 94,
  1428. { 49: } 94,
  1429. { 50: } 94,
  1430. { 51: } 94,
  1431. { 52: } 94,
  1432. { 53: } 94,
  1433. { 54: } 96,
  1434. { 55: } 96,
  1435. { 56: } 96,
  1436. { 57: } 96,
  1437. { 58: } 98,
  1438. { 59: } 98,
  1439. { 60: } 100,
  1440. { 61: } 100,
  1441. { 62: } 100,
  1442. { 63: } 100,
  1443. { 64: } 100,
  1444. { 65: } 100,
  1445. { 66: } 100,
  1446. { 67: } 113,
  1447. { 68: } 127,
  1448. { 69: } 127,
  1449. { 70: } 141,
  1450. { 71: } 141,
  1451. { 72: } 141,
  1452. { 73: } 141,
  1453. { 74: } 154,
  1454. { 75: } 167,
  1455. { 76: } 180,
  1456. { 77: } 181,
  1457. { 78: } 181,
  1458. { 79: } 181,
  1459. { 80: } 181,
  1460. { 81: } 181,
  1461. { 82: } 181,
  1462. { 83: } 181,
  1463. { 84: } 181,
  1464. { 85: } 185,
  1465. { 86: } 185,
  1466. { 87: } 185,
  1467. { 88: } 185,
  1468. { 89: } 185,
  1469. { 90: } 185,
  1470. { 91: } 185,
  1471. { 92: } 197,
  1472. { 93: } 198,
  1473. { 94: } 198,
  1474. { 95: } 198,
  1475. { 96: } 198,
  1476. { 97: } 198,
  1477. { 98: } 204,
  1478. { 99: } 204,
  1479. { 100: } 204,
  1480. { 101: } 207,
  1481. { 102: } 207,
  1482. { 103: } 207,
  1483. { 104: } 207,
  1484. { 105: } 207,
  1485. { 106: } 207,
  1486. { 107: } 207,
  1487. { 108: } 207,
  1488. { 109: } 207,
  1489. { 110: } 219,
  1490. { 111: } 219,
  1491. { 112: } 219,
  1492. { 113: } 221,
  1493. { 114: } 221,
  1494. { 115: } 221,
  1495. { 116: } 221,
  1496. { 117: } 227,
  1497. { 118: } 227,
  1498. { 119: } 227,
  1499. { 120: } 227,
  1500. { 121: } 235,
  1501. { 122: } 243,
  1502. { 123: } 251,
  1503. { 124: } 251,
  1504. { 125: } 251,
  1505. { 126: } 251,
  1506. { 127: } 251
  1507. );
  1508. yygl : array [0..yynstates-1] of Integer = (
  1509. { 0: } 1,
  1510. { 1: } 3,
  1511. { 2: } 12,
  1512. { 3: } 12,
  1513. { 4: } 12,
  1514. { 5: } 13,
  1515. { 6: } 14,
  1516. { 7: } 15,
  1517. { 8: } 17,
  1518. { 9: } 18,
  1519. { 10: } 19,
  1520. { 11: } 20,
  1521. { 12: } 21,
  1522. { 13: } 21,
  1523. { 14: } 21,
  1524. { 15: } 21,
  1525. { 16: } 21,
  1526. { 17: } 21,
  1527. { 18: } 21,
  1528. { 19: } 21,
  1529. { 20: } 21,
  1530. { 21: } 21,
  1531. { 22: } 22,
  1532. { 23: } 25,
  1533. { 24: } 25,
  1534. { 25: } 25,
  1535. { 26: } 25,
  1536. { 27: } 28,
  1537. { 28: } 29,
  1538. { 29: } 29,
  1539. { 30: } 31,
  1540. { 31: } 33,
  1541. { 32: } 35,
  1542. { 33: } 37,
  1543. { 34: } 37,
  1544. { 35: } 37,
  1545. { 36: } 37,
  1546. { 37: } 39,
  1547. { 38: } 44,
  1548. { 39: } 45,
  1549. { 40: } 45,
  1550. { 41: } 45,
  1551. { 42: } 48,
  1552. { 43: } 48,
  1553. { 44: } 48,
  1554. { 45: } 49,
  1555. { 46: } 54,
  1556. { 47: } 59,
  1557. { 48: } 64,
  1558. { 49: } 69,
  1559. { 50: } 69,
  1560. { 51: } 70,
  1561. { 52: } 70,
  1562. { 53: } 70,
  1563. { 54: } 70,
  1564. { 55: } 72,
  1565. { 56: } 73,
  1566. { 57: } 73,
  1567. { 58: } 73,
  1568. { 59: } 74,
  1569. { 60: } 74,
  1570. { 61: } 76,
  1571. { 62: } 76,
  1572. { 63: } 76,
  1573. { 64: } 76,
  1574. { 65: } 76,
  1575. { 66: } 76,
  1576. { 67: } 76,
  1577. { 68: } 81,
  1578. { 69: } 82,
  1579. { 70: } 82,
  1580. { 71: } 83,
  1581. { 72: } 83,
  1582. { 73: } 83,
  1583. { 74: } 83,
  1584. { 75: } 88,
  1585. { 76: } 93,
  1586. { 77: } 98,
  1587. { 78: } 99,
  1588. { 79: } 99,
  1589. { 80: } 99,
  1590. { 81: } 100,
  1591. { 82: } 101,
  1592. { 83: } 101,
  1593. { 84: } 101,
  1594. { 85: } 101,
  1595. { 86: } 105,
  1596. { 87: } 105,
  1597. { 88: } 105,
  1598. { 89: } 105,
  1599. { 90: } 105,
  1600. { 91: } 106,
  1601. { 92: } 106,
  1602. { 93: } 114,
  1603. { 94: } 116,
  1604. { 95: } 116,
  1605. { 96: } 116,
  1606. { 97: } 117,
  1607. { 98: } 117,
  1608. { 99: } 118,
  1609. { 100: } 118,
  1610. { 101: } 119,
  1611. { 102: } 122,
  1612. { 103: } 122,
  1613. { 104: } 122,
  1614. { 105: } 122,
  1615. { 106: } 122,
  1616. { 107: } 122,
  1617. { 108: } 122,
  1618. { 109: } 122,
  1619. { 110: } 122,
  1620. { 111: } 130,
  1621. { 112: } 130,
  1622. { 113: } 130,
  1623. { 114: } 131,
  1624. { 115: } 132,
  1625. { 116: } 133,
  1626. { 117: } 134,
  1627. { 118: } 135,
  1628. { 119: } 135,
  1629. { 120: } 135,
  1630. { 121: } 135,
  1631. { 122: } 139,
  1632. { 123: } 143,
  1633. { 124: } 147,
  1634. { 125: } 147,
  1635. { 126: } 147,
  1636. { 127: } 147
  1637. );
  1638. yygh : array [0..yynstates-1] of Integer = (
  1639. { 0: } 2,
  1640. { 1: } 11,
  1641. { 2: } 11,
  1642. { 3: } 11,
  1643. { 4: } 12,
  1644. { 5: } 13,
  1645. { 6: } 14,
  1646. { 7: } 16,
  1647. { 8: } 17,
  1648. { 9: } 18,
  1649. { 10: } 19,
  1650. { 11: } 20,
  1651. { 12: } 20,
  1652. { 13: } 20,
  1653. { 14: } 20,
  1654. { 15: } 20,
  1655. { 16: } 20,
  1656. { 17: } 20,
  1657. { 18: } 20,
  1658. { 19: } 20,
  1659. { 20: } 20,
  1660. { 21: } 21,
  1661. { 22: } 24,
  1662. { 23: } 24,
  1663. { 24: } 24,
  1664. { 25: } 24,
  1665. { 26: } 27,
  1666. { 27: } 28,
  1667. { 28: } 28,
  1668. { 29: } 30,
  1669. { 30: } 32,
  1670. { 31: } 34,
  1671. { 32: } 36,
  1672. { 33: } 36,
  1673. { 34: } 36,
  1674. { 35: } 36,
  1675. { 36: } 38,
  1676. { 37: } 43,
  1677. { 38: } 44,
  1678. { 39: } 44,
  1679. { 40: } 44,
  1680. { 41: } 47,
  1681. { 42: } 47,
  1682. { 43: } 47,
  1683. { 44: } 48,
  1684. { 45: } 53,
  1685. { 46: } 58,
  1686. { 47: } 63,
  1687. { 48: } 68,
  1688. { 49: } 68,
  1689. { 50: } 69,
  1690. { 51: } 69,
  1691. { 52: } 69,
  1692. { 53: } 69,
  1693. { 54: } 71,
  1694. { 55: } 72,
  1695. { 56: } 72,
  1696. { 57: } 72,
  1697. { 58: } 73,
  1698. { 59: } 73,
  1699. { 60: } 75,
  1700. { 61: } 75,
  1701. { 62: } 75,
  1702. { 63: } 75,
  1703. { 64: } 75,
  1704. { 65: } 75,
  1705. { 66: } 75,
  1706. { 67: } 80,
  1707. { 68: } 81,
  1708. { 69: } 81,
  1709. { 70: } 82,
  1710. { 71: } 82,
  1711. { 72: } 82,
  1712. { 73: } 82,
  1713. { 74: } 87,
  1714. { 75: } 92,
  1715. { 76: } 97,
  1716. { 77: } 98,
  1717. { 78: } 98,
  1718. { 79: } 98,
  1719. { 80: } 99,
  1720. { 81: } 100,
  1721. { 82: } 100,
  1722. { 83: } 100,
  1723. { 84: } 100,
  1724. { 85: } 104,
  1725. { 86: } 104,
  1726. { 87: } 104,
  1727. { 88: } 104,
  1728. { 89: } 104,
  1729. { 90: } 105,
  1730. { 91: } 105,
  1731. { 92: } 113,
  1732. { 93: } 115,
  1733. { 94: } 115,
  1734. { 95: } 115,
  1735. { 96: } 116,
  1736. { 97: } 116,
  1737. { 98: } 117,
  1738. { 99: } 117,
  1739. { 100: } 118,
  1740. { 101: } 121,
  1741. { 102: } 121,
  1742. { 103: } 121,
  1743. { 104: } 121,
  1744. { 105: } 121,
  1745. { 106: } 121,
  1746. { 107: } 121,
  1747. { 108: } 121,
  1748. { 109: } 121,
  1749. { 110: } 129,
  1750. { 111: } 129,
  1751. { 112: } 129,
  1752. { 113: } 130,
  1753. { 114: } 131,
  1754. { 115: } 132,
  1755. { 116: } 133,
  1756. { 117: } 134,
  1757. { 118: } 134,
  1758. { 119: } 134,
  1759. { 120: } 134,
  1760. { 121: } 138,
  1761. { 122: } 142,
  1762. { 123: } 146,
  1763. { 124: } 146,
  1764. { 125: } 146,
  1765. { 126: } 146,
  1766. { 127: } 146
  1767. );
  1768. yyr : array [1..yynrules] of YYRRec = (
  1769. { 1: } ( len: 1; sym: -3 ),
  1770. { 2: } ( len: 1; sym: -4 ),
  1771. { 3: } ( len: 1; sym: -5 ),
  1772. { 4: } ( len: 1; sym: -6 ),
  1773. { 5: } ( len: 1; sym: -7 ),
  1774. { 6: } ( len: 1; sym: -8 ),
  1775. { 7: } ( len: 1; sym: -9 ),
  1776. { 8: } ( len: 1; sym: -10 ),
  1777. { 9: } ( len: 1; sym: -11 ),
  1778. { 10: } ( len: 1; sym: -12 ),
  1779. { 11: } ( len: 1; sym: -13 ),
  1780. { 12: } ( len: 1; sym: -14 ),
  1781. { 13: } ( len: 1; sym: -15 ),
  1782. { 14: } ( len: 1; sym: -16 ),
  1783. { 15: } ( len: 1; sym: -17 ),
  1784. { 16: } ( len: 1; sym: -17 ),
  1785. { 17: } ( len: 1; sym: -18 ),
  1786. { 18: } ( len: 1; sym: -19 ),
  1787. { 19: } ( len: 1; sym: -20 ),
  1788. { 20: } ( len: 1; sym: -21 ),
  1789. { 21: } ( len: 1; sym: -22 ),
  1790. { 22: } ( len: 1; sym: -23 ),
  1791. { 23: } ( len: 1; sym: -23 ),
  1792. { 24: } ( len: 1; sym: -24 ),
  1793. { 25: } ( len: 1; sym: -25 ),
  1794. { 26: } ( len: 1; sym: -25 ),
  1795. { 27: } ( len: 1; sym: -26 ),
  1796. { 28: } ( len: 0; sym: -29 ),
  1797. { 29: } ( len: 0; sym: -31 ),
  1798. { 30: } ( len: 6; sym: -2 ),
  1799. { 31: } ( len: 0; sym: -30 ),
  1800. { 32: } ( len: 1; sym: -30 ),
  1801. { 33: } ( len: 0; sym: -27 ),
  1802. { 34: } ( len: 2; sym: -27 ),
  1803. { 35: } ( len: 2; sym: -27 ),
  1804. { 36: } ( len: 2; sym: -32 ),
  1805. { 37: } ( len: 2; sym: -32 ),
  1806. { 38: } ( len: 0; sym: -33 ),
  1807. { 39: } ( len: 3; sym: -32 ),
  1808. { 40: } ( len: 0; sym: -35 ),
  1809. { 41: } ( len: 4; sym: -32 ),
  1810. { 42: } ( len: 0; sym: -37 ),
  1811. { 43: } ( len: 4; sym: -32 ),
  1812. { 44: } ( len: 0; sym: -38 ),
  1813. { 45: } ( len: 4; sym: -32 ),
  1814. { 46: } ( len: 0; sym: -39 ),
  1815. { 47: } ( len: 4; sym: -32 ),
  1816. { 48: } ( len: 3; sym: -32 ),
  1817. { 49: } ( len: 2; sym: -32 ),
  1818. { 50: } ( len: 0; sym: -34 ),
  1819. { 51: } ( len: 3; sym: -34 ),
  1820. { 52: } ( len: 1; sym: -36 ),
  1821. { 53: } ( len: 2; sym: -36 ),
  1822. { 54: } ( len: 3; sym: -36 ),
  1823. { 55: } ( len: 1; sym: -36 ),
  1824. { 56: } ( len: 2; sym: -36 ),
  1825. { 57: } ( len: 3; sym: -36 ),
  1826. { 58: } ( len: 1; sym: -41 ),
  1827. { 59: } ( len: 1; sym: -41 ),
  1828. { 60: } ( len: 1; sym: -41 ),
  1829. { 61: } ( len: 2; sym: -41 ),
  1830. { 62: } ( len: 2; sym: -41 ),
  1831. { 63: } ( len: 1; sym: -40 ),
  1832. { 64: } ( len: 2; sym: -40 ),
  1833. { 65: } ( len: 3; sym: -40 ),
  1834. { 66: } ( len: 1; sym: -40 ),
  1835. { 67: } ( len: 2; sym: -40 ),
  1836. { 68: } ( len: 3; sym: -40 ),
  1837. { 69: } ( len: 1; sym: -42 ),
  1838. { 70: } ( len: 0; sym: -44 ),
  1839. { 71: } ( len: 2; sym: -28 ),
  1840. { 72: } ( len: 0; sym: -45 ),
  1841. { 73: } ( len: 0; sym: -46 ),
  1842. { 74: } ( len: 5; sym: -28 ),
  1843. { 75: } ( len: 2; sym: -28 ),
  1844. { 76: } ( len: 1; sym: -28 ),
  1845. { 77: } ( len: 2; sym: -28 ),
  1846. { 78: } ( len: 0; sym: -48 ),
  1847. { 79: } ( len: 0; sym: -50 ),
  1848. { 80: } ( len: 6; sym: -43 ),
  1849. { 81: } ( len: 1; sym: -47 ),
  1850. { 82: } ( len: 0; sym: -52 ),
  1851. { 83: } ( len: 4; sym: -47 ),
  1852. { 84: } ( len: 0; sym: -49 ),
  1853. { 85: } ( len: 2; sym: -49 ),
  1854. { 86: } ( len: 2; sym: -49 ),
  1855. { 87: } ( len: 2; sym: -49 ),
  1856. { 88: } ( len: 2; sym: -49 ),
  1857. { 89: } ( len: 2; sym: -49 ),
  1858. { 90: } ( len: 0; sym: -54 ),
  1859. { 91: } ( len: 3; sym: -53 ),
  1860. { 92: } ( len: 1; sym: -53 ),
  1861. { 93: } ( len: 0; sym: -51 ),
  1862. { 94: } ( len: 0; sym: -56 ),
  1863. { 95: } ( len: 4; sym: -51 ),
  1864. { 96: } ( len: 0; sym: -57 ),
  1865. { 97: } ( len: 4; sym: -51 ),
  1866. { 98: } ( len: 0; sym: -58 ),
  1867. { 99: } ( len: 4; sym: -51 ),
  1868. { 100: } ( len: 2; sym: -51 ),
  1869. { 101: } ( len: 0; sym: -55 ),
  1870. { 102: } ( len: 1; sym: -55 )
  1871. );
  1872. const _error = 256; (* error token *)
  1873. function yyact(state, sym : Integer; var act : Integer) : Boolean;
  1874. (* search action table *)
  1875. var k : Integer;
  1876. begin
  1877. k := yyal[state];
  1878. while (k<=yyah[state]) and (yya[k].sym<>sym) do inc(k);
  1879. if k>yyah[state] then
  1880. yyact := false
  1881. else
  1882. begin
  1883. act := yya[k].act;
  1884. yyact := true;
  1885. end;
  1886. end(*yyact*);
  1887. function yygoto(state, sym : Integer; var nstate : Integer) : Boolean;
  1888. (* search goto table *)
  1889. var k : Integer;
  1890. begin
  1891. k := yygl[state];
  1892. while (k<=yygh[state]) and (yyg[k].sym<>sym) do inc(k);
  1893. if k>yygh[state] then
  1894. yygoto := false
  1895. else
  1896. begin
  1897. nstate := yyg[k].act;
  1898. yygoto := true;
  1899. end;
  1900. end(*yygoto*);
  1901. label parse, next, error, errlab, shift, reduce, accept, abort;
  1902. begin(*yyparse*)
  1903. (* initialize: *)
  1904. yystate := 0; yychar := -1; yynerrs := 0; yyerrflag := 0; yysp := 0;
  1905. {$ifdef yydebug}
  1906. yydebug := true;
  1907. {$else}
  1908. yydebug := false;
  1909. {$endif}
  1910. parse:
  1911. (* push state and value: *)
  1912. inc(yysp);
  1913. if yysp>yymaxdepth then
  1914. begin
  1915. yyerror('yyparse stack overflow');
  1916. goto abort;
  1917. end;
  1918. yys[yysp] := yystate; yyv[yysp] := yyval;
  1919. next:
  1920. if (yyd[yystate]=0) and (yychar=-1) then
  1921. (* get next symbol *)
  1922. begin
  1923. yychar := yylex; if yychar<0 then yychar := 0;
  1924. end;
  1925. if yydebug then writeln('state ', yystate, ', char ', yychar);
  1926. (* determine parse action: *)
  1927. yyn := yyd[yystate];
  1928. if yyn<>0 then goto reduce; (* simple state *)
  1929. (* no default action; search parse table *)
  1930. if not yyact(yystate, yychar, yyn) then goto error
  1931. else if yyn>0 then goto shift
  1932. else if yyn<0 then goto reduce
  1933. else goto accept;
  1934. error:
  1935. (* error; start error recovery: *)
  1936. if yyerrflag=0 then yyerror('syntax error');
  1937. errlab:
  1938. if yyerrflag=0 then inc(yynerrs); (* new error *)
  1939. if yyerrflag<=2 then (* incomplete recovery; try again *)
  1940. begin
  1941. yyerrflag := 3;
  1942. (* uncover a state with shift action on error token *)
  1943. while (yysp>0) and not ( yyact(yys[yysp], _error, yyn) and
  1944. (yyn>0) ) do
  1945. begin
  1946. if yydebug then
  1947. if yysp>1 then
  1948. writeln('error recovery pops state ', yys[yysp], ', uncovers ',
  1949. yys[yysp-1])
  1950. else
  1951. writeln('error recovery fails ... abort');
  1952. dec(yysp);
  1953. end;
  1954. if yysp=0 then goto abort; (* parser has fallen from stack; abort *)
  1955. yystate := yyn; (* simulate shift on error *)
  1956. goto parse;
  1957. end
  1958. else (* no shift yet; discard symbol *)
  1959. begin
  1960. if yydebug then writeln('error recovery discards char ', yychar);
  1961. if yychar=0 then goto abort; (* end of input; abort *)
  1962. yychar := -1; goto next; (* clear lookahead char and try again *)
  1963. end;
  1964. shift:
  1965. (* go to new state, clear lookahead character: *)
  1966. yystate := yyn; yychar := -1; yyval := yylval;
  1967. if yyerrflag>0 then dec(yyerrflag);
  1968. goto parse;
  1969. reduce:
  1970. (* execute action, pop rule from stack, and go to next state: *)
  1971. if yydebug then writeln('reduce ', -yyn);
  1972. yyflag := yyfnone; yyaction(-yyn);
  1973. dec(yysp, yyr[-yyn].len);
  1974. if yygoto(yys[yysp], yyr[-yyn].sym, yyn) then yystate := yyn;
  1975. (* handle action calls to yyaccept, yyabort and yyerror: *)
  1976. case yyflag of
  1977. yyfaccept : goto accept;
  1978. yyfabort : goto abort;
  1979. yyferror : goto errlab;
  1980. end;
  1981. goto parse;
  1982. accept:
  1983. yyparse := 0; exit;
  1984. abort:
  1985. yyparse := 1; exit;
  1986. end(*yyparse*);
  1987. (* Lexical analyzer (implemented in Turbo Pascal for maximum efficiency): *)
  1988. function yylex : integer;
  1989. function end_of_input : boolean;
  1990. begin
  1991. end_of_input := (cno>length(line)) and eof(yyin)
  1992. end(*end_of_input*);
  1993. procedure scan;
  1994. (* scan for nonempty character, skip comments *)
  1995. procedure scan_comment;
  1996. var p : integer;
  1997. begin
  1998. p := pos('*/', copy(line, cno, length(line)));
  1999. if p>0 then
  2000. cno := cno+succ(p)
  2001. else
  2002. begin
  2003. while (p=0) and not eof(yyin) do
  2004. begin
  2005. readln(yyin, line);
  2006. inc(lno);
  2007. p := pos('*/', line)
  2008. end;
  2009. if p=0 then
  2010. begin
  2011. cno := succ(length(line));
  2012. error(open_comment_at_eof);
  2013. end
  2014. else
  2015. cno := succ(succ(p))
  2016. end
  2017. end(*scan_comment*);
  2018. begin
  2019. while not end_of_input do
  2020. if cno<=length(line) then
  2021. case line[cno] of
  2022. ' ', tab : inc(cno);
  2023. '/' :
  2024. if (cno<length(line)) and (line[succ(cno)]='*') then
  2025. begin
  2026. inc(cno, 2);
  2027. scan_comment
  2028. end
  2029. else
  2030. exit
  2031. else
  2032. exit
  2033. end
  2034. else
  2035. begin
  2036. readln(yyin, line);
  2037. inc(lno); cno := 1;
  2038. end
  2039. end(*scan*);
  2040. function scan_ident : integer;
  2041. (* scan an identifier *)
  2042. var
  2043. idstr : String;
  2044. begin
  2045. idstr := line[cno];
  2046. inc(cno);
  2047. while (cno<=length(line)) and (
  2048. ('A'<=upCase(line[cno])) and (upCase(line[cno])<='Z') or
  2049. ('0'<=line[cno]) and (line[cno]<='9') or
  2050. (line[cno]='_') or
  2051. (line[cno]='.') ) do
  2052. begin
  2053. idstr := idstr+line[cno];
  2054. inc(cno)
  2055. end;
  2056. yylval := get_key(idstr);
  2057. scan;
  2058. if not end_of_input and (line[cno]=':') then
  2059. scan_ident := C_ID
  2060. else
  2061. scan_ident := ID
  2062. end(*scan_ident*);
  2063. function scan_literal: integer;
  2064. (* scan a literal, i.e. string *)
  2065. var
  2066. idstr : String;
  2067. oct_val : Byte;
  2068. begin
  2069. idstr := line[cno];
  2070. inc(cno);
  2071. while (cno<=length(line)) and (line[cno]<>idstr[1]) do
  2072. if line[cno]='\' then
  2073. if cno<length(line) then
  2074. begin
  2075. inc(cno);
  2076. case line[cno] of
  2077. 'n' :
  2078. begin
  2079. idstr := idstr+nl;
  2080. inc(cno)
  2081. end;
  2082. 'r' :
  2083. begin
  2084. idstr := idstr+cr;
  2085. inc(cno)
  2086. end;
  2087. 't' :
  2088. begin
  2089. idstr := idstr+tab;
  2090. inc(cno)
  2091. end;
  2092. 'b' :
  2093. begin
  2094. idstr := idstr+bs;
  2095. inc(cno)
  2096. end;
  2097. 'f' :
  2098. begin
  2099. idstr := idstr+ff;
  2100. inc(cno)
  2101. end;
  2102. '0'..'7' :
  2103. begin
  2104. oct_val := ord(line[cno])-ord('0');
  2105. inc(cno);
  2106. while (cno<=length(line)) and
  2107. ('0'<=line[cno]) and
  2108. (line[cno]<='7') do
  2109. begin
  2110. oct_val := oct_val*8+ord(line[cno])-ord('0');
  2111. inc(cno)
  2112. end;
  2113. idstr := idstr+chr(oct_val)
  2114. end
  2115. else
  2116. begin
  2117. idstr := idstr+line[cno];
  2118. inc(cno)
  2119. end
  2120. end
  2121. end
  2122. else
  2123. inc(cno)
  2124. else
  2125. begin
  2126. idstr := idstr+line[cno];
  2127. inc(cno)
  2128. end;
  2129. if cno>length(line) then
  2130. error(missing_string_terminator)
  2131. else
  2132. inc(cno);
  2133. if length(idstr)=2 then
  2134. begin
  2135. yylval := ord(idstr[2]);
  2136. scan_literal := LITERAL;
  2137. end
  2138. else if length(idstr)>1 then
  2139. begin
  2140. yylval := get_key(''''+copy(idstr, 2, pred(length(idstr)))+'''');
  2141. scan_literal := LITID;
  2142. end
  2143. else
  2144. scan_literal := ILLEGAL;
  2145. end(*scan_literal*);
  2146. function scan_num : integer;
  2147. (* scan an unsigned integer *)
  2148. var
  2149. numstr : String;
  2150. code : integer;
  2151. begin
  2152. numstr := line[cno];
  2153. inc(cno);
  2154. while (cno<=length(line)) and
  2155. ('0'<=line[cno]) and (line[cno]<='9') do
  2156. begin
  2157. numstr := numstr+line[cno];
  2158. inc(cno)
  2159. end;
  2160. val(numstr, yylval, code);
  2161. if code=0 then
  2162. scan_num := NUMBER
  2163. else
  2164. scan_num := ILLEGAL;
  2165. end(*scan_num*);
  2166. function scan_keyword : integer;
  2167. (* scan %xy *)
  2168. function lookup(key : String; var tok : integer) : boolean;
  2169. (* table of Yacc keywords (unstropped): *)
  2170. const
  2171. no_of_entries = 11;
  2172. max_entry_length = 8;
  2173. keys : array [1..no_of_entries] of String[max_entry_length] = (
  2174. '0', '2', 'binary', 'left', 'nonassoc', 'prec', 'right',
  2175. 'start', 'term', 'token', 'type');
  2176. toks : array [1..no_of_entries] of integer = (
  2177. PTOKEN, PNONASSOC, PNONASSOC, PLEFT, PNONASSOC, PPREC, PRIGHT,
  2178. PSTART, PTOKEN, PTOKEN, PTYPE);
  2179. var m, n, k : integer;
  2180. begin
  2181. (* binary search: *)
  2182. m := 1; n := no_of_entries;
  2183. lookup := true;
  2184. while m<=n do
  2185. begin
  2186. k := m+(n-m) div 2;
  2187. if key=keys[k] then
  2188. begin
  2189. tok := toks[k];
  2190. exit
  2191. end
  2192. else if key>keys[k] then
  2193. m := k+1
  2194. else
  2195. n := k-1
  2196. end;
  2197. lookup := false
  2198. end(*lookup*);
  2199. var
  2200. keywstr : String;
  2201. tok : integer;
  2202. begin
  2203. inc(cno);
  2204. if cno<=length(line) then
  2205. case line[cno] of
  2206. '<' :
  2207. begin
  2208. scan_keyword := PLEFT;
  2209. inc(cno)
  2210. end;
  2211. '>' :
  2212. begin
  2213. scan_keyword := PRIGHT;
  2214. inc(cno)
  2215. end;
  2216. '=' :
  2217. begin
  2218. scan_keyword := PPREC;
  2219. inc(cno)
  2220. end;
  2221. '%', '\' :
  2222. begin
  2223. scan_keyword := PP;
  2224. inc(cno)
  2225. end;
  2226. '{' :
  2227. begin
  2228. scan_keyword := LCURL;
  2229. inc(cno)
  2230. end;
  2231. '}' :
  2232. begin
  2233. scan_keyword := RCURL;
  2234. inc(cno)
  2235. end;
  2236. 'A'..'Z', 'a'..'z', '0'..'9' :
  2237. begin
  2238. keywstr := line[cno];
  2239. inc(cno);
  2240. while (cno<=length(line)) and (
  2241. ('A'<=upCase(line[cno])) and (upCase(line[cno])<='Z') or
  2242. ('0'<=line[cno]) and (line[cno]<='Z') ) do
  2243. begin
  2244. keywstr := keywstr+line[cno];
  2245. inc(cno)
  2246. end;
  2247. if lookup(keywstr, tok) then
  2248. scan_keyword := tok
  2249. else
  2250. scan_keyword := ILLEGAL
  2251. end;
  2252. else scan_keyword := ILLEGAL
  2253. end
  2254. else
  2255. scan_keyword := ILLEGAL;
  2256. end(*scan_keyword*);
  2257. function scan_char : integer;
  2258. (* scan any single character *)
  2259. begin
  2260. scan_char := ord(line[cno]);
  2261. inc(cno)
  2262. end(*scan_char*);
  2263. var lno0, cno0 : integer;
  2264. begin
  2265. tokleng := 0;
  2266. scan;
  2267. lno0 := lno; cno0 := cno;
  2268. if end_of_input then
  2269. yylex := 0
  2270. else
  2271. case line[cno] of
  2272. 'A'..'Z', 'a'..'z', '_' : yylex := scan_ident;
  2273. '''', '"' : yylex := scan_literal;
  2274. '0'..'9' : yylex := scan_num;
  2275. '%', '\' : yylex := scan_keyword;
  2276. '=' :
  2277. if (cno<length(line)) and (line[succ(cno)]='{') then
  2278. begin
  2279. inc(cno);
  2280. yylex := scan_char
  2281. end
  2282. else
  2283. yylex := scan_char;
  2284. else yylex := scan_char;
  2285. end;
  2286. if lno=lno0 then
  2287. tokleng := cno-cno0
  2288. end(*yylex*);
  2289. (* Main program: *)
  2290. var i : Integer;
  2291. begin
  2292. {$ifdef Unix}
  2293. {$ifdef BSD}
  2294. codfilepath:='/usr/local/lib/fpc/lexyacc/';
  2295. {$else}
  2296. codfilepath:='/usr/lib/fpc/lexyacc/';
  2297. {$endif}
  2298. {$else}
  2299. codfilepath:=path(paramstr(0));
  2300. {$endif}
  2301. (* sign-on: *)
  2302. writeln(sign_on);
  2303. (* parse command line: *)
  2304. if paramCount=0 then
  2305. begin
  2306. writeln(usage);
  2307. writeln(options);
  2308. halt(0);
  2309. end;
  2310. yfilename := '';
  2311. pasfilename := '';
  2312. for i := 1 to paramCount do
  2313. if copy(paramStr(i), 1, 1)='-' then
  2314. if upper(paramStr(i))='-V' then
  2315. verbose := true
  2316. else if upper(paramStr(i))='-D' then
  2317. debug := true
  2318. else
  2319. begin
  2320. writeln(invalid_option, paramStr(i));
  2321. halt(1);
  2322. end
  2323. else if yfilename='' then
  2324. yfilename := addExt(paramStr(i), 'y')
  2325. else if pasfilename='' then
  2326. pasfilename := addExt(paramStr(i), 'pas')
  2327. else
  2328. begin
  2329. writeln(illegal_no_args);
  2330. halt(1);
  2331. end;
  2332. if yfilename='' then
  2333. begin
  2334. writeln(illegal_no_args);
  2335. halt(1);
  2336. end;
  2337. if pasfilename='' then pasfilename := root(yfilename)+'.pas';
  2338. lstfilename := root(yfilename)+'.lst';
  2339. (* open files: *)
  2340. assign(yyin, yfilename);
  2341. assign(yyout, pasfilename);
  2342. assign(yylst, lstfilename);
  2343. reset(yyin); if ioresult<>0 then fatal(cannot_open_file+yfilename);
  2344. rewrite(yyout); if ioresult<>0 then fatal(cannot_open_file+pasfilename);
  2345. rewrite(yylst); if ioresult<>0 then fatal(cannot_open_file+lstfilename);
  2346. (* search code template in current directory, then on path where Yacc
  2347. was executed from: *)
  2348. codfilename := 'yyparse.cod';
  2349. assign(yycod, codfilename);
  2350. reset(yycod);
  2351. if ioresult<>0 then
  2352. begin
  2353. codfilename := codfilepath+'yyparse.cod';
  2354. assign(yycod, codfilename);
  2355. reset(yycod);
  2356. if ioresult<>0 then fatal(cannot_open_file+codfilename);
  2357. end;
  2358. (* parse source grammar: *)
  2359. write('parse ... ');
  2360. lno := 0; cno := 1; line := '';
  2361. next_section;
  2362. if debug then writeln(yyout, '{$define yydebug}');
  2363. if yyparse=0 then
  2364. { done }
  2365. else if yychar=0 then
  2366. error(unexpected_eof)
  2367. else
  2368. error(syntax_error);
  2369. if errors=0 then writeln('DONE');
  2370. (* close files: *)
  2371. close(yyin); close(yyout); close(yylst); close(yycod);
  2372. (* print statistics: *)
  2373. if errors>0 then
  2374. writeln( lno, ' lines, ',
  2375. errors, ' errors found.' )
  2376. else
  2377. begin
  2378. writeln( lno, ' lines, ',
  2379. n_rules-1, '/', max_rules-1, ' rules, ',
  2380. n_states, '/', max_states, ' s, ',
  2381. n_items, '/', max_items, ' i, ',
  2382. n_trans, '/', max_trans, ' t, ',
  2383. n_redns, '/', max_redns, ' r.');
  2384. if shift_reduce>0 then
  2385. writeln(shift_reduce, ' shift/reduce conflicts.');
  2386. if reduce_reduce>0 then
  2387. writeln(reduce_reduce, ' reduce/reduce conflicts.');
  2388. if never_reduced>0 then
  2389. writeln(never_reduced, ' rules never reduced.');
  2390. end;
  2391. if warnings>0 then writeln(warnings, ' warnings.');
  2392. {$ifndef fpc}
  2393. {$IFNDEF Win32}
  2394. writeln( n_bytes, '/', max_bytes, ' bytes of memory used.');
  2395. {$ENDIF}
  2396. {$endif}
  2397. (* terminate: *)
  2398. if errors>0 then
  2399. begin
  2400. erase(yyout);
  2401. if ioresult<>0 then ;
  2402. end;
  2403. if file_size(lstfilename)=0 then
  2404. erase(yylst)
  2405. else
  2406. writeln('(see ', lstfilename, ' for more information)');
  2407. halt(errors);
  2408. end(*Yacc*).