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

📄 dolphout.dlp

📁 Full support for extended regular expressions (those with intersection and complement); Support for
💻 DLP
字号:

start_conditions MAIN, CPP_CODE;

append_data_member=true;
store_lexeme_in_string=false;
allow_inclusion_cycle_between_whale_and_dolphin=false;

code_in_class={ int brace_count; };
code_in_constructor={ brace_count=0; };

any-char -> '\t' | '\n' | '\r' | condition(c>=' ');
digit -> "0".."9";
hex-digit -> digit | "A".."F" | "a".."f";
non-digit -> "A".."Z" | "a".."z" | "_";
whitespace-char -> '\t' | '\n' | '\r' | ' ';
s-char -> condition(c>=' ' & c!='"' & c!="\\" & c<=255) |
	"\\" condition(c>=' ' & c<=255);
c-char -> condition(c>=' ' & c!="'" & c!="\\" & c<=255) |
	"\\" condition(c>=' ' & c<=255);

c-comment -> "/*" (any-char* & ~contains("*/")) "*/";
cpp-comment -> "//" condition(c in any-char & c!='\n')* '\n';
whitespace -> (whitespace-char | c-comment | cpp-comment)+;

identifier -> non-digit (non-digit | digit | "-")* & ~(#* "-" | "-" #*);
number -> ["-"] digit+;
hex-number -> "0x" hex-digit+;
string -> '"' s-char* '"' | "'" c-char* "'";
old-style-cpp-code -> "@@" (any-char* & ~contains("@@")) "@@";

whitespace <MAIN> ==> { };
error ==> {
	if(start_condition==CPP_CODE)
		cout << "Lexical error in code starting at line " << line()
			<< " column " << column() << ".\n";
	else
		cout << "Lexical error at line " << line()
			<< " column " << column() << ".\n";
	
	return make_token<Whale::TerminalError>();
};
eof ==> {
	if(start_condition==CPP_CODE)
	{
		cout << "End of file encountered while reading code starting "
			<< "at line " << line() << " column " << column() << ".\n";
		set_start_condition(MAIN);
		return make_token<Whale::TerminalError>();
	}
	else
		return make_token<Whale::TerminalEOF>();
};

"return"<MAIN> ==> TerminalKwReturn;
"skip"<MAIN> ==> TerminalKwSkip;
"append"<MAIN> ==> TerminalKwAppend;
"condition"<MAIN> ==> TerminalKwCondition;
"range"<MAIN> ==> TerminalKwRange;
"contains"<MAIN> ==> TerminalKwContains;
"eof"<MAIN> ==> TerminalKwEof;
"error"<MAIN> ==> TerminalKwError;
"in"<MAIN> ==> TerminalKwIn;
"true"<MAIN> ==> TerminalKwTrue;
"false"<MAIN> ==> TerminalKwFalse;
"start_conditions"<MAIN> ==> TerminalKwStartConditions;

"e" | "epsilon" <MAIN> ==> TerminalE;

keyword -> "return" | "skip" | "append" | "condition" | "range" |
	"contains" | "eof" | "error" | "in" | "true" | "false" |
	"start_conditions" | "e" | "epsilon";

"::=" | "->" <MAIN> ==> TerminalArrow;
";"<MAIN> ==> TerminalSemicolon;
","<MAIN> ==> TerminalComma;
"|"<MAIN> ==> TerminalOr;
"&"<MAIN> ==> TerminalAnd;
"~"<MAIN> ==> TerminalNot;
"#"<MAIN> ==> TerminalSharpSign;
"@"<MAIN> ==> TerminalCommercialAt;
"/"<MAIN> ==> TerminalSlash;
".."<MAIN> ==> TerminalTwoDots;

"<"<MAIN> ==> TerminalLess;
">"<MAIN> ==> TerminalGreater;
"<="<MAIN> ==> TerminalLessOrEqual;
">="<MAIN> ==> TerminalGreaterOrEqual;
"=="<MAIN> ==> TerminalEqual;
"!="<MAIN> ==> TerminalNotEqual;

"("<MAIN> ==> TerminalLeftParenthesis;
")"<MAIN> ==> TerminalRightParenthesis;
"["<MAIN> ==> TerminalLeftBracket;
"]"<MAIN> ==> TerminalRightBracket;
"*"<MAIN> ==> TerminalLoneAsterisk;
"+"<MAIN> ==> TerminalLonePlus;
"==>" | "=>" <MAIN> ==> TerminalImplication;
"="<MAIN> ==> TerminalAssign;

string<MAIN> ==> TerminalString;
'"' s-char* | "'" c-char* <MAIN> ==> {
	cout << "Unterminated string at line " << line()
		<< " column " << column() << ".\n";
	
	return make_token<Whale::TerminalError>();
};

number<MAIN> ==> TerminalNumber;
hex-number<MAIN> ==> TerminalHexNumber;
identifier & ~keyword <MAIN> ==> TerminalId;

old-style-cpp-code <MAIN> ==> TerminalCode;
"{"<MAIN> ==> {
	set_start_condition(CPP_CODE);
	brace_count=1;
	append=true;
};
"{"<CPP_CODE> ==> { brace_count++; append=true; };
"}"<CPP_CODE> ==> {
	brace_count--;
	if(brace_count==0)
	{
		set_start_condition(MAIN);
		return make_token<Whale::TerminalCode>();
	}
	else
		append=true;
};

(whitespace | string | any-char+ & ~contains("{" | "}" | "/*" | "//" | '"' |
	"'") & ~(any-char* "/"))+ <CPP_CODE> ==> { append=true; };

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -