⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.h

📁 Full support for extended regular expressions (those with intersection and complement); Support for
💻 H
📖 第 1 页 / 共 2 页
字号:

/* 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 + -