Skip to content
Snippets Groups Projects
Commit 325cb400 authored by Ronald Charles Moore's avatar Ronald Charles Moore
Browse files

cleaned up

parent fd2e4ca5
No related branches found
No related tags found
No related merge requests found
File deleted
File deleted
File deleted
// A Bison parser, made by GNU Bison 3.5.4.
// Locations for Bison parsers in C++
// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
// This program 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.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
/**
** \file location.hh
** Define the yy::location class.
*/
#ifndef YY_YY_LOCATION_HH_INCLUDED
# define YY_YY_LOCATION_HH_INCLUDED
# include <iostream>
# include <string>
# ifndef YY_NULLPTR
# if defined __cplusplus
# if 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# else
# define YY_NULLPTR ((void*)0)
# endif
# endif
namespace yy {
#line 58 "location.hh"
/// A point in a source file.
class position
{
public:
/// Type for line and column numbers.
typedef int counter_type;
/// Construct a position.
explicit position (std::string* f = YY_NULLPTR,
counter_type l = 1,
counter_type c = 1)
: filename (f)
, line (l)
, column (c)
{}
/// Initialization.
void initialize (std::string* fn = YY_NULLPTR,
counter_type l = 1,
counter_type c = 1)
{
filename = fn;
line = l;
column = c;
}
/** \name Line and Column related manipulators
** \{ */
/// (line related) Advance to the COUNT next lines.
void lines (counter_type count = 1)
{
if (count)
{
column = 1;
line = add_ (line, count, 1);
}
}
/// (column related) Advance to the COUNT next columns.
void columns (counter_type count = 1)
{
column = add_ (column, count, 1);
}
/** \} */
/// File name to which this position refers.
std::string* filename;
/// Current line number.
counter_type line;
/// Current column number.
counter_type column;
private:
/// Compute max (min, lhs+rhs).
static counter_type add_ (counter_type lhs, counter_type rhs, counter_type min)
{
return lhs + rhs < min ? min : lhs + rhs;
}
};
/// Add \a width columns, in place.
inline position&
operator+= (position& res, position::counter_type width)
{
res.columns (width);
return res;
}
/// Add \a width columns.
inline position
operator+ (position res, position::counter_type width)
{
return res += width;
}
/// Subtract \a width columns, in place.
inline position&
operator-= (position& res, position::counter_type width)
{
return res += -width;
}
/// Subtract \a width columns.
inline position
operator- (position res, position::counter_type width)
{
return res -= width;
}
/// Compare two position objects.
inline bool
operator== (const position& pos1, const position& pos2)
{
return (pos1.line == pos2.line
&& pos1.column == pos2.column
&& (pos1.filename == pos2.filename
|| (pos1.filename && pos2.filename
&& *pos1.filename == *pos2.filename)));
}
/// Compare two position objects.
inline bool
operator!= (const position& pos1, const position& pos2)
{
return !(pos1 == pos2);
}
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param pos a reference to the position to redirect
*/
template <typename YYChar>
std::basic_ostream<YYChar>&
operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
{
if (pos.filename)
ostr << *pos.filename << ':';
return ostr << pos.line << '.' << pos.column;
}
/// Two points in a source file.
class location
{
public:
/// Type for line and column numbers.
typedef position::counter_type counter_type;
/// Construct a location from \a b to \a e.
location (const position& b, const position& e)
: begin (b)
, end (e)
{}
/// Construct a 0-width location in \a p.
explicit location (const position& p = position ())
: begin (p)
, end (p)
{}
/// Construct a 0-width location in \a f, \a l, \a c.
explicit location (std::string* f,
counter_type l = 1,
counter_type c = 1)
: begin (f, l, c)
, end (f, l, c)
{}
/// Initialization.
void initialize (std::string* f = YY_NULLPTR,
counter_type l = 1,
counter_type c = 1)
{
begin.initialize (f, l, c);
end = begin;
}
/** \name Line and Column related manipulators
** \{ */
public:
/// Reset initial location to final location.
void step ()
{
begin = end;
}
/// Extend the current location to the COUNT next columns.
void columns (counter_type count = 1)
{
end += count;
}
/// Extend the current location to the COUNT next lines.
void lines (counter_type count = 1)
{
end.lines (count);
}
/** \} */
public:
/// Beginning of the located region.
position begin;
/// End of the located region.
position end;
};
/// Join two locations, in place.
inline location&
operator+= (location& res, const location& end)
{
res.end = end.end;
return res;
}
/// Join two locations.
inline location
operator+ (location res, const location& end)
{
return res += end;
}
/// Add \a width columns to the end position, in place.
inline location&
operator+= (location& res, location::counter_type width)
{
res.columns (width);
return res;
}
/// Add \a width columns to the end position.
inline location
operator+ (location res, location::counter_type width)
{
return res += width;
}
/// Subtract \a width columns to the end position, in place.
inline location&
operator-= (location& res, location::counter_type width)
{
return res += -width;
}
/// Subtract \a width columns to the end position.
inline location
operator- (location res, location::counter_type width)
{
return res -= width;
}
/// Compare two location objects.
inline bool
operator== (const location& loc1, const location& loc2)
{
return loc1.begin == loc2.begin && loc1.end == loc2.end;
}
/// Compare two location objects.
inline bool
operator!= (const location& loc1, const location& loc2)
{
return !(loc1 == loc2);
}
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param loc a reference to the location to redirect
**
** Avoid duplicate information.
*/
template <typename YYChar>
std::basic_ostream<YYChar>&
operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
{
location::counter_type end_col
= 0 < loc.end.column ? loc.end.column - 1 : 0;
ostr << loc.begin;
if (loc.end.filename
&& (!loc.begin.filename
|| *loc.begin.filename != *loc.end.filename))
ostr << '-' << loc.end.filename << ':' << loc.end.line << '.' << end_col;
else if (loc.begin.line < loc.end.line)
ostr << '-' << loc.end.line << '.' << end_col;
else if (loc.begin.column < end_col)
ostr << '-' << end_col;
return ostr;
}
} // yy
#line 331 "location.hh"
#endif // !YY_YY_LOCATION_HH_INCLUDED
This diff is collapsed.
This diff is collapsed.
File deleted
Grammar
0 $accept: unit "end of file"
1 unit: assignments exp
2 assignments: %empty
3 | assignments assignment
4 assignment: "identifier" ":=" exp
5 exp: "number"
6 | "identifier"
7 | exp "+" exp
8 | exp "-" exp
9 | exp "*" exp
10 | exp "/" exp
11 | "(" exp ")"
Terminals, with rules where they appear
"end of file" (0) 0
error (256)
":=" (258) 4
"-" (259) 8
"+" (260) 7
"*" (261) 9
"/" (262) 10
"(" (263) 11
")" (264) 11
"identifier" <std::string> (265) 4 6
"number" <int> (266) 5
Nonterminals, with rules where they appear
$accept (12)
on left: 0
exp <int> (13)
on left: 5 6 7 8 9 10 11
on right: 1 4 7 8 9 10 11
unit (14)
on left: 1
on right: 0
assignments (15)
on left: 2 3
on right: 1 3
assignment (16)
on left: 4
on right: 3
State 0
0 $accept: . unit "end of file"
$default reduce using rule 2 (assignments)
unit go to state 1
assignments go to state 2
State 1
0 $accept: unit . "end of file"
"end of file" shift, and go to state 3
State 2
1 unit: assignments . exp
3 assignments: assignments . assignment
"(" shift, and go to state 4
"identifier" shift, and go to state 5
"number" shift, and go to state 6
exp go to state 7
assignment go to state 8
State 3
0 $accept: unit "end of file" .
$default accept
State 4
11 exp: "(" . exp ")"
"(" shift, and go to state 4
"identifier" shift, and go to state 9
"number" shift, and go to state 6
exp go to state 10
State 5
4 assignment: "identifier" . ":=" exp
6 exp: "identifier" .
":=" shift, and go to state 11
$default reduce using rule 6 (exp)
State 6
5 exp: "number" .
$default reduce using rule 5 (exp)
State 7
1 unit: assignments exp .
7 exp: exp . "+" exp
8 | exp . "-" exp
9 | exp . "*" exp
10 | exp . "/" exp
"-" shift, and go to state 12
"+" shift, and go to state 13
"*" shift, and go to state 14
"/" shift, and go to state 15
$default reduce using rule 1 (unit)
State 8
3 assignments: assignments assignment .
$default reduce using rule 3 (assignments)
State 9
6 exp: "identifier" .
$default reduce using rule 6 (exp)
State 10
7 exp: exp . "+" exp
8 | exp . "-" exp
9 | exp . "*" exp
10 | exp . "/" exp
11 | "(" exp . ")"
"-" shift, and go to state 12
"+" shift, and go to state 13
"*" shift, and go to state 14
"/" shift, and go to state 15
")" shift, and go to state 16
State 11
4 assignment: "identifier" ":=" . exp
"(" shift, and go to state 4
"identifier" shift, and go to state 9
"number" shift, and go to state 6
exp go to state 17
State 12
8 exp: exp "-" . exp
"(" shift, and go to state 4
"identifier" shift, and go to state 9
"number" shift, and go to state 6
exp go to state 18
State 13
7 exp: exp "+" . exp
"(" shift, and go to state 4
"identifier" shift, and go to state 9
"number" shift, and go to state 6
exp go to state 19
State 14
9 exp: exp "*" . exp
"(" shift, and go to state 4
"identifier" shift, and go to state 9
"number" shift, and go to state 6
exp go to state 20
State 15
10 exp: exp "/" . exp
"(" shift, and go to state 4
"identifier" shift, and go to state 9
"number" shift, and go to state 6
exp go to state 21
State 16
11 exp: "(" exp ")" .
$default reduce using rule 11 (exp)
State 17
4 assignment: "identifier" ":=" exp .
7 exp: exp . "+" exp
8 | exp . "-" exp
9 | exp . "*" exp
10 | exp . "/" exp
"-" shift, and go to state 12
"+" shift, and go to state 13
"*" shift, and go to state 14
"/" shift, and go to state 15
$default reduce using rule 4 (assignment)
State 18
7 exp: exp . "+" exp
8 | exp . "-" exp
8 | exp "-" exp .
9 | exp . "*" exp
10 | exp . "/" exp
"*" shift, and go to state 14
"/" shift, and go to state 15
$default reduce using rule 8 (exp)
State 19
7 exp: exp . "+" exp
7 | exp "+" exp .
8 | exp . "-" exp
9 | exp . "*" exp
10 | exp . "/" exp
"*" shift, and go to state 14
"/" shift, and go to state 15
$default reduce using rule 7 (exp)
State 20
7 exp: exp . "+" exp
8 | exp . "-" exp
9 | exp . "*" exp
9 | exp "*" exp .
10 | exp . "/" exp
$default reduce using rule 9 (exp)
State 21
7 exp: exp . "+" exp
8 | exp . "-" exp
9 | exp . "*" exp
10 | exp . "/" exp
10 | exp "/" exp .
$default reduce using rule 10 (exp)
This diff is collapsed.
File deleted
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment