libutap
builder.h
Go to the documentation of this file.
1 // -*- mode: C++; c-file-style: "stroustrup"; c-basic-offset: 4; indent-tabs-mode: nil; -*-
2 
3 /* libutap - Uppaal Timed Automata Parser.
4  Copyright (C) 2002-2003 Uppsala University and Aalborg University.
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public License
8  as published by the Free Software Foundation; either version 2.1 of
9  the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful, but
12  WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19  USA
20 */
21 
22 #ifndef UTAP_BUILDER_HH
23 #define UTAP_BUILDER_HH
24 
25 #include <cstdio>
26 #include <stdexcept>
27 #include <string>
28 #include <boost/format.hpp>
29 
30 #include "utap/common.h"
31 
32 namespace UTAP
33 {
39  class TypeException : public std::runtime_error
40  {
41  public:
42  TypeException(std::string);
43  TypeException(const boost::format &);
44  };
45 
80  {
81  public:
82  /*********************************************************************
83  * Prefixes
84  */
85  enum PREFIX { PREFIX_NONE = 0,
91  PREFIX_HYBRID = 16 };
92 
93  std::vector<std::string> lscTemplateNames;
94 
95  virtual ~ParserBuilder() {}
96 
101  virtual void addPosition(
102  uint32_t position, uint32_t offset, uint32_t line, std::string path) = 0;
103 
109  virtual void setPosition(uint32_t a, uint32_t b) = 0;
110 
111  // Called when an error is detected
112  virtual void handleError(std::string) = 0;
113 
114  // Called when a warning is issued
115  virtual void handleWarning(std::string) = 0;
116 
117  void handleWarning(const char *msg, ...);
118 
119  void handleError(const char *msg, ...);
120 
126  virtual bool isType(const char*) = 0;
127 
129  virtual void typeDuplicate() = 0;
130 
132  virtual void typePop() = 0;
133 
137  virtual void typeBool(PREFIX) = 0;
138 
142  virtual void typeInt(PREFIX) = 0;
143 
147  virtual void typeDouble(PREFIX) = 0;
148 
154  virtual void typeBoundedInt(PREFIX) = 0;
155 
159  virtual void typeChannel(PREFIX) = 0;
160 
164  virtual void typeClock(PREFIX) = 0;
165 
169  virtual void typeVoid() = 0;
170 
175  virtual void typeArrayOfSize(size_t) = 0;
176 
181  virtual void typeArrayOfType(size_t) = 0;
182 
187  virtual void typeScalar(PREFIX) = 0;
188 
193  virtual void typeName(PREFIX, const char* name) = 0;
194 
200  virtual void typeStruct(PREFIX, uint32_t fields) = 0;
201 
208  virtual void structField(const char* name) = 0;
209 
214  virtual void declTypeDef(const char* name) = 0;
215 
219  virtual void declVar(const char* name, bool init) = 0;
220 
221  virtual void declInitialiserList(uint32_t num) = 0; // n initialisers
222  virtual void declFieldInit(const char* name) = 0; // 1 initialiser
223 
228  virtual void declProgress(bool hasGuard) = 0;
229 
230  /********************************************************************
231  * Gantt chart declarations
232  */
233  virtual void ganttDeclStart(const char* name) = 0;
234  virtual void ganttDeclSelect(const char *id) = 0;
235  virtual void ganttDeclEnd() = 0;
236  virtual void ganttEntryStart() = 0;
237  virtual void ganttEntrySelect(const char *id) = 0;
238  virtual void ganttEntryEnd() = 0;
239 
240  /********************************************************************
241  * Function declarations
242  */
243  virtual void declParameter(const char* name, bool ref) = 0;
244  virtual void declFuncBegin(const char* name) = 0;
245  virtual void declFuncEnd() = 0; // 1 block
246 
247  /********************************************************************
248  * Process declarations
249  */
250  virtual void procBegin(const char* name, const bool isTA = true,
251  const std::string type = "", const std::string mode = "") = 0; // m parameters
252  virtual void procEnd() = 0; // 1 ProcBody
253  virtual void procState(const char* name, bool hasInvariant, bool hasER) = 0; // 1 expr
254  virtual void procStateCommit(const char* name) = 0; // mark previously decl. state
255  virtual void procStateUrgent(const char* name) = 0; // mark previously decl. state
256  virtual void procStateInit(const char* name) = 0; // mark previously decl. state
257  virtual void procEdgeBegin(const char* from, const char* to, const bool control, const char* actname = "") = 0;
258  virtual void procEdgeEnd(const char* from, const char* to) = 0;
259  virtual void procSelect(const char * id) = 0; // 1 expr
260  virtual void procGuard() = 0; // 1 expr
261  virtual void procSync(Constants::synchronisation_t type) = 0; // 1 expr
262  virtual void procUpdate() = 0; // 1 expr
263  virtual void procProb() = 0;
264  virtual void procBranchpoint(const char* name) = 0;
265  /************************************************************
266  * Process declarations for LSC
267  */
268  virtual void procInstanceLine()= 0;
269  virtual void instanceName(const char* name, bool templ=true)= 0;
270  virtual void instanceNameBegin(const char *name)= 0;
271  virtual void instanceNameEnd(const char *name, size_t arguments)= 0;
272  virtual void procMessage(const char* from, const char* to, const int loc, const bool pch)= 0;
273  virtual void procMessage(Constants::synchronisation_t type) = 0;
274  virtual void procCondition(const std::vector<char*> anchors, const int loc,
275  const bool pch, const bool hot)= 0;
276  virtual void procCondition()= 0; // 1 expr
277  virtual void procLscUpdate(const char* anchor, const int loc, const bool pch)= 0;
278  virtual void procLscUpdate()= 0; // 1 expr
279  virtual void hasPrechart(const bool pch)= 0;
280 
281  /*********************************************************************
282  * Statements
283  */
284  virtual void blockBegin() = 0;
285  virtual void blockEnd() = 0;
286  virtual void emptyStatement() = 0;
287  virtual void forBegin() = 0; // 3 expr
288  virtual void forEnd() = 0; // 1 stat
289  virtual void iterationBegin(const char *name) = 0; // 1 id, 1 type
290  virtual void iterationEnd(const char *name) = 0; // 1 stat
291  virtual void whileBegin() = 0;
292  virtual void whileEnd() = 0; // 1 expr, 1 stat
293  virtual void doWhileBegin() = 0;
294  virtual void doWhileEnd() = 0; // 1 stat, 1 expr
295  virtual void ifBegin() = 0;
296  virtual void ifElse() = 0;
297  virtual void ifEnd(bool) = 0; // 1 expr, 1 or 2 statements
298  virtual void breakStatement() = 0;
299  virtual void continueStatement() = 0;
300  virtual void switchBegin() = 0;
301  virtual void switchEnd() = 0; // 1 expr, 1+ case/default
302  virtual void caseBegin() = 0;
303  virtual void caseEnd() = 0; // 1 expr, 0+ stat
304  virtual void defaultBegin() = 0;
305  virtual void defaultEnd() = 0; // 0+ statements
306  virtual void exprStatement() = 0; // 1 expr
307  virtual void returnStatement(bool) = 0; // 1 expr if argument is true
308  virtual void assertStatement() = 0; // 1 expr
309 
310  /********************************************************************
311  * Expressions
312  */
313  virtual void exprFalse() = 0;
314  virtual void exprTrue() = 0;
315  virtual void exprDouble(double) = 0;
316  virtual void exprId(const char * varName) = 0;
317  virtual void exprNat(int32_t) = 0; // natural number
318  virtual void exprCallBegin() = 0;
319  virtual void exprCallEnd(uint32_t n) = 0; // n exprs as arguments
320  virtual void exprArray() = 0; // 2 expr
321  virtual void exprPostIncrement() = 0; // 1 expr
322  virtual void exprPreIncrement() = 0; // 1 expr
323  virtual void exprPostDecrement() = 0; // 1 expr
324  virtual void exprPreDecrement() = 0; // 1 expr
325  virtual void exprAssignment(Constants::kind_t op) = 0; // 2 expr
326  virtual void exprUnary(Constants::kind_t unaryop) = 0; // 1 expr
327  virtual void exprBinary(Constants::kind_t binaryop) = 0; // 2 expr
328  virtual void exprNary(Constants::kind_t, uint32_t num) = 0; // n expr
329  virtual void exprScenario(const char* name) = 0; //LSC
330  virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing = false) = 0; // 3 expr
331  virtual void exprInlineIf() = 0; // 3 expr
332  virtual void exprComma() = 0; // 2 expr
333  virtual void exprDot(const char *) = 0; // 1 expr
334  virtual void exprDeadlock() = 0;
335  virtual void exprForAllBegin(const char *name) = 0;
336  virtual void exprForAllEnd(const char *name) = 0;
337  virtual void exprExistsBegin(const char *name) = 0;
338  virtual void exprExistsEnd(const char *name) = 0;
339  virtual void exprSumBegin(const char *name) = 0;
340  virtual void exprSumEnd(const char *name) = 0;
341 
342  // Extension for ecdar.
343  virtual void exprSync(Constants::synchronisation_t type) = 0;
344  virtual void declIO(const char*,int,int) = 0;
345 
346  // Extension for SMC.
347  virtual void exprSMCControl(int) = 0;
348  virtual void exprProbaQualitative(int,Constants::kind_t,Constants::kind_t,double) = 0;
349  virtual void exprProbaQuantitative(int,Constants::kind_t,bool=false) = 0;
350  virtual void exprProbaCompare(int,Constants::kind_t,int,Constants::kind_t) = 0;
351  virtual void exprProbaExpected(int,const char*) = 0;
352  virtual void exprBuiltinFunction1(Constants::kind_t) = 0;
353  virtual void exprBuiltinFunction2(Constants::kind_t) = 0;
354 
355  //MITL Extensions
356  virtual void exprMitlFormula ( ) = 0;
357  virtual void exprMitlUntil (int,int) = 0;
358  virtual void exprMitlRelease (int,int) = 0;
359  virtual void exprMitlDisj () = 0;
360  virtual void exprMitlConj () = 0;
361  virtual void exprMitlNext () = 0;
362  virtual void exprMitlAtom () = 0;
363  virtual void exprMitlDiamond (int,int) = 0;
364  virtual void exprMitlBox (int,int) = 0;
365 
366  virtual void exprSimulate(int,int,int,bool=false,int = 0) = 0;
367 
368  /********************************************************************
369  * System declaration
370  */
371  virtual void instantiationBegin(
372  const char* id, size_t parameters, const char* templ) = 0;
373  virtual void instantiationEnd(
374  const char* id, size_t parameters, const char* templ, size_t arguments) = 0;
375  virtual void process(const char*) = 0;
376  virtual void processListEnd() = 0;
377  virtual void done() = 0; // marks the end of the file
378 
379  /********************************************************************
380  * Properties
381  */
382  virtual void property() = 0;
383  virtual void scenario(const char*) = 0; //LSC
384  virtual void parse(const char*) = 0; //LSC
385 
386  /********************************************************************
387  * Guiding
388  */
389  virtual void beforeUpdate() = 0;
390  virtual void afterUpdate() = 0;
391 
392  /********************************************************************
393  * Priority
394  */
395  virtual void beginChanPriority() = 0;
396  virtual void addChanPriority(char separator) = 0;
397  virtual void defaultChanPriority() = 0;
398  virtual void incProcPriority() = 0;
399  virtual void procPriority(const char*) = 0;
401  virtual void declDynamicTemplate (std::string) = 0;
402  virtual void exprSpawn (int ) = 0;
403  virtual void exprExit () = 0;
404  virtual void exprNumOf () = 0;
405  virtual void exprForAllDynamicBegin (const char* ,const char*)=0;
406  virtual void exprForAllDynamicEnd (const char* name)=0;
407  virtual void exprExistsDynamicBegin (const char*,const char* )=0;
408  virtual void exprExistsDynamicEnd (const char* name)=0;
409  virtual void exprSumDynamicBegin (const char*,const char* )=0;
410  virtual void exprSumDynamicEnd (const char* name)=0;
411  virtual void exprForeachDynamicBegin (const char*,const char* )=0;
412  virtual void exprForeachDynamicEnd (const char* name)=0;
413  virtual void exprMITLForAllDynamicBegin (const char*,const char* )=0;
414  virtual void exprMITLForAllDynamicEnd (const char* name)=0;
415  virtual void exprMITLExistsDynamicBegin (const char*,const char*)=0;
416  virtual void exprMITLExistsDynamicEnd (const char* name)=0;
417  virtual void exprDynamicProcessExpr (const char*) = 0;
418 
420  virtual void queryBegin()=0;
421  virtual void queryFormula(const char* formula, const char* location)=0;
422  virtual void queryComment(const char* comment)=0;
423  virtual void queryEnd()=0;
424  };
425 
426 }
427 
435 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, bool newxta);
436 
437 int32_t parseXTA(const char*, UTAP::ParserBuilder *, bool newxta);
438 
446 int32_t parseXTA(const char*, UTAP::ParserBuilder *,
447  bool newxta, UTAP::xta_part_t part, std::string xpath);
448 
449 
457 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
458  bool newxta);
459 
468 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *, bool newxta);
469 
475 int32_t parseProperty(const char *str,
476  UTAP::ParserBuilder *aParserBuilder, const std::string& xpath="");
477 
482 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder);
483 
484 
485 #endif
virtual void exprAssignment(Constants::kind_t op)=0
virtual void exprExit()=0
virtual void procGuard()=0
virtual void exprSumDynamicBegin(const char *, const char *)=0
virtual void typeBool(PREFIX)=0
Called whenever a boolean type is parsed.
virtual void exprDot(const char *)=0
virtual bool isType(const char *)=0
Must return true if and only if name is registered in the symbol table as a named type...
virtual void breakStatement()=0
virtual void exprComma()=0
virtual void returnStatement(bool)=0
virtual void processListEnd()=0
virtual void typeBoundedInt(PREFIX)=0
Called whenever an integer type with a range is parsed.
virtual void defaultEnd()=0
virtual void typeArrayOfType(size_t)=0
Called to create an array type.
virtual void handleError(std::string)=0
virtual void exprCallEnd(uint32_t n)=0
virtual void queryBegin()=0
Verification queries.
virtual void exprPostIncrement()=0
virtual void instanceNameEnd(const char *name, size_t arguments)=0
virtual void exprExistsDynamicBegin(const char *, const char *)=0
virtual void procMessage(const char *from, const char *to, const int loc, const bool pch)=0
virtual void ifBegin()=0
#define comment
Definition: lexer.cc:623
virtual void exprMITLExistsDynamicEnd(const char *name)=0
virtual void procCondition()=0
xta_part_t
Type for specifying which XTA part to parse (syntax switch)
Definition: common.h:272
virtual void instantiationBegin(const char *id, size_t parameters, const char *templ)=0
virtual void declFuncBegin(const char *name)=0
virtual void blockBegin()=0
virtual void exprExistsEnd(const char *name)=0
virtual void exprExistsDynamicEnd(const char *name)=0
virtual void exprStatement()=0
int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *, bool newxta)
Parse a buffer in the XML format, reporting the system to the given implementation of the the ParserB...
Definition: xmlreader.cpp:1334
virtual void ifElse()=0
virtual void exprUnary(Constants::kind_t unaryop)=0
virtual void parse(const char *)=0
PREFIX
Definition: builder.h:85
virtual void exprSimulate(int, int, int, bool=false, int=0)=0
virtual void exprForeachDynamicEnd(const char *name)=0
virtual void procBranchpoint(const char *name)=0
virtual void exprBinary(Constants::kind_t binaryop)=0
virtual void typeDouble(PREFIX)=0
Called whenever a double type is parsed.
virtual void forBegin()=0
virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing=false)=0
virtual void ganttDeclEnd()=0
virtual void exprCallBegin()=0
virtual void procInstanceLine()=0
virtual void scenario(const char *)=0
virtual void process(const char *)=0
virtual void incProcPriority()=0
Definition: builder.h:85
virtual void exprProbaCompare(int, Constants::kind_t, int, Constants::kind_t)=0
Definition: lexer.cc:585
virtual void ganttEntryStart()=0
virtual void structField(const char *name)=0
Called to declare a field of a structure.
virtual void exprInlineIf()=0
virtual void exprDynamicProcessExpr(const char *)=0
Exception indicating a type error.
Definition: builder.h:39
virtual void exprId(const char *varName)=0
kind_t
Definition: common.h:37
virtual void handleWarning(std::string)=0
virtual void queryFormula(const char *formula, const char *location)=0
virtual void procUpdate()=0
virtual void typeVoid()=0
Called whenever a void type is parsed.
virtual void doWhileEnd()=0
virtual void caseEnd()=0
virtual void blockEnd()=0
virtual void procStateUrgent(const char *name)=0
virtual void exprBuiltinFunction2(Constants::kind_t)=0
virtual void exprMitlRelease(int, int)=0
virtual void queryEnd()=0
std::vector< std::string > lscTemplateNames
Definition: builder.h:93
virtual void doWhileBegin()=0
virtual void exprSumBegin(const char *name)=0
virtual void caseBegin()=0
virtual void procSelect(const char *id)=0
Definition: builder.h:87
virtual void exprForAllDynamicEnd(const char *name)=0
synchronisation_t
Definition: common.h:263
virtual void iterationEnd(const char *name)=0
virtual void ganttEntryEnd()=0
virtual void typeScalar(PREFIX)=0
Called whenever a scalar type is parsed.
virtual void assertStatement()=0
virtual void exprMITLForAllDynamicEnd(const char *name)=0
virtual void exprMITLExistsDynamicBegin(const char *, const char *)=0
virtual void declTypeDef(const char *name)=0
Used when a typedef declaration was parsed.
virtual void ganttDeclStart(const char *name)=0
virtual void exprPreDecrement()=0
virtual void exprSMCControl(int)=0
virtual void exprMitlAtom()=0
virtual void exprNumOf()=0
virtual void continueStatement()=0
virtual void exprNary(Constants::kind_t, uint32_t num)=0
virtual void instanceName(const char *name, bool templ=true)=0
virtual void exprSumDynamicEnd(const char *name)=0
virtual void procProb()=0
virtual void declDynamicTemplate(std::string)=0
Dynamic.
virtual void exprArray()=0
virtual void exprSumEnd(const char *name)=0
virtual void exprMitlUntil(int, int)=0
virtual void defaultBegin()=0
virtual void instanceNameBegin(const char *name)=0
virtual void exprPostDecrement()=0
virtual void defaultChanPriority()=0
virtual void exprPreIncrement()=0
virtual void typeClock(PREFIX)=0
Called whenever a clock type is parsed.
virtual void declProgress(bool hasGuard)=0
Guard progress measure declaration.
virtual void typePop()=0
Pop type at the topof the type stack.
virtual void exprMitlDisj()=0
Definition: builder.h:86
virtual void exprScenario(const char *name)=0
virtual void procLscUpdate()=0
virtual void exprNat(int32_t)=0
virtual void switchEnd()=0
TypeException(std::string)
Definition: typeexception.cpp:26
virtual void iterationBegin(const char *name)=0
int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *, bool newxta)
Parse the file with the given name assuming it is in the XML format, reporting the system to the give...
Definition: xmlreader.cpp:1323
virtual void property()=0
virtual void exprSpawn(int)=0
virtual void exprExistsBegin(const char *name)=0
virtual void exprForAllEnd(const char *name)=0
The ParserBuilder interface is used by the parser to output the parsed system.
Definition: builder.h:79
virtual void beginChanPriority()=0
virtual void exprForAllBegin(const char *name)=0
virtual void beforeUpdate()=0
virtual void procEdgeEnd(const char *from, const char *to)=0
virtual void declFuncEnd()=0
virtual void declFieldInit(const char *name)=0
virtual void addPosition(uint32_t position, uint32_t offset, uint32_t line, std::string path)=0
Add mapping from an absolute position to a relative XML element.
virtual void declVar(const char *name, bool init)=0
Called to when a variable declaration has been parsed.
virtual void exprDouble(double)=0
virtual void exprFalse()=0
virtual void exprBuiltinFunction1(Constants::kind_t)=0
virtual void switchBegin()=0
virtual void typeInt(PREFIX)=0
Called whenever an integer type is parsed.
virtual void exprMITLForAllDynamicBegin(const char *, const char *)=0
virtual void exprMitlNext()=0
virtual void typeDuplicate()=0
Duplicate type at the top of the type stack.
virtual void procBegin(const char *name, const bool isTA=true, const std::string type="", const std::string mode="")=0
int32_t parseProperty(const char *str, UTAP::ParserBuilder *aParserBuilder, const std::string &xpath="")
Parse properties from a buffer.
Definition: parser.cc:7818
virtual void typeName(PREFIX, const char *name)=0
Called when a type name has been parsed.
virtual void procEnd()=0
virtual void emptyStatement()=0
virtual void exprForeachDynamicBegin(const char *, const char *)=0
virtual void ganttEntrySelect(const char *id)=0
virtual void typeChannel(PREFIX)=0
Called whenever a channel type is parsed.
int32_t parseXTA(FILE *, UTAP::ParserBuilder *, bool newxta)
Parse a file in the XTA format, reporting the system to the given implementation of the the ParserBui...
Definition: parser.cc:7810
virtual void ifEnd(bool)=0
virtual void forEnd()=0
virtual void exprDeadlock()=0
virtual void exprSync(Constants::synchronisation_t type)=0
virtual void declParameter(const char *name, bool ref)=0
virtual void typeStruct(PREFIX, uint32_t fields)=0
Called when a struct-type has been parsed.
virtual void ganttDeclSelect(const char *id)=0
virtual void done()=0
virtual void queryComment(const char *comment)=0
virtual void whileBegin()=0
virtual void declInitialiserList(uint32_t num)=0
virtual void exprMitlBox(int, int)=0
virtual void exprProbaQualitative(int, Constants::kind_t, Constants::kind_t, double)=0
virtual void procPriority(const char *)=0
virtual void whileEnd()=0
virtual ~ParserBuilder()
Definition: builder.h:95
virtual void exprForAllDynamicBegin(const char *, const char *)=0
virtual void procStateCommit(const char *name)=0
virtual void exprProbaQuantitative(int, Constants::kind_t, bool=false)=0
virtual void exprProbaExpected(int, const char *)=0
virtual void exprMitlDiamond(int, int)=0
virtual void instantiationEnd(const char *id, size_t parameters, const char *templ, size_t arguments)=0
virtual void procEdgeBegin(const char *from, const char *to, const bool control, const char *actname="")=0
virtual void exprMitlConj()=0
virtual void procState(const char *name, bool hasInvariant, bool hasER)=0
virtual void afterUpdate()=0
virtual void exprTrue()=0
virtual void procStateInit(const char *name)=0
virtual void exprMitlFormula()=0
virtual void setPosition(uint32_t a, uint32_t b)=0
Sets the current position.
virtual void procSync(Constants::synchronisation_t type)=0
virtual void addChanPriority(char separator)=0
virtual void declIO(const char *, int, int)=0
Definition: builder.h:91
virtual void typeArrayOfSize(size_t)=0
Called to create an array type.
virtual void hasPrechart(const bool pch)=0