?? parser.h
字號:
/* An SLR(1) parser generated by Whale */
#ifndef WHALE_GENERATED_PARSER__PARSER_H
#define WHALE_GENERATED_PARSER__PARSER_H
#include <iostream>
#include <vector>
namespace Whale
{
struct Symbol;
struct Terminal;
struct Nonterminal;
struct TerminalEOF;
struct TerminalError;
struct TerminalId;
struct TerminalString;
struct TerminalNumber;
struct TerminalHexNumber;
struct TerminalCode;
struct TerminalArrow;
struct TerminalSemicolon;
struct TerminalImplication;
struct TerminalAssign;
struct TerminalComma;
struct TerminalSlash;
struct TerminalOr;
struct TerminalAnd;
struct TerminalNot;
struct TerminalLeftParenthesis;
struct TerminalRightParenthesis;
struct TerminalLeftBracket;
struct TerminalRightBracket;
struct TerminalLoneAsterisk;
struct TerminalLonePlus;
struct TerminalSharpSign;
struct TerminalCommercialAt;
struct TerminalTwoDots;
struct TerminalE;
struct TerminalLess;
struct TerminalGreater;
struct TerminalLessOrEqual;
struct TerminalGreaterOrEqual;
struct TerminalEqual;
struct TerminalNotEqual;
struct TerminalKwReturn;
struct TerminalKwSkip;
struct TerminalKwAppend;
struct TerminalKwCode;
struct TerminalKwCall;
struct TerminalKwCondition;
struct TerminalKwRange;
struct TerminalKwContains;
struct TerminalKwIn;
struct TerminalKwEof;
struct TerminalKwError;
struct TerminalKwTrue;
struct TerminalKwFalse;
struct TerminalKwStartConditions;
struct NonterminalS;
struct NonterminalRuleStatement;
struct NonterminalActionStatement;
struct NonterminalStartConditionsStatement;
struct NonterminalOptionStatement;
struct NonterminalInvalidStatement;
struct NonterminalExpression;
struct NonterminalExpressionDisjunction;
struct NonterminalExpressionConjunction;
struct NonterminalExpressionConcatenation;
struct NonterminalExpressionComplement;
struct NonterminalExpressionOmittable;
struct NonterminalExpressionInParentheses;
struct NonterminalExpressionIteration;
struct NonterminalExpressionCondition;
struct NonterminalExpressionRange;
struct NonterminalExpressionContains;
struct NonterminalExpressionEpsilon;
struct NonterminalExpressionSymbol;
struct NonterminalExpressionSharpSign;
struct NonterminalExpressionS;
struct NonterminalExpressionC;
struct NonterminalExpressionC_Disjunction;
struct NonterminalExpressionC_Conjunction;
struct NonterminalExpressionC_Complement;
struct NonterminalExpressionC_InParentheses;
struct NonterminalExpressionC_Comparison;
struct NonterminalExpressionC_In;
struct NonterminalExpressionC_Constant;
struct NonterminalPairOfExpressions;
struct NonterminalStartConditionsExpression;
struct NonterminalStartConditionsExpressionList;
struct NonterminalStartConditionsExpressionAsterisk;
struct NonterminalAction;
struct NonterminalActionReturn;
struct NonterminalActionSkip;
struct NonterminalActionCodeII;
struct Symbol
{
Symbol() : next_sibling(0) {}
virtual bool is_terminal() const =0;
virtual bool is_nonterminal() const =0;
virtual ~Symbol() {}
Symbol *next_sibling;
};
struct Terminal : Symbol
{
int line, column;
char *text;
void print_location(std::ostream &os) const
{
os << "line " << line << " column " << column;
}
bool is_terminal() const { return true; }
bool is_nonterminal() const { return false; }
virtual int number() const =0;
~Terminal();
};
struct Nonterminal : Symbol
{
Nonterminal() : first_child(0) {}
bool is_terminal() const { return false; }
bool is_nonterminal() const { return true; }
virtual int number() const =0;
Symbol *first_child;
~Nonterminal();
};
template<class Body> struct Iterator : Nonterminal
{
std::vector<Body *> body;
};
template<class BodyA, class BodyB> struct PairIterator : Nonterminal
{
std::vector<BodyA *> body_a;
std::vector<BodyB *> body_b;
};
} // namespace Whale
#include "dolphout.h"
#include "intervals.h"
#include <string>
namespace Whale
{
struct Symbol;
struct Terminal;
struct Nonterminal;
struct TerminalEOF : Terminal
{
int number() const { return 0; }
};
struct TerminalError : Terminal
{
int number() const { return 1; }
std::vector<Symbol *> garbage;
int error_position;
};
struct TerminalId : Terminal
{
int number() const { return 2; }
};
struct TerminalString : Terminal
{
int number() const { return 3; }
};
struct TerminalNumber : Terminal
{
int number() const { return 4; }
};
struct TerminalHexNumber : Terminal
{
int number() const { return 5; }
};
struct TerminalCode : Terminal
{
int number() const { return 6; }
};
struct TerminalArrow : Terminal
{
int number() const { return 7; }
};
struct TerminalSemicolon : Terminal
{
int number() const { return 8; }
};
struct TerminalImplication : Terminal
{
int number() const { return 9; }
};
struct TerminalAssign : Terminal
{
int number() const { return 10; }
};
struct TerminalComma : Terminal
{
int number() const { return 11; }
};
struct TerminalSlash : Terminal
{
int number() const { return 12; }
};
struct TerminalOr : Terminal
{
int number() const { return 13; }
};
struct TerminalAnd : Terminal
{
int number() const { return 14; }
};
struct TerminalNot : Terminal
{
int number() const { return 15; }
};
struct TerminalLeftParenthesis : Terminal
{
int number() const { return 16; }
};
struct TerminalRightParenthesis : Terminal
{
int number() const { return 17; }
};
struct TerminalLeftBracket : Terminal
{
int number() const { return 18; }
};
struct TerminalRightBracket : Terminal
{
int number() const { return 19; }
};
struct TerminalLoneAsterisk : Terminal
{
int number() const { return 20; }
};
struct TerminalLonePlus : Terminal
{
int number() const { return 21; }
};
struct TerminalSharpSign : Terminal
{
int number() const { return 22; }
};
struct TerminalCommercialAt : Terminal
{
int number() const { return 23; }
};
struct TerminalTwoDots : Terminal
{
int number() const { return 24; }
};
struct TerminalE : Terminal
{
int number() const { return 25; }
};
struct TerminalLess : Terminal
{
int number() const { return 26; }
};
struct TerminalGreater : Terminal
{
int number() const { return 27; }
};
struct TerminalLessOrEqual : Terminal
{
int number() const { return 28; }
};
struct TerminalGreaterOrEqual : Terminal
{
int number() const { return 29; }
};
struct TerminalEqual : Terminal
{
int number() const { return 30; }
};
struct TerminalNotEqual : Terminal
{
int number() const { return 31; }
};
struct TerminalKwReturn : Terminal
{
int number() const { return 32; }
};
struct TerminalKwSkip : Terminal
{
int number() const { return 33; }
};
struct TerminalKwAppend : Terminal
{
int number() const { return 34; }
};
struct TerminalKwCode : Terminal
{
int number() const { return 35; }
};
struct TerminalKwCall : Terminal
{
int number() const { return 36; }
};
struct TerminalKwCondition : Terminal
{
int number() const { return 37; }
};
struct TerminalKwRange : Terminal
{
int number() const { return 38; }
};
struct TerminalKwContains : Terminal
{
int number() const { return 39; }
};
struct TerminalKwIn : Terminal
{
int number() const { return 40; }
};
struct TerminalKwEof : Terminal
{
int number() const { return 41; }
};
struct TerminalKwError : Terminal
{
int number() const { return 42; }
};
struct TerminalKwTrue : Terminal
{
int number() const { return 43; }
};
struct TerminalKwFalse : Terminal
{
int number() const { return 44; }
};
struct TerminalKwStartConditions : Terminal
{
int number() const { return 45; }
};
struct NonterminalS : Nonterminal
{
struct BodyI : Nonterminal
{
int number() const { return 13; }
Nonterminal *statements;
};
struct IteratorI : Iterator<NonterminalS::BodyI>
{
int number() const { return 14; }
};
int number() const { return 1; }
std::vector<Nonterminal *> statements;
};
struct NonterminalRuleStatement : Nonterminal
{
int number() const { return 2; }
TerminalId *left;
TerminalArrow *arrow;
NonterminalExpression *right;
};
struct NonterminalActionStatement : Nonterminal
{
int number() const { return 3; }
Symbol *expr;
TerminalLess *a4;
NonterminalStartConditionsExpression *start_conditions;
TerminalGreater *a6;
TerminalImplication *arrow;
NonterminalAction *action;
};
struct NonterminalStartConditionsStatement : Nonterminal
{
struct BodyIa : Nonterminal
{
int number() const { return 15; }
TerminalId *names;
};
struct BodyIb : Nonterminal
{
int number() const { return 16; }
};
struct IteratorI : PairIterator<NonterminalStartConditionsStatement::BodyIa, NonterminalStartConditionsStatement::BodyIb>
{
int number() const { return 17; }
};
int number() const { return 4; }
TerminalKwStartConditions *a1;
std::vector<TerminalId *> names;
TerminalSemicolon *a4;
};
struct NonterminalOptionStatement : Nonterminal
{
struct BodyIa : Nonterminal
{
int number() const { return 18; }
Terminal *right;
};
struct BodyIb : Nonterminal
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -