Files
harbour-core/harbour/samples/cccppc/hparser.cls
1999-11-09 01:37:27 +00:00

127 lines
4.0 KiB
OpenEdge ABL
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// $Id$
//
//*******************************************************************
// hparser.cls: Hessmark parser: a '#'-al kezd“d“ sorok elemzse.
// 1999, Csisz r Levente
// A PARSER-t“l ”r”k”l.
// Ez az elemz“ vgzi el a '#'-al kezd“d“ sorok elemzst.
// A nv s a sor (lparser) elemz“  ltal kszˇtett tokeneket v r az
// inputr˘l.
// A #-os sorokat feldolgozza, a t”bbit  tengedi.
class HPARSER PARSER
attrib soreleje
attrib defdict
attrib xtrdict
attrib ifStack
attrib branch // .t., ha egy #if igaz  g n vagyunk, vagy nem
// vagyunk if-ben, .f., ha egy #if hamis  g n
// vagyunk, nil, ha egy if hamis  g n bel<65>li
// if-en vagyunk.
attrib inclObj // Egy objektum, amiben vezetj<74>k az include
// filket.
attrib lastEos // Az utols˘ eos token.
rmethod readItem()
// Olvas egy elemet.
// Ret: Az elem, ha OK, nil, ha vge van a streamnek, vagy ha
// hiba volt.
// nmethod addBuf(anItem)
// Hozz ad egy elemet a pufferhez. Az elem lehet speci lis is.
// nmethod getStr()
// Megadja a buf tartalm t stringknt.
// A nem stringeket eldobja.
// nmethod rds()
// Olvas egy karatert a readInput()-al a buf-ba.
// Az olvasott rtket a buf-ba is beleteszi, ha az nem az eof.
// nmethod unrds(n)
// A buf utols˘ n elemt visszateszi az inputra. Az item-et t”rli.
// Azt adja vissza, hogy h ny elemet siker<65>lt visszatenni.
// Ha az n nil, akkor egyet tesz vissza.
nmethod parseLine()
// Ez vgzi a tnyleges elemzst, rekurzˇvan is lehet hˇvni.
// A this:item-t elemzi, sz<73>ksg esetn mg olvashat.
nmethod parseFalseLine()
// Egy #if hamis  g n vgzi az elemzst.
// A this:item-t elemzi, sz<73>ksg esetn mg olvashat.
nmethod parseDefine{hpr_prsDefine}(mnameToken)
// # define elemz“.
nmethod parseUndef{hpr_prsUndef}(mnameToken)
// # undef elemz“.
nmethod parseTranslate(mNameToken)
// # xtranslate, etc elemz“.
nmethod parseIfdef{hpr_prsIfdef}(mnameToken,ifdefType)
nmethod parseElse{hpr_prsElse}(mnameToken)
nmethod parseEndif{hpr_prsEndif}(mnameToken)
nmethod parseInclude(mnameToken)
nmethod parseLTranslate(mnameToken)
// A # xtranslate bal oldal nak az elemz“je.
nmethod parseRTranslate(mnameToken)
// A # xtranslate jobb oldal nak az elemz“je.
nmethod addDefine{hpr_addDefine}(mnameToken,name,params)
// Felvesz a #define sz˘t rba egy elemet name nven.
// A definˇci˘ t”rzse a parserBuffer-ben van.
// Az mnameToken jelzi, hogy hol volt a definˇci˘.
// Ha a nv m r ltezik, akkor az errorGen-el legy rt egy
// hiba tokent a az mnameToken-b“l.
nmethod addXTranslate(mnameToken,leftSide,rightSide)
// nmethod addXTranslate{hpr_addXTranslate}(mnameToken,leftSide,rightSide)
// Felvesz a #xtranslate sz˘t rba egy elemet.
// Az mnameToken jelzi, hogy hol volt a definˇci˘.
nmethod sorNyel(kiirBlock)
// T”rli a parserBuffer-t, majd a sor vgig lenyeli az item-eket.
// A sorvgjelet a parserpuffer-ben hagyja.
// Ha a kiirBlock egy block, akkor a token stringeket  tadja neki.
nmethod errorgen(token,errorCode,params)
// Kiad egy hiba<62>zenetet. Az <20>zenet helye a token-ben specifik lt
// hely lesz.
// A params lehet nil is.
nmethod incompErrorgen(token,errorcode,params)
// Ez egy olyan hiba, amit csak akkor kell kiadni, ha pontosan
// ut nozni akarjuk a specifik ci˘t. M s sz˘val itt a spec. rossz
// s mi csin ln nk/csin ljuk j˘l. Egy logikai rtkkel tr
// vissza, ha igaz, akkor a hiba<62>zenet ki van adva, ha hamis,
// akkor a hiba<62>zetet nem adta ki (lehet folytatni).
// A paramterezse megegyezik az errorgen()-el.
nmethod chkEndOFFile()
// Elvgzi a sz<73>ksges ellen“rzseket a fil vgn.
// (Lez ratlan #if, etc.)
rmethod oinit(inputReader,name,defDict,xtrDict,inclObj,errorStream)
metaclass
rmethod onew(inputReader,name,defDict,xtrDict,inclObj,errorStream)
rmethod oinitclass()