Составители:
Рубрика:
IFormatProvider provider = new CultureInfo(“”);
double val = Convert.ToDouble(token.Value,provider);
result = new ConstExpression(val);
}
else if (token.Value.Equals(“x”))
result = new VariableExpression();
else if (token.Value.Equals(“(“))
{
token = token.NextMatch();
result = Parse();
if (! token.Value.Equals(“)”))
throwError();
}
else
throwError();
token = token.NextMatch();
return result;
}
private void checkToken()
{
if (!token.Success)
throwError();
}
private void throwError()
{
throw new Exception(“syntax error”);
}
private bool isNumber()
{
return Regex.IsMatch(token.Value,REGEXP_NUMBER);
}
private bool isAddOp()
{
return Regex.IsMatch(token.Value,”\\+|\\-”);
}
Исходный код программы Integral
307
{
op = token.Value.Equals(“-”) ? OpCodes.Sub : OpCodes.Add;
token = token.NextMatch();
}
result = parseTerm();
if (op.Equals(OpCodes.Sub))
result = new UnaryExpression(result);
while (token.Success && isAddOp())
{
op = token.Value.Equals(“-”) ? OpCodes.Sub : OpCodes.Add;
token = token.NextMatch();
result = new BinaryExpression(result,parseTerm(),op);
}
return result;
}
private Expression parseTerm()
{
checkToken();
Expression result = parseFactor();
while (token.Success && isMulOp())
{
OpCode op = token.Value.Equals(“*”) ?
OpCodes.Mul : OpCodes.Div;
token = token.NextMatch();
result = new BinaryExpression(result,parseFactor(),op);
}
return result;
}
private Expression parseFactor()
{
checkToken();
Expression result = null;
if (isNumber())
{
306
CIL и системное программирование в Microsoft .NET
306 CIL и системное программирование в Microsoft .NET Исходный код программы Integral 307 { IFormatProvider provider = new CultureInfo(“”); op = token.Value.Equals(“-”) ? OpCodes.Sub : OpCodes.Add; double val = Convert.ToDouble(token.Value,provider); token = token.NextMatch(); result = new ConstExpression(val); } } else if (token.Value.Equals(“x”)) result = parseTerm(); result = new VariableExpression(); if (op.Equals(OpCodes.Sub)) else if (token.Value.Equals(“(“)) result = new UnaryExpression(result); { token = token.NextMatch(); while (token.Success && isAddOp()) result = Parse(); { op = token.Value.Equals(“-”) ? OpCodes.Sub : OpCodes.Add; if (! token.Value.Equals(“)”)) token = token.NextMatch(); throwError(); result = new BinaryExpression(result,parseTerm(),op); } } else throwError(); return result; } token = token.NextMatch(); private Expression parseTerm() return result; { } checkToken(); Expression result = parseFactor(); private void checkToken() { while (token.Success && isMulOp()) if (!token.Success) { throwError(); OpCode op = token.Value.Equals(“*”) ? } OpCodes.Mul : OpCodes.Div; token = token.NextMatch(); private void throwError() result = new BinaryExpression(result,parseFactor(),op); { } throw new Exception(“syntax error”); } return result; } private bool isNumber() { private Expression parseFactor() return Regex.IsMatch(token.Value,REGEXP_NUMBER); { } checkToken(); Expression result = null; private bool isAddOp() { if (isNumber()) return Regex.IsMatch(token.Value,”\\+|\\-”); { }
Страницы
- « первая
- ‹ предыдущая
- …
- 158
- 159
- 160
- 161
- 162
- …
- следующая ›
- последняя »