2017-04-13 2 views
0

C# 프로젝트에서 작업하려고하는데 편집기에 코드를 입력하여 코드를 실행할 수있게하고 싶습니다. 그런 점을 염두에두고 필자는 일종의 스크립팅 편집자, 파서 및 평가자를 작성하는 것에 대해 생각했지만 휠을 재발 명하려는 경우 먼저 다른 사람과 확인하고 싶었습니까? 표현 편집기/파서/평가자

그래서, 내 생각은/...

  1. 내가 정의 키워드의 사용을 포함 ,에 코드를 작성할 수 있습니다 구문 강조 편집기를 기록했다.
  2. 편집기에 논리를 추가하여 편집기의 텍스트를 기반으로 내용을 형식 지정할 수 있습니다.
  3. 입력 한 텍스트를 '실행'할 수있는 방법이 있습니다. 내가 입력하면 다음과 같은 예를 들어

, ...

if (Shape.IsACube()) 
{ 
    // Do some cube stuff 
} 
else if (Shape.Area(height, length, width) > 40) 
{ 
    // Do some large area stuff 
} 

... 나는이 응용 프로그램의 일부처럼 즉석에서 그 코드를 실행할 수 있도록하고 싶습니다.

나는 그것이 모두 의미가 있기를 바랍니다. 이견있는 사람?

+1

구문에 사용할 문법은 무엇입니까? 너 자신이나 C#? – eocron

+0

이 주제에서는 더 이상 답변을 추가 할 수 없으므로 주석으로 추가하겠습니다. 컴파일러를 만드는 것은 매우 큰 일입니다. 거의 모든 것을 지원하는 (https://csharpeval.codeplex.com/) 또는 PRO 라이브러리 (http://eval-expression.net/)와 같은 무료 라이브러리를 사용해 보시기 바랍니다. . –

답변

0

구문에 사용할 문법은 무엇입니까? 너 자신이나 C#? 런타임시 C# 코드를 컴파일하려는 경우 CodeDOM과 같은 코드를 사용할 수 있습니다. 강조 표시는 C# 구문 형광펜을 통해 수행 할 수 있습니다.

터미널/터미널이 아닌 자신 만의 문법을 원한다면 ANTLR4과 같은 문법 작성자를 사용해야합니다. 이렇게하면 대부분의 컴파일러/해석기가 작동하는 방식을 이해할 수 있습니다.

주요 아이디어

당신이 렉서를 작성하는 것이이며 파서 (사용자의 입력 토큰에 대한 책임있는) (actualy 문법 규칙의 단지 목록, 즉 '제작'). 텍스트를 평가/강조 표시 할 수있는 완전한 AST를 제공합니다. 많은 언어 문법은 이미 당신 앞에 쓰여졌습니다. here (심지어 ANTLR4 자체가 제시됩니다)을 포함하여 C# 구문을 포함합니다. 그래서 당신은 당신의 필요에 맞게 그것을 고르거나 고칠 수 있습니다.

+0

안녕하세요 eocron, 그리고 귀하의 소중한 의견을 보내 주셔서 감사합니다. –

+0

아마 사용하고자하는 문법은 내 자신의 것이지만 더 많이 생각하면 아마도 대부분 C#이 될 것입니다. 디버그 세션처럼 가능하다면 한 번에 한 줄 씩 코드를 단계별로 실행할 수 있어야 할 필요가있을 수도 있습니다. 더 많은 작업이 필요하며 코드를 직접 컴파일하지 않아도됩니다. . –

+0

그런 다음 ANTLR4를 사용하는 것이 좋습니다. 저장소에서 C# 문법을 찾고 필요에 따라 수정할 수 있습니다. ANTLR4는 기본적으로 파서/렉서 클래스를 생성하고, 컴파일하지 않으며, 단지 생성합니다. WCF 도구는 서비스 용 프록시 클래스를 생성합니다. 스텝 스루는 조금 까다 롭습니다. 당신은 Roslyn 컴파일러를 볼 수 있지만, 일부 C# 문자열을 단계별로 처리 할 수 ​​있는지는 확실하지 않지만,이를 위해 고급 런타임 컴파일러가 필요합니다. – eocron