Commit 7c1f8233 authored by snuverink_j's avatar snuverink_j

Merge branch '584-parse-error-in-vffa-1-in' into 'master'

Resolve "parse error in VFFA-1.in"

Closes #584

See merge request !418
parents e486cc0b 9397abf2
// ------------------------------------------------------------------------
// $RCSfile: LineTemplate.cpp,v $
// ------------------------------------------------------------------------
// $Revision: 1.2 $
// ------------------------------------------------------------------------
// Copyright: see Copyright.readme
// ------------------------------------------------------------------------
// //
// Class: LineTemplate // Class LineTemplate
// The class for storage of OPAL beam lines with arguments. //
// An ``archetype'' for a OPAL beam line with arguments.
// The model is stored in form of a MacroStream. A call to the macro line
// is expanded by first replacing the arguments, and then parsing the
// resulting stream as a LINE definition.
//
// Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
// //
// ------------------------------------------------------------------------ // All rights reserved
// //
// $Date: 2000/03/29 10:41:39 $ // This file is part of OPAL.
// $Author: opal $ //
// OPAL is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// You should have received a copy of the GNU General Public License
// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
// //
// ------------------------------------------------------------------------
#include "Lines/LineTemplate.h" #include "Lines/LineTemplate.h"
#include "Utility/PAssert.h"
#include "AbstractObjects/OpalData.h" #include "AbstractObjects/OpalData.h"
#include "Lines/Line.h" #include "Lines/Line.h"
#include "Parser/SimpleStatement.h" #include "Parser/SimpleStatement.h"
#include "Utilities/ParseError.h" #include "Utilities/ParseError.h"
#include <vector> #include <vector>
#include <cassert>
// Class LineTemplate
// ------------------------------------------------------------------------
LineTemplate::LineTemplate(): LineTemplate::LineTemplate():
Macro(0, "LINE", Macro(0, "LINE",
...@@ -110,7 +114,8 @@ Object *LineTemplate::makeTemplate(const std::string &, TokenStream &, Statement ...@@ -110,7 +114,8 @@ Object *LineTemplate::makeTemplate(const std::string &, TokenStream &, Statement
void LineTemplate::parseTemplate(TokenStream &, Statement &statement) { void LineTemplate::parseTemplate(TokenStream &, Statement &statement) {
parseFormals(statement); parseFormals(statement);
assert(statement.keyword("LINE")); bool isLine = statement.keyword("LINE");
PAssert(isLine);
// Store the template list. // Store the template list.
Token token = statement.getCurrent(); Token token = statement.getCurrent();
...@@ -128,8 +133,7 @@ void LineTemplate::parseTemplate(TokenStream &, Statement &statement) { ...@@ -128,8 +133,7 @@ void LineTemplate::parseTemplate(TokenStream &, Statement &statement) {
body.append(token); body.append(token);
} }
} else { } else {
throw ParseError("Line::makeTemplate()", throw ParseError("LineTemplate::parseTemplate()",
"Equals sign '=' expected."); "Equals sign '=' expected.");
} }
}
} \ No newline at end of file
#ifndef OPAL_LineTemplate_HH
#define OPAL_LineTemplate_HH
// ------------------------------------------------------------------------
// $RCSfile: LineTemplate.h,v $
// ------------------------------------------------------------------------
// $Revision: 1.2 $
// ------------------------------------------------------------------------
// Copyright: see Copyright.readme
// ------------------------------------------------------------------------
// //
// Class: LineTemplate // Class LineTemplate
//
// An ``archetype'' for a OPAL beam line with arguments.
// The model is stored in form of a MacroStream. A call to the macro line
// is expanded by first replacing the arguments, and then parsing the
// resulting stream as a LINE definition.
//
// Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
//
// All rights reserved
// //
// ------------------------------------------------------------------------ // This file is part of OPAL.
// //
// $Date: 2000/03/29 10:41:40 $ // OPAL is free software: you can redistribute it and/or modify
// $Author: opal $ // it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// //
// ------------------------------------------------------------------------ // You should have received a copy of the GNU General Public License
// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
//
#ifndef OPAL_LineTemplate_HH
#define OPAL_LineTemplate_HH
#include "OpalParser/Macro.h" #include "OpalParser/Macro.h"
#include "OpalParser/MacroStream.h" #include "OpalParser/MacroStream.h"
...@@ -25,14 +31,6 @@ class Line; ...@@ -25,14 +31,6 @@ class Line;
class Statement; class Statement;
class TokenStream; class TokenStream;
// Class LineTemplate
// ------------------------------------------------------------------------
/// An ``archetype'' for a OPAL beam line with arguments.
// The model is stored in form of a MacroStream. A call to the macro line
// is expanded by first replacing the arguments, and then parsing the
// resulting stream as a LINE definition.
class LineTemplate: public Macro { class LineTemplate: public Macro {
friend class Line; friend class Line;
...@@ -73,4 +71,4 @@ private: ...@@ -73,4 +71,4 @@ private:
MacroStream body; MacroStream body;
}; };
#endif // OPAL_LineTemplate_HH #endif // OPAL_LineTemplate_HH
\ No newline at end of file
// ------------------------------------------------------------------------
// $RCSfile: SequenceTemplate.cpp,v $
// ------------------------------------------------------------------------
// $Revision: 1.2 $
// ------------------------------------------------------------------------
// Copyright: see Copyright.readme
// ------------------------------------------------------------------------
// //
// Class: SequenceTemplate // Class SequenceTemplate
// The class for storage of OPAL beam sequences with arguments.
// //
// ------------------------------------------------------------------------ // An ``archetype'' for a SEQUENCE with arguments.
// The model is stored in form of a MacroStream. A call to the macro
// sequence is expanded by first replacing the arguments, and then parsing
// the resulting stream as a SEQUENCE definition.
// //
// $Date: 2000/03/29 10:41:41 $ // Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
// $Author: opal $
// //
// ------------------------------------------------------------------------ // All rights reserved
//
// This file is part of OPAL.
//
// OPAL is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// You should have received a copy of the GNU General Public License
// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
//
#include "Lines/SequenceTemplate.h" #include "Lines/SequenceTemplate.h"
#include "Utility/PAssert.h"
#include "AbstractObjects/OpalData.h" #include "AbstractObjects/OpalData.h"
#include "Lines/Sequence.h" #include "Lines/Sequence.h"
#include "Lines/SequenceParser.h" #include "Lines/SequenceParser.h"
...@@ -25,7 +34,6 @@ ...@@ -25,7 +34,6 @@
#include "Parser/SimpleStatement.h" #include "Parser/SimpleStatement.h"
#include "Utilities/ParseError.h" #include "Utilities/ParseError.h"
#include <vector> #include <vector>
#include <cassert>
// Class SequenceTemplate // Class SequenceTemplate
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
...@@ -117,7 +125,8 @@ Object *SequenceTemplate::makeTemplate ...@@ -117,7 +125,8 @@ Object *SequenceTemplate::makeTemplate
void SequenceTemplate::parseTemplate(TokenStream &is, Statement &statement) { void SequenceTemplate::parseTemplate(TokenStream &is, Statement &statement) {
// Save the formals. // Save the formals.
parseFormals(statement); parseFormals(statement);
assert(statement.keyword("SEQUENCE")); bool isSequence = statement.keyword("SEQUENCE");
PAssert(isSequence);
// Parse the sequence header. // Parse the sequence header.
Object::parse(statement); Object::parse(statement);
...@@ -140,4 +149,4 @@ void SequenceTemplate::parseTemplate(TokenStream &is, Statement &statement) { ...@@ -140,4 +149,4 @@ void SequenceTemplate::parseTemplate(TokenStream &is, Statement &statement) {
} }
token = is.readToken(); token = is.readToken();
} }
} }
\ No newline at end of file
#ifndef OPAL_SequenceTemplate_HH
#define OPAL_SequenceTemplate_HH
// ------------------------------------------------------------------------
// $RCSfile: SequenceTemplate.h,v $
// ------------------------------------------------------------------------
// $Revision: 1.2 $
// ------------------------------------------------------------------------
// Copyright: see Copyright.readme
// ------------------------------------------------------------------------
// //
// Class: SequenceTemplate // Class SequenceTemplate
//
// An ``archetype'' for a SEQUENCE with arguments.
// The model is stored in form of a MacroStream. A call to the macro
// sequence is expanded by first replacing the arguments, and then parsing
// the resulting stream as a SEQUENCE definition.
//
// Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
//
// All rights reserved
// //
// ------------------------------------------------------------------------ // This file is part of OPAL.
// //
// $Date: 2000/03/29 10:41:42 $ // OPAL is free software: you can redistribute it and/or modify
// $Author: opal $ // it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// //
// ------------------------------------------------------------------------ // You should have received a copy of the GNU General Public License
// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
//
#ifndef OPAL_SequenceTemplate_HH
#define OPAL_SequenceTemplate_HH
#include "OpalParser/Macro.h" #include "OpalParser/Macro.h"
#include "Parser/SimpleStatement.h" #include "Parser/SimpleStatement.h"
...@@ -27,14 +33,6 @@ class Sequence; ...@@ -27,14 +33,6 @@ class Sequence;
class Statement; class Statement;
class TokenStream; class TokenStream;
// Class SequenceTemplate
// ------------------------------------------------------------------------
/// An ``archetype'' for a SEQUENCE with arguments.
// The model is stored in form of a MacroStream. A call to the macro
// sequence is expanded by first replacing the arguments, and then parsing
// the resulting stream as a SEQUENCE definition.
class SequenceTemplate: public Macro { class SequenceTemplate: public Macro {
friend class Sequence; friend class Sequence;
...@@ -74,4 +72,4 @@ private: ...@@ -74,4 +72,4 @@ private:
MacroStream body; MacroStream body;
}; };
#endif // OPAL_SequenceTemplate_HH #endif // OPAL_SequenceTemplate_HH
\ No newline at end of file
// ------------------------------------------------------------------------
// $RCSfile: MacroCmd.cpp,v $
// ------------------------------------------------------------------------
// $Revision: 1.1.1.1 $
// ------------------------------------------------------------------------
// Copyright: see Copyright.readme
// ------------------------------------------------------------------------
// //
// Class: MacroCmd // Class MacroCmd
//
// This class parses the MACRO command.
// Encapsulate the buffer for the ``archetypes'' of all macros.
// The macro is stored as a MacroStream. For execution, first the
// parameters are replaced, then the resulting stream is sent to the parser.
//
// Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
//
// All rights reserved
//
// This file is part of OPAL.
// //
// ------------------------------------------------------------------------ // OPAL is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// //
// $Date: 2000/03/27 09:33:43 $ // You should have received a copy of the GNU General Public License
// $Author: Andreas Adelmann $ // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
// //
// ------------------------------------------------------------------------
#include "OpalParser/MacroCmd.h" #include "OpalParser/MacroCmd.h"
#include "Utility/PAssert.h"
#include "AbstractObjects/OpalData.h" #include "AbstractObjects/OpalData.h"
#include "OpalParser/OpalParser.h" #include "OpalParser/OpalParser.h"
#include "Parser/Statement.h" #include "Parser/Statement.h"
#include "Utilities/ParseError.h" #include "Utilities/ParseError.h"
#include <vector> #include <vector>
#include <cassert>
// Class MacroCmd
// ------------------------------------------------------------------------
MacroCmd::MacroCmd(): MacroCmd::MacroCmd():
Macro(0u, "MACRO", Macro(0u, "MACRO",
...@@ -99,7 +104,8 @@ Object *MacroCmd::makeTemplate ...@@ -99,7 +104,8 @@ Object *MacroCmd::makeTemplate
macro->parseFormals(statement); macro->parseFormals(statement);
// Parse macro body-> // Parse macro body->
assert(statement.keyword("MACRO")); bool isMacro = statement.keyword("MACRO");
PAssert(isMacro);
Token token; Token token;
if(statement.delimiter('{')) { if(statement.delimiter('{')) {
...@@ -126,4 +132,4 @@ Object *MacroCmd::makeTemplate ...@@ -126,4 +132,4 @@ Object *MacroCmd::makeTemplate
} }
return macro; return macro;
} }
\ No newline at end of file
#ifndef CLASSIC_MacroCmd_HH
#define CLASSIC_MacroCmd_HH
// ------------------------------------------------------------------------
// $RCSfile: MacroCmd.h,v $
// ------------------------------------------------------------------------
// $Revision: 1.1.1.1 $
// ------------------------------------------------------------------------
// Copyright: see Copyright.readme
// ------------------------------------------------------------------------
// //
// Class: MacroCmd // Class MacroCmd
// //
// ------------------------------------------------------------------------ // This class parses the MACRO command.
// Encapsulate the buffer for the ``archetypes'' of all macros.
// The macro is stored as a MacroStream. For execution, first the
// parameters are replaced, then the resulting stream is sent to the parser.
// //
// $Date: 2000/03/27 09:33:43 $ // Copyright (c) 2008 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
// $Author: Andreas Adelmann $
// //
// ------------------------------------------------------------------------ // All rights reserved
//
// This file is part of OPAL.
//
// OPAL is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// You should have received a copy of the GNU General Public License
// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
//
#ifndef CLASSIC_MacroCmd_HH
#define CLASSIC_MacroCmd_HH
#include "OpalParser/Macro.h" #include "OpalParser/Macro.h"
#include "OpalParser/MacroStream.h" #include "OpalParser/MacroStream.h"
#include "MemoryManagement/Pointer.h" #include "MemoryManagement/Pointer.h"
#include <iosfwd> #include <iosfwd>
#include <string>
// Class MacroCmd // Class MacroCmd
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
/// Encapsulate the buffer for the ``archetypes'' of all macros.
// The macro is stored as a MacroStream. For execution, first the
// parameters are replaced, then the resulting stream is sent to the parser.
class MacroCmd: public Macro { class MacroCmd: public Macro {
...@@ -65,4 +67,4 @@ private: ...@@ -65,4 +67,4 @@ private:
const Parser *itsParser; const Parser *itsParser;
}; };
#endif // CLASSIC_MacroCmd_HH #endif // CLASSIC_MacroCmd_HH
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment