pascalabcnet/Errors/SourceLocation.cs
Mikhalkovich Stanislav e603b1fd6d Mikhalkovich в Copyright
Заготовка для школьного плагина образцов кода
2019-07-28 23:53:15 +03:00

95 lines
2.6 KiB
C#

// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Text;
namespace PascalABCCompiler
{
public class TextPosition
{
private int column;
private int line;
public int Column
{
get
{
return column;
}
set
{
column = value;
}
}
public int Line
{
get
{
return line;
}
set
{
line = value;
}
}
public TextPosition(int Line, int Column)
{
column = Column;
line = Line;
}
}
public class SourceLocation
{
private TextPosition beginPosition;
public TextPosition BeginPosition
{
get
{
return beginPosition;
}
}
private TextPosition endPosition;
public TextPosition EndPosition
{
get
{
return endPosition;
}
}
private string fileName;
public string FileName
{
get
{
return fileName;
}
}
public SourceLocation(string FileName, int BeginLine, int BeginColumn, int EndLine, int EndColumn)
{
fileName = FileName;
beginPosition = new TextPosition(BeginLine, BeginColumn);
endPosition = new TextPosition(EndLine, EndColumn);
}
public SourceLocation(SourceLocation Begin,SourceLocation End)
{
fileName = Begin.FileName;
beginPosition = Begin.beginPosition;
endPosition = End.EndPosition;
}
public static bool operator<(SourceLocation left, SourceLocation right)
{
if (left.beginPosition.Line != right.beginPosition.Line)
return left.beginPosition.Line < right.beginPosition.Line;
else
return left.beginPosition.Column < right.beginPosition.Column;
}
public static bool operator>(SourceLocation left, SourceLocation right)
{
if (left.beginPosition.Line != right.beginPosition.Line)
return left.beginPosition.Line > right.beginPosition.Line;
else
return left.beginPosition.Column > right.beginPosition.Column;
}
}
}