libutap  0.93
Uppaal Timed Automata Parser
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(const std::string& msg): std::runtime_error(msg) {}
43  TypeException(const boost::format& format):
44  std::runtime_error(format.str()) {}
45  };
46 
81  {
82  public:
83  /*********************************************************************
84  * Prefixes
85  */
86  enum PREFIX { PREFIX_NONE = 0,
87  PREFIX_CONST = 1,
88  PREFIX_URGENT = 2,
89  PREFIX_BROADCAST = 4,
90  PREFIX_URGENT_BROADCAST = 6,
91  PREFIX_SYSTEM_META = 8,
92  PREFIX_HYBRID = 16 };
93 
94  std::vector<std::string> lscTemplateNames;
95 
96  virtual ~ParserBuilder() {}
97 
102  virtual void addPosition(
103  uint32_t position, uint32_t offset, uint32_t line,
104  const std::string& path) = 0;
105 
111  virtual void setPosition(uint32_t a, uint32_t b) = 0;
112 
113  // Called when an error is detected
114  virtual void handleError(const std::string&) = 0;
115 
116  // Called when a warning is issued
117  virtual void handleWarning(const std::string&) = 0;
118 
119  void handleWarning(const char *msg, ...);
120 
121  void handleError(const char *msg, ...);
122 
128  virtual bool isType(const char*) = 0;
129 
131  virtual void typeDuplicate() = 0;
132 
134  virtual void typePop() = 0;
135 
139  virtual void typeBool(PREFIX) = 0;
140 
144  virtual void typeInt(PREFIX) = 0;
145 
149  virtual void typeDouble(PREFIX) = 0;
150 
156  virtual void typeBoundedInt(PREFIX) = 0;
157 
161  virtual void typeChannel(PREFIX) = 0;
162 
166  virtual void typeClock(PREFIX) = 0;
167 
171  virtual void typeVoid() = 0;
172 
177  virtual void typeArrayOfSize(size_t) = 0;
178 
183  virtual void typeArrayOfType(size_t) = 0;
184 
189  virtual void typeScalar(PREFIX) = 0;
190 
195  virtual void typeName(PREFIX, const char* name) = 0;
196 
202  virtual void typeStruct(PREFIX, uint32_t fields) = 0;
203 
210  virtual void structField(const char* name) = 0;
211 
216  virtual void declTypeDef(const char* name) = 0;
217 
221  virtual void declVar(const char* name, bool init) = 0;
222 
223  virtual void declInitialiserList(uint32_t num) = 0; // n initialisers
224  virtual void declFieldInit(const char* name) = 0; // 1 initialiser
225 
230  virtual void declProgress(bool hasGuard) = 0;
231 
232  /********************************************************************
233  * Gantt chart declarations
234  */
235  virtual void ganttDeclStart(const char* name) = 0;
236  virtual void ganttDeclSelect(const char *id) = 0;
237  virtual void ganttDeclEnd() = 0;
238  virtual void ganttEntryStart() = 0;
239  virtual void ganttEntrySelect(const char *id) = 0;
240  virtual void ganttEntryEnd() = 0;
241 
242  /********************************************************************
243  * Function declarations
244  */
245  virtual void declParameter(const char* name, bool ref) = 0;
246  virtual void declFuncBegin(const char* name) = 0;
247  virtual void declFuncEnd() = 0; // 1 block
248 
249  /********************************************************************
250  * Process declarations
251  */
252  virtual void procBegin(const char* name, const bool isTA = true,
253  const std::string type = "", const std::string mode = "") = 0; // m parameters
254  virtual void procEnd() = 0; // 1 ProcBody
255  virtual void procState(const char* name, bool hasInvariant, bool hasER) = 0; // 1 expr
256  virtual void procStateCommit(const char* name) = 0; // mark previously decl. state
257  virtual void procStateUrgent(const char* name) = 0; // mark previously decl. state
258  virtual void procStateInit(const char* name) = 0; // mark previously decl. state
259  virtual void procEdgeBegin(const char* from, const char* to, const bool control, const char* actname = "") = 0;
260  virtual void procEdgeEnd(const char* from, const char* to) = 0;
261  virtual void procSelect(const char * id) = 0; // 1 expr
262  virtual void procGuard() = 0; // 1 expr
263  virtual void procSync(Constants::synchronisation_t type) = 0; // 1 expr
264  virtual void procUpdate() = 0; // 1 expr
265  virtual void procProb() = 0;
266  virtual void procBranchpoint(const char* name) = 0;
267  /************************************************************
268  * Process declarations for LSC
269  */
270  virtual void procInstanceLine()= 0;
271  virtual void instanceName(const char* name, bool templ=true)= 0;
272  virtual void instanceNameBegin(const char *name)= 0;
273  virtual void instanceNameEnd(const char *name, size_t arguments)= 0;
274  virtual void procMessage(const char* from, const char* to, const int loc, const bool pch)= 0;
275  virtual void procMessage(Constants::synchronisation_t type) = 0;
276  virtual void procCondition(const std::vector<char*> anchors, const int loc,
277  const bool pch, const bool hot)= 0;
278  virtual void procCondition()= 0; // 1 expr
279  virtual void procLscUpdate(const char* anchor, const int loc, const bool pch)= 0;
280  virtual void procLscUpdate()= 0; // 1 expr
281  virtual void hasPrechart(const bool pch)= 0;
282 
283  /*********************************************************************
284  * Statements
285  */
286  virtual void blockBegin() = 0;
287  virtual void blockEnd() = 0;
288  virtual void emptyStatement() = 0;
289  virtual void forBegin() = 0; // 3 expr
290  virtual void forEnd() = 0; // 1 stat
291  virtual void iterationBegin(const char *name) = 0; // 1 id, 1 type
292  virtual void iterationEnd(const char *name) = 0; // 1 stat
293  virtual void whileBegin() = 0;
294  virtual void whileEnd() = 0; // 1 expr, 1 stat
295  virtual void doWhileBegin() = 0;
296  virtual void doWhileEnd() = 0; // 1 stat, 1 expr
297  virtual void ifBegin() = 0;
298  virtual void ifCondition() = 0; // 1 expr
299  virtual void ifThen() = 0; // 1 expr, 1 (then)
300  virtual void ifEnd(bool elsePart) = 0; // 1 expr, 1 or 2 statements
301  virtual void breakStatement() = 0;
302  virtual void continueStatement() = 0;
303  virtual void switchBegin() = 0;
304  virtual void switchEnd() = 0; // 1 expr, 1+ case/default
305  virtual void caseBegin() = 0;
306  virtual void caseEnd() = 0; // 1 expr, 0+ stat
307  virtual void defaultBegin() = 0;
308  virtual void defaultEnd() = 0; // 0+ statements
309  virtual void exprStatement() = 0; // 1 expr
310  virtual void returnStatement(bool) = 0; // 1 expr if argument is true
311  virtual void assertStatement() = 0; // 1 expr
312 
313  /********************************************************************
314  * Expressions
315  */
316  virtual void exprFalse() = 0;
317  virtual void exprTrue() = 0;
318  virtual void exprDouble(double) = 0;
319  virtual void exprId(const char * varName) = 0;
320  virtual void exprNat(int32_t) = 0; // natural number
321  virtual void exprCallBegin() = 0;
322  virtual void exprCallEnd(uint32_t n) = 0; // n exprs as arguments
323  virtual void exprArray() = 0; // 2 expr
324  virtual void exprPostIncrement() = 0; // 1 expr
325  virtual void exprPreIncrement() = 0; // 1 expr
326  virtual void exprPostDecrement() = 0; // 1 expr
327  virtual void exprPreDecrement() = 0; // 1 expr
328  virtual void exprAssignment(Constants::kind_t op) = 0; // 2 expr
329  virtual void exprUnary(Constants::kind_t unaryop) = 0; // 1 expr
330  virtual void exprBinary(Constants::kind_t binaryop) = 0; // 2 expr
331  virtual void exprNary(Constants::kind_t, uint32_t num) = 0; // n expr
332  virtual void exprScenario(const char* name) = 0; //LSC
333  virtual void exprTernary(Constants::kind_t ternaryop, bool firstMissing = false) = 0; // 3 expr
334  virtual void exprInlineIf() = 0; // 3 expr
335  virtual void exprComma() = 0; // 2 expr
336  virtual void exprDot(const char *) = 0; // 1 expr
337  virtual void exprDeadlock() = 0;
338  virtual void exprForAllBegin(const char *name) = 0;
339  virtual void exprForAllEnd(const char *name) = 0;
340  virtual void exprExistsBegin(const char *name) = 0;
341  virtual void exprExistsEnd(const char *name) = 0;
342  virtual void exprSumBegin(const char *name) = 0;
343  virtual void exprSumEnd(const char *name) = 0;
344 
345  // Extension for ecdar.
346  virtual void exprSync(Constants::synchronisation_t type) = 0;
347  virtual void declIO(const char*,int,int) = 0;
348 
349  // Extension for SMC.
350  virtual void exprSMCControl() = 0;
351  virtual void exprProbaQualitative(Constants::kind_t pathQuant,
352  Constants::kind_t compType,
353  double probBound) = 0;
354  virtual void exprProbaQuantitative(Constants::kind_t pathQuant) = 0;
355  virtual void exprProbaCompare(Constants::kind_t pathQuant1,
356  Constants::kind_t pathQuant2) = 0;
357  virtual void exprProbaExpected(const char* aggregatingOp) = 0;
358  virtual void exprBuiltinFunction1(Constants::kind_t) = 0;
359  virtual void exprBuiltinFunction2(Constants::kind_t) = 0;
360  virtual void exprBuiltinFunction3(Constants::kind_t) = 0;
361 
362  //MITL Extensions
363  virtual void exprMitlFormula ( ) = 0;
364  virtual void exprMitlUntil (int,int) = 0;
365  virtual void exprMitlRelease (int,int) = 0;
366  virtual void exprMitlDisj () = 0;
367  virtual void exprMitlConj () = 0;
368  virtual void exprMitlNext () = 0;
369  virtual void exprMitlAtom () = 0;
370  virtual void exprMitlDiamond (int,int) = 0;
371  virtual void exprMitlBox (int,int) = 0;
372 
373  virtual void exprSimulate(int,bool=false,int = 0) = 0;
374 
375  /********************************************************************
376  * System declaration
377  */
378  virtual void instantiationBegin(
379  const char* id, size_t parameters, const char* templ) = 0;
380  virtual void instantiationEnd(
381  const char* id, size_t parameters, const char* templ, size_t arguments) = 0;
382  virtual void process(const char*) = 0;
383  virtual void processListEnd() = 0;
384  virtual void done() = 0; // marks the end of the file
385 
386  virtual void handleExpect(const char* text) = 0;
387 
388  /********************************************************************
389  * Properties
390  */
391  virtual void property() = 0;
392  virtual void scenario(const char*) = 0; //LSC
393  virtual void parse(const char*) = 0; //LSC
394 
395  /********************************************************************
396  * Guiding
397  */
398  virtual void beforeUpdate() = 0;
399  virtual void afterUpdate() = 0;
400 
401  /********************************************************************
402  * Priority
403  */
404  virtual void beginChanPriority() = 0;
405  virtual void addChanPriority(char separator) = 0;
406  virtual void defaultChanPriority() = 0;
407  virtual void incProcPriority() = 0;
408  virtual void procPriority(const char*) = 0;
410  virtual void declDynamicTemplate(const std::string&) = 0;
411  virtual void exprSpawn(int ) = 0;
412  virtual void exprExit() = 0;
413  virtual void exprNumOf() = 0;
414  virtual void exprForAllDynamicBegin(const char* ,const char*)=0;
415  virtual void exprForAllDynamicEnd(const char* name)=0;
416  virtual void exprExistsDynamicBegin(const char*,const char* )=0;
417  virtual void exprExistsDynamicEnd(const char* name)=0;
418  virtual void exprSumDynamicBegin(const char*,const char* )=0;
419  virtual void exprSumDynamicEnd(const char* name)=0;
420  virtual void exprForeachDynamicBegin(const char*,const char* )=0;
421  virtual void exprForeachDynamicEnd(const char* name)=0;
422  virtual void exprMITLForAllDynamicBegin(const char*,const char* )=0;
423  virtual void exprMITLForAllDynamicEnd(const char* name)=0;
424  virtual void exprMITLExistsDynamicBegin(const char*,const char*)=0;
425  virtual void exprMITLExistsDynamicEnd(const char* name)=0;
426  virtual void exprDynamicProcessExpr(const char*) = 0;
427 
429  virtual void queryBegin()=0;
430  virtual void queryFormula(const char* formula, const char* location)=0;
431  virtual void queryComment(const char* comment)=0;
432  virtual void queryEnd()=0;
433  };
434 
435 }
436 
444 int32_t parseXTA(FILE *, UTAP::ParserBuilder *, bool newxta);
445 
446 int32_t parseXTA(const char*, UTAP::ParserBuilder *, bool newxta);
447 
455 int32_t parseXTA(const char*, UTAP::ParserBuilder *,
456  bool newxta, UTAP::xta_part_t part,
457  const std::string& xpath);
458 
459 
467 int32_t parseXMLBuffer(const char *buffer, UTAP::ParserBuilder *,
468  bool newxta);
469 
478 int32_t parseXMLFile(const char *filename, UTAP::ParserBuilder *, bool newxta);
479 
485 int32_t parseProperty(const char *str,
486  UTAP::ParserBuilder *aParserBuilder,
487  const std::string& xpath="");
488 
493 int32_t parseProperty(FILE *, UTAP::ParserBuilder *aParserBuilder);
494 
495 
496 #endif
int32_t parseProperty(const char *str, UTAP::ParserBuilder *aParserBuilder, const std::string &xpath="")
Parse properties from a buffer.
Definition: parser.cc:8968
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:1336
The ParserBuilder interface is used by the parser to output the parsed system.
Definition: builder.h:80
xta_part_t
Type for specifying which XTA part to parse (syntax switch)
Definition: common.h:273
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:8960
#define comment
Definition: lexer.cc:856
TypeException(const boost::format &format)
Definition: builder.h:43
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:1325
Exception indicating a type error.
Definition: builder.h:39
TypeException(const std::string &msg)
Definition: builder.h:42
virtual ~ParserBuilder()
Definition: builder.h:96
std::vector< std::string > lscTemplateNames
Definition: builder.h:94
Definition: lexer.cc:817