Изменено представление таблицы символов

This commit is contained in:
andrewlord607 2018-04-16 16:17:43 +03:00
parent a8b5d90383
commit cb4b0a3e72
9 changed files with 361 additions and 864 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "3";
public const string Build = "5";
public const string Revision = "1641";
public const string Revision = "1642";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=5
%REVISION%=1641
%MINOR%=3
%REVISION%=1642
%COREVERSION%=5
%MAJOR%=3

Binary file not shown.

View file

@ -1 +1 @@
!define VERSION '3.3.5.1641'
!define VERSION '3.3.5.1642'

View file

@ -20,7 +20,7 @@ namespace System.Linq
namespace SymbolTable
{
public class AreaNodesList
/*public class AreaNodesList
{
public override string ToString() => data.Take(Count).JoinIntoString();
@ -53,10 +53,6 @@ namespace SymbolTable
return;
//throw new Exception("Ошибка при добавлении области видимости к идентефикатору: такая область уже существует");
}
/*int k=i;
for (i = Count;i >= k+1; i--) data[i]=data[i-1];
count++;
data[i]=node;*/
data.Insert(i, node);
}
@ -89,6 +85,6 @@ namespace SymbolTable
set{data[index]=value; }
}
}
}*/
}

View file

@ -10,76 +10,25 @@ namespace SymbolTable
/// <summary>
/// Динамическая хеш таблица строк
/// </summary>
public class DSHashTable
public class SymbolsDictionary
{
public override string ToString() => dict.SkipWhile(x=>x.Key != "").Skip(1).JoinIntoString(Environment.NewLine);
public override string ToString() => dict.SkipWhile(x => x.Key != "").Skip(1).JoinIntoString(Environment.NewLine);
/*private int count;
private int hash_size
public Dictionary<string, HashTableNode> dict;
public SymbolsDictionary()
{
get
{
return hash_arr.Length;
}
dict = new Dictionary<string, HashTableNode>();
}
private HashTableNode[] hash_arr;
private int HashFunc(string s)
public SymbolsDictionary(int start_size)
{
int n = 0;
for (int i = 0; i < s.Length; i++)
n = 127 * n + s[i] * 7;//137
return Math.Abs(n % hash_size);
}
private System.Collections.Generic.Dictionary<int, object> ht = new System.Collections.Generic.Dictionary<int, object>();*/
public Dictionary<string,HashTableNode> dict = new Dictionary<string, HashTableNode>();
/*private int GetHash(string s)
{
int hash = HashFunc(s);
int i = 1;
ht.Clear();
while (hash_arr[hash] != null)
{
if (hash_arr[hash].Name == s) return hash;
i = i * 11;
hash = Math.Abs((hash + i) % hash_size);
if (ht.ContainsKey(hash))
Resize(hash_size * 2);
else
ht[hash] = ht;
}
return hash;
}
private void Resize(int new_size)
{
HashTableNode[] ha = new HashTableNode[new_size];
for (int i = 0; i < new_size; i++) ha[i] = null;
count = 0;
HashTableNode[] hat = hash_arr;
hash_arr = ha;
if (hat.Length > new_size) return;
for (int i = 0; i < hat.Length; i++)
if (hat[i] != null) Add(hat[i]);
}*/
public DSHashTable(int start_size)
{
//hash_arr = new HashTableNode[start_size];
//ClearTable();
dict = new Dictionary<string, HashTableNode>(start_size);
}
public void ClearTable()
{
dict.Clear();
//count = 0;
//for (int i = 0; i < hash_size; i++)
// hash_arr[i] = null;
}
public HashTableNode Add(string name)
@ -92,24 +41,6 @@ namespace SymbolTable
dict[name] = node;
}
return node;
/*if (!dict.ContainsKey(name))
{
var node = new HashTableNode(name);
dict[name] = node;
return node;
}
return dict[name];*/
/*if (count / hash_size * 100 > SymbolTableConstants.HashTable_StartResise)
Resize(hash_size + hash_size / 100 * SymbolTableConstants.HashTable_ProcResize);
int tn = GetHash(node.Name);
if (hash_arr[tn] == null)
{
hash_arr[tn] = node;
count++;
}
return hash_arr[tn];*/
}
public HashTableNode Find(string name)
@ -117,16 +48,6 @@ namespace SymbolTable
HashTableNode node = null;
dict.TryGetValue(name, out node);
return node;
/*if (dict.ContainsKey(name))
return dict[name];
else return null;*/
/*int h = GetHash(name);
//if (hash_arr[h] != null)
// return hash_arr[h];
return hash_arr[h];*/
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -103,180 +103,7 @@ namespace PascalABCCompiler.TreeConverter
}
}
}
/*public class SymbolInfoList
{
//private readonly name_information_type _name_information_type;
public List<SymbolInfo> list;
public List<SymbolInfo>()
{
list = new List<SymbolInfo>(SymbolTable.SymbolTableConstants.InfoList_StartSize);
}
public List<SymbolInfo>(SymbolInfo inf)
{
list = new List<SymbolInfo>(SymbolTable.SymbolTableConstants.InfoList_StartSize);
list.Add(inf);
}
public SymbolInfo this[int key]
{
get
{
return list[key];
}
set
{
list[key] = value;
}
}
public List<SymbolInfo> Copy()
{
List<SymbolInfo> sil = new List<SymbolInfo>();
sil.list = new List<SymbolInfo>(this.list);
return sil;
}
public void Add(SymbolInfo value)
{
list.Add(value);
}
public void AddRange(List<SymbolInfo> value)
{
if(value != null)
list.AddRange(value.list);
}
public SymbolInfo FirstOrDefault()
{
if (Count() > 0)
return list[0];
else
return null;
}
public SymbolInfo LastOrDefault()
{
if (Count() > 0)
return list[list.Count - 1];
else
return null;
}
public int IndexOf(SymbolInfo x)
{
for (int i = 0; i < list.Count; ++i)
if (list[i] == x)
return i;
return -1;
}
public int Count()
{
if (list != null)
return list.Count;
return 0;
}
public bool HasOnlyExtensionMethods()
{
for (int i = 0; i < list.Count; ++i)
if (!(list[i].sym_info is function_node && (list[i].sym_info as function_node).is_extension_method))
return false;
return true;
}
public void Insert(int index, SymbolInfo item)
{
if (list != null)
list.Insert(index, item);
}
public void RemoveAt(int index)
{
if(list != null)
list.RemoveAt(index);
}
public void RemoveRange(int index, int count)
{
if (list != null)
list.RemoveRange(index, count);
}
public List<SymbolInfo> GetRange(int index, int count)
{
List<SymbolInfo> temp = new List<SymbolInfo>();
temp.list = list.GetRange(index, count);
return temp;
}
public override bool Equals(System.Object obj)
{
if (obj == null)
{
return false;
}
List<SymbolInfo> p = obj as List<SymbolInfo>;
if ((System.Object)p == null)
{
return false;
}
if (p.Count() != list.Count)
return false;
for (int i = 0; i < list.Count; ++i)
if (p.list[i] != list[i])
return false;
return true;
}
public bool Equals(List<SymbolInfo> p)
{
if ((object)p == null)
{
return false;
}
if (p.Count() != list.Count)
return false;
for (int i = 0; i < list.Count; ++i)
if (p.list[i] != list[i])
return false;
return true;
}
public static bool operator ==(List<SymbolInfo> a, List<SymbolInfo> b)
{
if (object.ReferenceEquals(a, null))
{
return object.ReferenceEquals(b, null);
}
return a.Equals(b);
}
public static bool operator !=(List<SymbolInfo> a, List<SymbolInfo> b)
{
return !(a == b);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
*/
public class SymbolInfo
{
public override string ToString() => scope == null ? sym_info.ToString() : "(" + scope.ToString() + "," + sym_info.ToString()+")";
@ -290,8 +117,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolTable.Scope scope;
//public SymbolInfo reference;
public access_level access_level
{
get
@ -338,7 +163,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo()
{
//reference = new SymbolInfo();
}
public SymbolInfo copy()
@ -404,7 +228,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(template_class tc)
{
//reference = new SymbolInfo(tc);
_sym_info = tc;
_access_level = access_level.al_public;
_symbol_kind = symbol_kind.sk_none;
@ -412,7 +235,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(label_node lab)
{
//reference = new SymbolInfo(lab);
_sym_info = lab;
_access_level = access_level.al_public;
_symbol_kind = symbol_kind.sk_none;
@ -420,7 +242,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_event ce)
{
//reference = new SymbolInfo(ce);
_sym_info = ce;
_access_level = access_level.al_public;
_symbol_kind = symbol_kind.sk_none;
@ -428,7 +249,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_type_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_compiled_type;
_sym_info = value;
_access_level = access_level.al_public;
@ -437,7 +257,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_event value)
{
//reference = new SymbolInfo(value);
_sym_info = value;
_access_level = get_class_member_access_level(value);
_symbol_kind = symbol_kind.sk_none;
@ -445,7 +264,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_namespace_event value)
{
//reference = new SymbolInfo(value);
_sym_info = value;
_access_level = access_level.al_public;
_symbol_kind = symbol_kind.sk_none;
@ -453,7 +271,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(function_node value)
{
//reference = new SymbolInfo(value);
_sym_info = value;
_access_level = access_level.al_public;
_symbol_kind = symbol_kind.sk_none;
@ -461,7 +278,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_function_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_compiled_function;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -470,7 +286,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_constructor_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_compiled_function;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -479,7 +294,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_property_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_compiled_property;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -488,7 +302,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_variable_definition value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_compiled_variable;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -497,7 +310,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_class_constant_definition value)
{
//reference = new SymbolInfo(value);
_sym_info = value;
_access_level = get_class_member_access_level(value);
_symbol_kind = symbol_kind.sk_none;
@ -505,7 +317,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(compiled_namespace_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_compiled_namespace;
_sym_info = value;
_access_level = access_level.al_public;
@ -514,7 +325,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_type_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_type;
_sym_info = value;
_access_level = access_level.al_public;
@ -523,7 +333,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(basic_function_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_basic_function;
_sym_info = value;
_access_level = access_level.al_public;
@ -532,7 +341,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_namespace_function_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_namespace_function;
_sym_info = value;
_access_level = access_level.al_public;
@ -541,7 +349,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_in_function_function_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_in_function_function;
_sym_info = value;
_access_level = access_level.al_public;
@ -550,7 +357,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_method_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_method;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -559,7 +365,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_namespace_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_namespace;
_sym_info = value;
_access_level = access_level.al_public;
@ -568,7 +373,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(unit_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_unit;
_sym_info = value;
_access_level = access_level.al_public;
@ -577,7 +381,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(local_variable value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_local_variable;
_sym_info = value;
_access_level = access_level.al_public;
@ -586,7 +389,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(local_block_variable value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_local_variable;
_sym_info = value;
_access_level = access_level.al_public;
@ -595,7 +397,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(namespace_variable value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_namespace_variable;
_sym_info = value;
_access_level = access_level.al_public;
@ -604,7 +405,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(class_field value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_class_field;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -613,7 +413,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_parameter value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_parameter;
_sym_info = value;
_access_level = access_level.al_public;
@ -622,7 +421,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(basic_parameter value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_basic_parameter;
_sym_info = value;
_access_level = access_level.al_public;
@ -631,7 +429,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(constant_definition_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_constant_defnition;
_sym_info = value;
_access_level = access_level.al_public;
@ -640,7 +437,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(common_property_node value)
{
//reference = new SymbolInfo(value);
//_name_information_type=name_information_type.nit_common_property;
_sym_info = value;
_access_level = get_class_member_access_level(value);
@ -649,7 +445,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(type_node value)
{
//reference = new SymbolInfo(value);
_sym_info = value;
_access_level = access_level.al_public;
_symbol_kind = symbol_kind.sk_none;
@ -657,7 +452,6 @@ namespace PascalABCCompiler.TreeConverter
public SymbolInfo(definition_node value, access_level alevel, symbol_kind skind)
{
//reference = new SymbolInfo(value, alevel, skind);
_sym_info = value;
_access_level = alevel;
_symbol_kind = skind;

View file

@ -109,7 +109,6 @@
<Compile Include="LambdaExpressions\LambdaProcessingState.cs" />
<Compile Include="LambdaExpressions\LambdaResultTypeInferrer.cs" />
<Compile Include="LambdaExpressions\LambdaSearcher.cs" />
<Compile Include="SymbolTable\DSST\SymbolTable2.cs" />
<Compile Include="TreeConversion\LambdaHelper.cs" />
<Compile Include="SymbolTable\DSST\AreaArrayTable.cs">
<SubType>Code</SubType>