You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
/*
|
|
* File: IntegerExpressionGrammar.h
|
|
* Author: nafur
|
|
*
|
|
* Created on April 10, 2013, 4:39 PM
|
|
*/
|
|
|
|
#ifndef INTEGEREXPRESSIONGRAMMAR_H
|
|
#define INTEGEREXPRESSIONGRAMMAR_H
|
|
|
|
#include "src/ir/IR.h"
|
|
#include "VariableState.h"
|
|
#include "Includes.h"
|
|
#include "IdentifierGrammars.h"
|
|
|
|
#include <memory>
|
|
|
|
namespace storm {
|
|
namespace parser {
|
|
namespace prism {
|
|
|
|
/*!
|
|
* This grammar parses a (non constant) integer expressions as used in prism models.
|
|
*/
|
|
class IntegerExpressionGrammar : public qi::grammar<Iterator, std::shared_ptr<BaseExpression>(), Skipper, Unused>, public BaseGrammar<IntegerExpressionGrammar> {
|
|
public:
|
|
IntegerExpressionGrammar(std::shared_ptr<VariableState>& state);
|
|
|
|
/*!
|
|
* Switch to second run.
|
|
* Variable names may be any valid identifier in the first run, but only defined variables in the second run.
|
|
*/
|
|
virtual void prepareSecondRun();
|
|
|
|
private:
|
|
qi::rule<Iterator, std::shared_ptr<BaseExpression>(), Skipper, Unused> integerExpression;
|
|
qi::rule<Iterator, std::shared_ptr<BaseExpression>(), qi::locals<bool>, Skipper> integerPlusExpression;
|
|
qi::rule<Iterator, std::shared_ptr<BaseExpression>(), Skipper> integerMultExpression;
|
|
qi::rule<Iterator, std::shared_ptr<BaseExpression>(), Skipper> atomicIntegerExpression;
|
|
qi::rule<Iterator, std::shared_ptr<BaseExpression>(), Skipper> integerVariableExpression;
|
|
};
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif /* INTEGEREXPRESSIONGRAMMAR_H */
|
|
|