사람들이 말할 때 그들은 "작성"에 의해 정말 의미 "조립", 그리고 무슨 뜻인지, "X는 작성하지 않습니다" 무엇을 하고 어떻게 정확히 "X"가 무엇인지에 따라 매우 다를 수 있습니다 함께 넣어.
또한 "구성하지 않았다"고 말하면 약간 다른 것을 의미 할 수 있습니다.
- 두 개의 X를 모두 동시에 넣을 수는 없습니다.
- 두 개의 X를 함께 넣을 수 는 있지만 결과는 X가 아닐 수 있습니다 (IOW : X는 composition 아래에서 닫히지 않습니다 ).
- 두 개의 X를 함께 넣을 수는 있지만 결과 X는 예상 한대로 작동하지 않을 수 있습니다.
# 1의 예는 스캐너 / 렉서가있는 파서입니다. "스캐너 / 렉서가 작성하지 않았습니다"라는 문구가 들릴 수 있습니다. 사실이 아닙니다. 의미하는 것은 "별도의 렉싱 단계를 사용하는 파서는 작성하지 않습니다"입니다.
왜 파서를 작성하고 싶습니까? JetBrains, Eclipse Foundation, Microsoft 또는 Embarcadero와 같은 IDE 공급 업체이고 웹 프레임 워크 용 IDE를 구축하려고한다고 가정 해보십시오. 일반적인 웹 개발에서는 종종 언어를 혼합합니다. <script>
ECMAScript를 포함하는 요소가 포함 된 HTML 파일이 있으며<style>
CSS를 포함하는 요소. HTML, 일부 프로그래밍 언어 및 일부 템플릿 언어 메타 구문이 포함 된 템플릿 파일이 있습니다. "Python", "템플릿에 포함 된 Python", "CSS", "CSS 내의 HTML", "ECMASCript", "ECMAScript 내의 HTML", "HTML", "HTML 내의 다른 구문 강조 표시기를 작성하고 싶지 않습니다. 템플릿 등이 있습니다. Python 용 구문 형광펜, HTML 용, 템플릿 언어 용 구문 형광펜을 작성한 다음이 템플릿 구문을 템플릿 파일의 구문 형광펜으로 작성하려고합니다.
그러나, 어휘 분석기는 전체 파일을 토큰 스트림으로 파싱하는데, 이는 하나의 언어에만 해당됩니다. 다른 언어의 파서는 렉서가 전달한 토큰으로는 작동하지 않습니다. 예를 들어, 파이썬 파서는 일반적으로 렉서가 들여 쓰기를 추적하고 가짜 INDENT
및 DEDENT
토큰을 토큰 스트림에 주입하는 방식으로 작성 되므로, 파이썬의 구문이 실제로는 아니더라도 구문 분석기에 컨텍스트가없는 것을 허용합니다. 그러나 HTML 어휘 분석기는 HTML에서 의미가 없기 때문에 공백을 완전히 무시합니다.
그러나 단순히 문자를 읽는 스캐너리스 파서는 문자 스트림을 다른 파서로 전달하여 다시 전달할 수 있으므로 작성하기가 훨씬 쉽습니다.
# 2의 예는 SQL 쿼리가 포함 된 문자열입니다. 각 구문에 올바른 SQL 쿼리가있는 두 개의 문자열이있을 수 있지만 두 문자열을 연결하면 구문 적으로 올바른 SQL 쿼리가 아닐 수 있습니다. 우리가 같은 쿼리 대수가 이유의 ARel
, 어떻게 구성한다.
잠금은 # 3의 예입니다. 잠금이있는 두 개의 프로그램이 있고이를 하나의 프로그램으로 결합한 경우 여전히 잠금이있는 프로그램이 있지만 두 개의 원래 프로그램이 완전히 정확하고 교착 상태와 경쟁이 없어도 결과 프로그램에 반드시이 기능이있는 것은 아닙니다. 재산. 올바른 잠금 사용법은 전체 프로그램의 전역 속성이며 프로그램을 작성할 때 유지되지 않는 속성입니다. 이것은 예를 들어, 트랜잭션, 위해, 다른 할 작성합니다. 트랜잭션을 올바르게 사용하는 프로그램은 다른 해당 프로그램으로 구성 될 수 있으며 트랜잭션을 올바르게 사용하는 결합 된 프로그램을 생성합니다.