Дипломная работа: Автоматизация и обеспечение информационной безопасности приема заявок на ремонт и модернизацию ПК в ООО "Гео-СВЕТ"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
127
Expression GenerateEqual(Expression left, Expression right) {
return Expression.Equal(left, right);
}
Expression GenerateNotEqual(Expression left, Expression right) {
return Expression.NotEqual(left, right);
}
Expression GenerateGreaterThan(Expression left, Expression right) {
if (left.Type == typeof(string)) {
return Expression.GreaterThan(
GenerateStaticMethodCall("Compare", left, right),
Expression.Constant(0)
);
}
return Expression.GreaterThan(left, right);
}
Expression GenerateGreaterThanEqual(Expression left, Expression right) {
if (left.Type == typeof(string)) {
return Expression.GreaterThanOrEqual(
GenerateStaticMethodCall("Compare", left, right),
Expression.Constant(0)
);
}
return Expression.GreaterThanOrEqual(left, right);
}
Expression GenerateLessThan(Expression left, Expression right) {
if (left.Type == typeof(string)) {
return Expression.LessThan(
GenerateStaticMethodCall("Compare", left, right),
Expression.Constant(0)
);
}
return Expression.LessThan(left, right);
}
Expression GenerateLessThanEqual(Expression left, Expression right) {
if (left.Type == typeof(string)) {
return Expression.LessThanOrEqual(
GenerateStaticMethodCall("Compare", left, right),
Expression.Constant(0)
);
}
return Expression.LessThanOrEqual(left, right);
}
Expression GenerateAdd(Expression left, Expression right) {
if (left.Type == typeof(string) && right.Type == typeof(string)) {
return GenerateStaticMethodCall("Concat", left, right);
}
return Expression.Add(left, right);
}
Expression GenerateSubtract(Expression left, Expression right) {
return Expression.Subtract(left, right);
128
}
Expression GenerateStringConcat(Expression left, Expression right) {
return Expression.Call(
null,
typeof(string).GetMethod("Concat", new[] { typeof(object), typeof(object) }),
new[] { left, right });
}
MethodInfo GetStaticMethod(string methodName, Expression left, Expression right) {
return left.Type.GetMethod(methodName, new[] { left.Type, right.Type });
}
Expression GenerateStaticMethodCall(string methodName, Expression left, Expression right) {
return Expression.Call(null, GetStaticMethod(methodName, left, right), new[] { left, right });
}
void SetTextPos(int pos) {
textPos = pos;
ch = textPos < textLen ? text[textPos] : '\0';
}
void NextChar() {
if (textPos < textLen) textPos++;
ch = textPos < textLen ? text[textPos] : '\0';
}
void NextToken() {
while (Char.IsWhiteSpace(ch)) NextChar();
TokenId t;
int tokenPos = textPos;
switch (ch) {
case '!':
NextChar();
if (ch == '=') {
NextChar();
t = TokenId.ExclamationEqual;
}
else {
t = TokenId.Exclamation;
}
break;
case '%':
NextChar();
t = TokenId.Percent;
break;
case '&':
NextChar();
if (ch == '&') {
NextChar();
t = TokenId.DoubleAmphersand;
}
else {
t = TokenId.Amphersand;
}
break;
case '(':
129
NextChar();
t = TokenId.OpenParen;
break;
case ')':
NextChar();
t = TokenId.CloseParen;
break;
case '*':
NextChar();
t = TokenId.Asterisk;
break;
case '+':
NextChar();
t = TokenId.Plus;
break;
case ',':
NextChar();
t = TokenId.Comma;
break;
case '-':
NextChar();
t = TokenId.Minus;
break;
case '.':
NextChar();
t = TokenId.Dot;
break;
case '/':
NextChar();
t = TokenId.Slash;
break;
case ':':
NextChar();
t = TokenId.Colon;
break;
case '<':
NextChar();
if (ch == '=') {
NextChar();
t = TokenId.LessThanEqual;
}
else if (ch == '>') {
NextChar();
t = TokenId.LessGreater;
}
else {
t = TokenId.LessThan;
}
break;
case '=':
NextChar();
if (ch == '=') {
NextChar();
t = TokenId.DoubleEqual;
}
else {
t = TokenId.Equal;
130
}
break;
case '>':
NextChar();
if (ch == '=') {
NextChar();
t = TokenId.GreaterThanEqual;
}
else {
t = TokenId.GreaterThan;
}
break;
case '?':
NextChar();
t = TokenId.Question;
break;
case '[':
NextChar();
t = TokenId.OpenBracket;
break;
case ']':
NextChar();
t = TokenId.CloseBracket;
break;
case '|':
NextChar();
if (ch == '|') {
NextChar();
t = TokenId.DoubleBar;
}
else {
t = TokenId.Bar;
}
break;
case '"':
case '\'':
char quote = ch;
do {
NextChar();
while (textPos < textLen && ch != quote) NextChar();
if (textPos == textLen)
throw ParseError(textPos, Res.UnterminatedStringLiteral);
NextChar();
} while (ch == quote);
t = TokenId.StringLiteral;
break;
default:
if (Char.IsLetter(ch) || ch == '@' || ch == '_') {
do {
NextChar();
} while (Char.IsLetterOrDigit(ch) || ch == '_');
t = TokenId.Identifier;
break;
}
if (Char.IsDigit(ch)) {
t = TokenId.IntegerLiteral;
do {
131
NextChar();
} while (Char.IsDigit(ch));
if (ch == '.') {
t = TokenId.RealLiteral;
NextChar();
ValidateDigit();
do {
NextChar();
} while (Char.IsDigit(ch));
}
if (ch == 'E' || ch == 'e') {
t = TokenId.RealLiteral;
NextChar();
if (ch == '+' || ch == '-') NextChar();
ValidateDigit();
do {
NextChar();
} while (Char.IsDigit(ch));
}
if (ch == 'F' || ch == 'f') NextChar();
break;
}
if (textPos == textLen) {
t = TokenId.End;
break;
}
throw ParseError(textPos, Res.InvalidCharacter, ch);
}
token.id = t;
token.text = text.Substring(tokenPos, textPos - tokenPos);
token.pos = tokenPos;
}
bool TokenIdentifierIs(string id) {
return token.id == TokenId.Identifier && String.Equals(id, token.text,
StringComparison.OrdinalIgnoreCase);
}
string GetIdentifier() {
ValidateToken(TokenId.Identifier, Res.IdentifierExpected);
string id = token.text;
if (id.Length > 1 && id[0] == '@') id = id.Substring(1);
return id;
}
void ValidateDigit() {
if (!Char.IsDigit(ch)) throw ParseError(textPos, Res.DigitExpected);
}
void ValidateToken(TokenId t, string errorMessage) {
if (token.id != t) throw ParseError(errorMessage);
}
void ValidateToken(TokenId t) {
if (token.id != t) throw ParseError(Res.SyntaxError);
}
Источник: https://baza.diplomsite.ru/previewfile/1781