pyacc.pas 49 KB

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