C 언어 해석기 - 6 테스트 프로그램부터
9280 단어 C#C 언어해석기형식 언어 및 로봇
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace SharpCTest
{
using System.Diagnostics;
using System.IO;
using SharpC;
using SharpC.Grammar;
class Program
{
private static DateTime m_timeComsumption; // : ,
static void Main(string[] args)
{
TestParser(); //
//TestRun(); //
}
//
public static void TestMem()
{
Memory memMng = new Memory("..\\..\\memory.dat");
int num = 0;
Random rnd = new Random((int)DateTime.Now.Ticks);
int x = 0;
do
{
int addr = memMng.Allocate(4); // 2 << rnd.Next(2));
if (addr == 0)
{
Debug.WriteLine("Memory exhaused.");
break;
}
//Debug.WriteLine(String.Format("Alloc: 0X{0:X8}", addr));
num++;
if (x % 10 == 0)
{
memMng.Free(addr);
}
if (x == 65535)
{
int used = memMng.TotalSize - memMng.AviableSize;
int total = memMng.TotalSize / (1024 * 1024);
int item = memMng.AllocatedItem > 1024 ? (memMng.AllocatedItem > (1024 * 1024) ? memMng.AllocatedItem / (1024 * 1024) : memMng.AllocatedItem / 1024) : memMng.AllocatedItem;
Debug.WriteLine("Usage: " + used / (used > 1024 * 1024 ? (1024 * 1024) : (used > 1024 ? 1024 : 1)) + ((used > 1024 * 1024 ? 'M' : (used > 1024 ? 'K' : 'B'))) + '/' +
total + "M Item:" + item + (memMng.AllocatedItem > 1024 ? memMng.AllocatedItem > (1024 * 1024) ? "M" : "K" : ""));
x = 0;
}
x++;
} while (true);
Debug.WriteLine("Block:" + memMng.BlockCount);
Debug.WriteLine("total: " + num);
}
public static void TestParser()
{
SharpC mySharpC = new SharpC("..\\..\\ParseSample.txt");
mySharpC.OnParsing += mySharpC_OnParsing;
mySharpC.OnParsingWarning += mySharpC_OnParsingWarning;
mySharpC.OnParsingError += mySharpC_OnParsingError;
mySharpC.OnBeforeParse += mySharpC_OnBeforeParse;
mySharpC.OnAfterParse += mySharpC_OnAfterParse;
mySharpC.Parse();
}
public static void TestRun()
{
SharpC mySharpC = new SharpC("..\\..\\ExecSample.txt");
//mySharpC.OnParsing += mySharpC_OnParsing;
mySharpC.OnParsingWarning += mySharpC_OnParsingWarning;
mySharpC.OnParsingError += mySharpC_OnParsingError;
//mySharpC.OnBeforeParse += mySharpC_OnBeforeParse;
//mySharpC.OnAfterParse += mySharpC_OnAfterParse;
mySharpC.OnBeforeRun += mySharpC_OnBeforeRun;
mySharpC.OnAfterRun += mySharpC_OnAfterRun;
mySharpC.Run();
}
static void mySharpC_OnBeforeRun(object sender, Context e)
{
m_timeComsumption = DateTime.Now;
Debug.WriteLine("
================================ Program Begin ================================
");
}
static void mySharpC_OnAfterRun(object sender, Context e)
{
Debug.WriteLine("
================================ Program End ================================
");
Debug.WriteLine(string.Format("Time consumption: {0} sec
", (DateTime.Now - m_timeComsumption).TotalSeconds));
}
static void mySharpC_OnParsing(object sender, Parser.ParsingEventArg e)
{
Debug.WriteLine(string.Format("{0}:\t{1}",
e.Context.GetType().UnderlyingSystemType,
(sender as Parser).GetSourceByLocation(e.Context.Location)
));
}
static void mySharpC_OnParsingWarning(object sender, Parser.ParsingWarningEventArg e)
{
Debug.WriteLine(string.Format("{0}>>{1}", (sender as Parser).WarningCount, (sender as Parser).FormatErrorMessage(e.Location, Parser.ParsingErrorType.Warning, e.Description)));
}
static void mySharpC_OnParsingError(object sender, Parser.ParsingErrorEventArg e)
{
Debug.WriteLine(string.Format("{0}>>{1}", (sender as Parser).ErrorCount, (sender as Parser).FormatErrorMessage(e.Location, e.Error, e.Description)));
e.Continue = true;
}
static void mySharpC_OnBeforeParse(object sender, Parser e)
{
m_timeComsumption = DateTime.Now;
}
static void mySharpC_OnAfterParse(object sender, Parser e)
{
Debug.WriteLine(string.Format("Time consumption: {0} sec
", (DateTime.Now - m_timeComsumption).TotalSeconds));
(sender as SharpC).Context.Print();
}
}
}
SharpC의 구현은 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace SharpC
{
using Grammar;
public class SharpC
{
private Context m_context = null;
private Parser m_parser = new Parser();
private string m_path = string.Empty;
private bool m_lastParsingResult = false;
public event EventHandler<Parser.ParsingEventArg> OnParsing;
public event EventHandler<Parser.ParsingWarningEventArg> OnParsingWarning;
public event EventHandler<Parser.ParsingErrorEventArg> OnParsingError;
public event EventHandler<Parser> OnBeforeParse;
public event EventHandler<Parser> OnAfterParse;
public event EventHandler<Context> OnBeforeRun;
public event EventHandler<Context> OnAfterRun;
public Context Context
{
get { return m_context; }
}
public Parser Parser
{
get { return m_parser; }
}
public SharpC()
{
}
public SharpC(string path)
{
m_path = path;
}
public bool Parse()
{
return Parse(m_path);
}
public bool Parse(string path)
{
m_path = path;
SourceCode src = new SourceCode();
src.LoadFromFile(path);
m_parser.OnParsing += OnParsing;
m_parser.OnParsingWarning += OnParsingWarning;
m_parser.OnParsingError += OnParsingError;
if (OnBeforeParse != null)
{
OnBeforeParse(this, m_parser);
}
m_context = m_parser.Parse(src);
bool res = m_parser != null;
if (OnAfterParse != null)
{
OnAfterParse(this, m_parser);
}
m_lastParsingResult = res;
return res;
}
public void Run(bool forceReparsing = false)
{
if (!m_lastParsingResult || forceReparsing)
Parse();
if (m_context != null)
{
if (OnBeforeRun != null)
OnBeforeRun(this, m_context);
m_context.Run(m_context);
if (OnAfterRun != null)
OnAfterRun(this, m_context);
}
}
public void Run(string path)
{
if (Parse(path))
Run();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.