pyacc.pas 49 KB

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