⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.c

📁 主要用于大规模的测试生成方法
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>#include "defines.h"#include "types.h"#include "keywords.h"/*** IMPORTED *****/extern PARSETREE *token;extern char *keywords[];/*extern int inputmask;*/extern void add_token();static int inputmask = (-1 & ~COMMENT & ~GRAPHIC);/******** flags for context sensitive rules *********/static int Fvref, Fassign; /* to change 'IDENT' into 'VALUEREF' */static int Fext, Fpage, Ftech, Fcont, Fintf;/********** defines for parser **********/#define RULE		static#define IS		() {int b = TRUE;#define ZERO(n)		int n = FALSE;#define FORM(keydef)	if(token->type!=keydef) return(FALSE);\			else add_token()#define CONDFORM(k,msk) if(token->type!=k) return(FALSE);\			if(inputmask&msk) return(match_anyitem(TRUE));\			else add_token()#define ONCE		; b =#define REPEAT		; while (b && token->type != ENDLIST) b =#define OPTIONAL	; if (b && token->type != ENDLIST) b |=#define G1(guard,f)	(!guard&&(guard=f()))#define MATCH(keydef)	((token->data.token==keywords[keydef])?\			(add_token(), TRUE): FALSE)#define ENDFORM		; return( match_endlist( b));}#define END		; return( b);}#define ANYTAIL		; return( match_tail(b));}#define FLAG(f)		; f=TRUE#define UNFLAG(f)	; f=FALSE/*********************************************************************//*       Functions for each EDIF grammar rule                        *//*********************************************************************/RULE Pabs IS FORM(Kabs)	ONCE	PnumberValue()	ENDFORMRULE PacLoad IS FORM(KacLoad)	ONCE	PmiNoMaxValue() || PmiNoMaxDisplay()	ENDFORMRULE Pactual IS FORM(Kactual)	ONCE	PformalNameRef()	ENDFORMRULE Pafter IS FORM(Kafter)	ONCE	PmiNoMaxValue()	REPEAT	PlogicAssign() || Pfollow() || Pmaintain() ||		Pcomment() || PuserData()	ENDFORMRULE Pand IS FORM(Kand)	REPEAT	PbooleanValue()	ENDFORMRULE Pannotate IS FORM(Kannotate)	ONCE PstringValue() || PstringDisplay()	ENDFORMRULE Papply IS FORM(Kapply)	ONCE	Pcycle()	REPEAT	PlogicInput() || PlogicOutput() || Pcomment() || PuserData()	ENDFORMRULE Parc IS FORM(Karc)	ONCE PpointValue() && PpointValue() && PpointValue()	ENDFORMRULE Passign IS FORM(Kassign)	FLAG(Fassign)	ONCE	PvalueNameRef() && PtypedValue()	UNFLAG(Fassign)	ENDFORMRULE Parray IS FORM(Karray)	ONCE	PnameDef() && PintegerValue()	REPEAT	PintegerValue()	ENDFORMRULE ParrayMacro IS FORM(KarrayMacro)	ONCE	Pplug()	ENDFORMRULE ParrayRelatedInfo IS FORM(KarrayRelatedInfo)	ONCE	ParrayMacro() || ParraySite() || PbaseArray()	REPEAT	Pcomment() || PuserData()	ENDFORMRULE ParraySite IS FORM(KarraySite)	ONCE	Psocket()	ENDFORMRULE PatLeast IS FORM(KatLeast)	ONCE	PnumberValue()	ENDFORMRULE PatMost IS FORM(KatMost)	ONCE	PnumberValue()	ENDFORMRULE Pauthor IS FORM(Kauthor)	ONCE	PstringToken()	ENDFORMRULE PbaseArray IS FORM(KbaseArray)	ENDFORMRULE Pbecomes IS FORM(Kbecomes)	ONCE	PlogicNameRef() || PlogicList()|| PlogicOneOf()	ENDFORMRULE Pbetween IS FORM(Kbetween)	ONCE	(PatLeast() || PgreaterThan()) &&		(PatMost() || PlessThan())	ENDFORMRULE Pblock IS FORM(Kblock)	REPEAT	Pstatement()	ENDFORMRULE Pboolean IS FORM(Kboolean)	REPEAT	PbooleanValue() || PbooleanDisplay() || Pboolean()	ENDFORMRULE PbooleanDisplay IS FORM(KbooleanDisplay)	ONCE	PbooleanValue()	REPEAT	Pdisplay()	ENDFORMRULE PbooleanMap IS FORM(KbooleanMap)	ONCE	PbooleanValue()	ENDFORMRULE PbooleanValue IS	ONCE	Pfalse() || Ptrue() || PvalueNameRef() || Pand() ||		Por() || Pnot() || Pxor() || Pequal() ||		Pincreasing() || PstrictlyIncreasing()	ENDRULE PborderPattern IS FORM(KborderPattern)	ONCE	PintegerValue() && PintegerValue() && Pboolean()	ENDFORMRULE PborderWidth IS FORM(KborderWidth)	ONCE	PintegerValue()	ENDFORMRULE PboundingBox IS FORM(KboundingBox)	ONCE Prectangle()	ENDFORMRULE Pbuild IS FORM(Kbuild)	ONCE	PkeywordNameRef()	REPEAT	Pliteral() || Pactual() || Pbuild() ||		PforEach() || Pcomment()	ENDFORMRULE Pceiling IS FORM(Kceiling)	ONCE	PnumberValue()	ENDFORMRULE Pcell IS ZERO(n) ZERO(m) FORM(Kcell)	ONCE	PcellNameDef() && PcellType()	REPEAT	G1(n,Pstatus) || Pview() || G1(m,PviewMap) ||		Pproperty() || Pcomment() || PuserData()	ENDFORMRULE PcellNameDef IS	ONCE	PnameDef()	ENDRULE PcellNameRef IS	ONCE	PnameRef()	ENDRULE PcellRef IS FORM(KcellRef)	ONCE	PcellNameRef()	OPTIONAL PlibraryRef()	ENDFORMRULE PcellType IS FORM(KcellType)	ONCE	MATCH(KGENERIC) || MATCH(KTIE) || MATCH(KRIPPER)	ENDFORMRULE Pchange IS FORM(Kchange)	ONCE	PportNameRef() || PportRef() || PportList()	OPTIONAL Ptransition() || Pbecomes()	ENDFORMRULE Pcircle IS FORM(Kcircle)	ONCE	PpointValue() && PpointValue()	REPEAT	Pproperty()	ENDFORMRULE Pcollector IS FORM(Kcollector)	ENDFORMRULE Pcolor IS FORM(Kcolor)	ONCE	PscaledInteger() && PscaledInteger() && PscaledInteger()	ENDFORMRULE Pcomment IS CONDFORM(Kcomment, COMMENT)	REPEAT	PstringToken()	ENDFORMRULE PcommentGraphics IS ZERO(n) FORM(KcommentGraphics)	REPEAT	Pannotate() || Pfigure() || Pinstance() || G1(n,PboundingBox) ||		Pproperty() || Pcomment() || PuserData()	ENDFORMRULE Pcompound IS FORM(Kcompound)	REPEAT	PlogicNameRef()	ENDFORMRULE Pconcat IS FORM(Kconcat)	REPEAT	PstringValue()	ENDFORMRULE PconnectLocation IS FORM(KconnectLocation)	REPEAT	Pfigure()	ENDFORMRULE Pconstant IS FORM(Kconstant)	ONCE	PvalueNameDef() && PtypedValue()	ENDFORMRULE Pconstraint IS FORM(Kconstraint)	ONCE	PbooleanValue()	REPEAT	Pproperty()	ENDFORMRULE Pcontents IS ZERO(n) FORM(Kcontents)	FLAG(Fcont)	REPEAT	Pinstance() || PoffPageConnector() || Pfigure() ||		Psection() || Pnet() || PnetBundle() || Ppage() ||		PcommentGraphics() || PportImplementation() || Ptiming() ||		Psimulate() || Pwhen() || Pfollow() || PlogicPort() ||		G1(n,PboundingBox) || Pconstant() || Pconstraint() ||		Pvariable() || Passign() || Pblock() || Pif() || Piterate() ||		Pwhile() || Pproperty() || Pcomment() || PuserData()	UNFLAG(Fcont)	ENDFORMRULE PcornerType IS FORM(KcornerType)	ONCE	MATCH(KEXTEND) || MATCH(KROUND) || MATCH(KTRUNCATE)	ENDFORMRULE Pcriticality IS FORM(Kcriticality)	ONCE PintegerValue() || PintegerDisplay()	ENDFORMRULE PcurrentMap IS FORM(KcurrentMap)	ONCE	PmiNoMaxValue()	ENDFORMRULE Pcurve IS FORM(Kcurve)	REPEAT	Parc() || PpointValue()	ENDFORMRULE Pcycle IS FORM(Kcycle)	ONCE	PintegerValue()	OPTIONAL Pduration()	ENDFORMRULE PdataOrigin IS FORM(KdataOrigin)	ONCE	PstringToken()	OPTIONAL Pversion()	ENDFORMRULE PdcFaninLoad IS FORM(KdcFaninLoad)	ONCE	PnumberValue() || PnumberDisplay()	ENDFORMRULE PdcFanoutLoad IS FORM(KdcFanoutLoad)	ONCE	PnumberValue() || PnumberDisplay()	ENDFORMRULE PdcMaxFanin IS FORM(KdcMaxFanin)	ONCE	PnumberValue() || PnumberDisplay()	ENDFORMRULE PdcMaxFanout IS FORM(KdcMaxFanout)	ONCE	PnumberValue() || PnumberDisplay()	ENDFORMRULE Pdelay IS FORM(Kdelay)	ONCE	PmiNoMaxValue() || PmiNoMaxDisplay()	ENDFORMRULE Pdelta IS FORM(Kdelta)	REPEAT	PpointValue()	ENDFORMRULE Pderivation IS FORM(Kderivation)	ONCE	MATCH(KCALCULATED) || MATCH(KMEASURED) || MATCH(KREQUIRED)	ENDFORMRULE Pdesign IS ZERO(n) FORM(Kdesign)	ONCE	PdesignNameDef() && PcellRef()	REPEAT	G1(n,Pstatus) || Pproperty() || Pcomment() || PuserData()	ENDFORMRULE Pdesignator IS FORM(Kdesignator)	ONCE	PstringValue() || PstringDisplay()	ENDFORMRULE PdesignNameDef IS	ONCE	PnameDef()	ENDRULE Pdifference IS FORM(Kdifference)	ONCE	PfigureGroupRef() || PfigureOp()	REPEAT	PfigureGroupRef() || PfigureOp()	ENDFORMRULE Pdirection IS FORM(Kdirection)	ONCE	MATCH(KINOUT) || MATCH(KINPUT) || MATCH(KOUTPUT)	ENDFORMRULE Pdisplay IS FORM(Kdisplay)	ONCE	PfigureGroupNameRef() || PfigureGroupOverride()	OPTIONAL Pjustify()	OPTIONAL Porientation()	OPTIONAL Porigin()	ENDFORMRULE Pdivide IS FORM(Kdivide)	ONCE	PnumberValue()	REPEAT	PnumberValue()	ENDFORMRULE Pdominates IS FORM(Kdominates)	REPEAT	PlogicNameRef()	ENDFORMRULE Pdot IS FORM(Kdot)	ONCE	PpointValue()	REPEAT	Pproperty()	ENDFORMRULE Pduration IS FORM(Kduration)	ONCE	PnumberValue()	ENDFORMRULE Pe IS FORM(Ke)	ONCE	PintegerToken() && PintegerToken()	ENDFORMPedif IS /* root production rule, called externally */	ZERO(n) FORM(Kedif)	ONCE	PedifFileNameDef() && PedifVersion() &&		PedifLevel() && PkeywordMap()	REPEAT	G1(n,Pstatus) || Pexternal() || Plibrary() ||		Pdesign() || Pcomment() || PuserData()	ENDFORMRULE PedifFileNameDef IS	ONCE	PnameDef()	ENDRULE PedifLevel IS FORM(KedifLevel)	ONCE	PintegerToken()	ENDFORMRULE PedifVersion IS FORM(KedifVersion)	ONCE	PintegerToken() && PintegerToken() && PintegerToken()	ENDFORMRULE Pelse IS FORM(Kelse)	REPEAT	Pstatement()	ENDFORMRULE PenclosureDistance IS FORM(KenclosureDistance)	ONCE	PruleNameDef() && PfigureGroupObject() &&		PfigureGroupObject() && (Prange() || PsingleValueSet())	REPEAT	Pcomment() || PuserData()	ENDFORMRULE PendType IS FORM(KendType)	ONCE	MATCH(KEXTEND) || MATCH(KROUND) || MATCH(KTRUNCATE)	ENDFORMRULE Pentry IS FORM(Kentry)	ONCE	(Pmatch() || Pchange() || Psteady()) &&		(PlogicRef() || PportRef() || PnoChange() || Ptable())	OPTIONAL Pdelay() || PloadDelay()	ENDFORMRULE Pescape IS FORM(Kescape)	ENDFORMRULE Pequal IS FORM(Kequal)	ONCE	PnumberValue()	REPEAT	PnumberValue()	ENDFORMRULE Pevent IS FORM(Kevent)	ONCE	PportRef() || PportList() || PportGroup() ||		PnetRef() || PnetGroup()	REPEAT	Ptransition() || Pbecomes()	ENDFORMRULE Pexactly IS FORM(Kexactly)	ONCE	PnumberValue()	ENDFORMRULE Pexternal IS ZERO(n) FORM(Kexternal)	FLAG(Fext)	ONCE	PlibraryNameDef() && PedifLevel() && Ptechnology()	REPEAT	G1(n,Pstatus) || Pcell() || Pcomment() || PuserData()	UNFLAG(Fext)	ENDFORMRULE Pfabricate IS FORM(Kfabricate)	ONCE	PlayerNameDef() && PfigureGroupNameRef()	ENDFORMRULE Pfalse IS FORM(Kfalse)	ENDFORMRULE Pfigure IS FORM(Kfigure)	ONCE	PfigureGroupNameRef() || PfigureGroupOverride()	REPEAT	Pcircle() || Pdot() || PopenShape() || Ppath() || Ppolygon() ||		Prectangle() || Pshape() || Pcomment() || PuserData()	ENDFORMRULE PfigureArea IS FORM(KfigureArea)	ONCE	PruleNameDef() && PfigureGroupObject() &&		(Prange() || PsingleValueSet())	REPEAT	Pcomment() || PuserData()	ENDFORMRULE PfigureGroup IS ZERO(m) ZERO(n) ZERO(o) ZERO(p) ZERO(q) ZERO(r)	ZERO(s) ZERO(t) ZERO(u) FORM(KfigureGroup)	ONCE	PfigureGroupNameDef()	REPEAT	G1(m,PcornerType) || G1(n,PendType) || G1(o,PpathWidth) ||		G1(p,PborderWidth) || G1(q,Pcolor) || G1(r,PfillPattern) ||		G1(s,PborderPattern) || G1(t,PtextHeight) || G1(u,Pvisible) ||		PincludeFigureGroup() || Pproperty() || Pcomment() ||		PuserData()	ENDFORMRULE PfigureGroupNameDef IS	ONCE	PnameDef()	ENDRULE PfigureGroupNameRef IS	ONCE	PnameRef()	ENDRULE PfigureGroupObject IS FORM(KfigureGroupObject)	ONCE	PfigureGroupNameRef() || PfigureGroupRef() || PfigureOp()	ENDFORMRULE PfigureGroupOverride IS ZERO(m) ZERO(n) ZERO(o) ZERO(p) ZERO(q) ZERO(r)	ZERO(s) ZERO(t) ZERO(u) FORM(KfigureGroupOverride)	ONCE	PfigureGroupNameRef()	REPEAT	G1(m,PcornerType) || G1(n,PendType) || G1(o,PpathWidth) ||		G1(p,PborderWidth) || G1(q,Pcolor) || G1(r,PfillPattern) ||		G1(s,PborderPattern) || G1(t,PtextHeight) || G1(u,Pvisible) ||		Pproperty() || Pcomment() || PuserData()	ENDFORMRULE PfigureGroupRef IS FORM(KfigureGroupRef)	ONCE	PfigureGroupNameRef()	OPTIONAL PlibraryRef()	ENDFORMRULE PfigureOp IS	ONCE	Pdifference() || Pintersection() || Pinverse() ||		Poversize() || Punion()	ENDRULE PfigurePerimeter IS FORM(KfigurePerimeter)	ONCE	PruleNameDef() && PfigureGroupObject() &&		(Prange() || PsingleValueSet())	REPEAT	Pcomment() || PuserData()	ENDFORMRULE PfigureWidth IS FORM(KfigureWidth)	ONCE	PruleNameDef() && PfigureGroupObject() &&		(Prange() || PsingleValueSet())	REPEAT	Pcomment() || PuserData()	ENDFORMRULE PfillPattern IS FORM(KfillPattern)	ONCE	PintegerValue() && PintegerValue() && Pboolean()	ENDFORMRULE Pfix IS FORM(Kfix)	ONCE	PnumberValue()	ENDFORMRULE Pfloor IS FORM(Kfloor)	ONCE	PnumberValue()	ENDFORMRULE Pfollow IS FORM(Kfollow)	ONCE	(PportNameRef() || PportRef()) &&		(PportRef() || Ptable())	OPTIONAL Pdelay() || PloadDelay()	ENDFORMRULE PforbiddenEvent IS FORM(KforbiddenEvent)	ONCE	PtimeInterval()	REPEAT	Pevent()	ENDFORMRULE PforEach IS FORM(KforEach)	ONCE	PformalNameRef() || PformalList()	REPEAT	Pbuild() || Pactual() || Pliteral() ||		PforEach() || Pcomment()	ENDFORMRULE Pform IS	if (!ISKEYWORD(token->type)) return(FALSE);	else add_token();	REPEAT	PintegerToken() || PstringToken() ||		Pidentifier() || Pform()	ENDFORMRULE Pformal IS FORM(Kformal)	ONCE	PformalNameDef()	REPEAT	Poptional() || Pcollector()	ENDFORMRULE PformalList IS FORM(KformalList)	REPEAT	PformalNameRef()	ENDFORMRULE PformalNameDef IS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -