문제

언어를 정식으로 표현하는 것이 종종 편리합니다 (제 경우에는 일반적으로 도메인 특정 언어입니다). 그러나 나는 해당 언어의 임의의 프로그램을 위해 정식 형태를 결정 및/또는 만들 수 있는지 여부를 결정하는 관련 언어의 표현성에 엄격한 한계가 있다고 생각합니다. 불행히도, 나는 이것에 대해 읽는 것을 기억한다는 언급을 찾을 수 없었습니다.

한편으로, 언어의 표준 표현을 만드는 것은 많은 어려운 그래프 문제 (예 : 그래프 아이모 르프)와 비슷한 복잡성이지만 다른 한편으로는 IIRC, GCC, YHC 및 GHC와 같은 컴파일러가 중간 표현을 사용하는 것이 합리적입니다. 다양한 형식 (어셈블리, JavaScript 등)으로 출력을 생성하려면 적어도 일부 형태로 해결 된 문제입니다.

주어진 언어에 대한 표준 형태를 결정 / 생성 할 수 있습니까? (언어가 얼마나 표현력이 있고 언어 표현력이 표준 형태의 유용성에 어떤 영향을 미칩니 까?) 가능한 경우 참조 또는 증거를 제공하십시오.

편집하다: 예를 들어, a 일반 언어 (예 : '순수한'형태의 정규 표현)는 튜링-완성 언어 할 수 있다. 다시 말해, 일반 언어로 웹 서버를 쓸 수는 없지만 Lambda Calculus로 할 수 있습니다). 저의 질문은 이론적 가능성에 관한 것이며 복잡성 이론과 관련된 구체적인 대답이 있습니다. 다른 시스템으로 전송 해야하는 DSL이있는 경우, 두 개의 다른 시스템이 사용하는 독립적 인 표현을 분리하기 때문에 해당 코드의 표준 형태를 생성하는 것이 좋습니다. 하지만, P- 공간이 완료되거나 NP가 튜링에 완료 된 언어를 표준 형태로 변환하는 경우, 정식 형태를 구축하는 데 시간을 낭비해서는 안됩니다. 언어 복잡성 ~할 수 있다 다항식 시간에 표준화됩니다.

도움이 되었습니까?

해결책

"표준 표현"에 의해 다음을 의미한다고 가정합니다. 전화 프로그램 그리고 동등한 그들이 같은 입력에서 "똑같은 일"을한다면. "동일한 일을하는"것은 프로그램이 동일한 출력을 가지고 있으며, 두 프로그램 모두 유한 한 시간 후에 또는 두 프로그램이 모두 무한 루프에 들어갑니다. 이 동등성 관계는 모든 프로그램 세트에서 동등성 클래스를 정의합니다. 프로그램의 "표준 표현" 프로그램입니다 피' 동일한 동등성 클래스에 속하며 동일한 동등성 클래스의 모든 구성원이 동일한 표준 표현을 갖도록 요구합니다.

Turing-Complete Languages의 경우 Turing Computible Canonical 표현을 통해 중단 문제 다음과 같이 : 먼저 무한 루프로 구성된 프로그램을 작성하고 정식 표현을 찾으십시오. . 그런 다음 모든 입력 프로그램에 대해 , 먼저 기계적으로 프로그램으로 변환하십시오 0 그것은 출력이 없다는 것을 제외하고는 같은 일을하고 정식 표현을 찾습니다. 0이 프로그램의. 결과가 있다면 , 당신은 그것을 알고 있습니다 0 멈추지 않으므로 어느 것도 마찬가지입니다 . 그렇지 않으면, 0 중단됩니다 .

더 재미 있으려면 일부를 읽으십시오 그레고리 차이틴 그가 "우아한"프로그램이라고 부르는 것에 대해 작업하십시오.

다른 팁

어셈블리 언어로 컴파일하는 것이 실용적인 방식으로 정식 형태로 번역 될 수있는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top