2017-01-13 12 views
0

어휘 분석기와 파서 생성기에 다리가 젖어있는 동안 인터넷 (자습서, 포럼, StackOverflow)의 대부분의 리소스가 언어에 대해서만 이야기한다는 것을 깨달았습니다. Flex 나 Bison과 같은 도구가 언어에만 적합하거나 구문 분석 할 수있는 언어가 언어로 간주되기 때문입니까?언어 이외의 다른 용도로 파서 생성기를 사용해야합니까?

File : Bananarama.xyz 
Date : 22.12.2017 

TableStart 
BlockStart 
Param1  : 12 
Param2  : 1.5 
Param3[lbs] : 1539 
Param4[cm] : 55 
BlockEnd 

BlockStart 
[...] 
BlockEnd 
TableEnd 

은 LALR 파서에 의해 구문 분석하기에 적합한이 파일입니다

더 구체적으로, 나는 다음과 같은 형식의 파일이?

답변

2

(글쓰기) 언어는 정보가 포함 된 기호의 구조화 된 시퀀스 이상일 수 없습니다. 그것은 당신이 가진 것과 다르지 않습니다. 데이터 파일, 구성 설정 파일은 정보를 포함하는 모든 일련의 기호입니다. 기호의 순서 및 순서는 그 안에 포함 된 정보를 발견 (또는 일치)하기 위해 인식 될 필요가 있습니다.

그러나 정보를 나타 내기 위해 기호를 구조화하는 다양한 방법이 있습니다. 기호를 구성하는 몇 가지 방법은 다른 기호보다 쉽게 ​​인식 할 수 있습니다. 더 쉽게 나는 적은 코드, 더 적은 시간, 더 간단한 알고리즘을 의미합니다. 일부는 더 어렵습니다.

실제로 "이 기호 배열을 사용하려면이 복잡도 알고리즘을 인식해야합니까?"

대답은 간단합니다. 컴퓨터 과학. 파일의 기호 시퀀스를 구문 분석 (일치)하는 데 필요한 알고리즘 유형을 평가하려면 Chomsky Hierarchy을 사용하기 만하면됩니다.

더 자세한 설명이 없으면 언어는 유형 2 또는 유형 3이며 LALR- 파서가 확실히 구문 분석 할 수 있습니다. 해결해야 할 남은 유일한 질문은 LALR 파서가이 언어에 대해 너무 복잡한지 여부입니다.

이 작업을 위해 정규 문법 (정규 표현식)을 사용할 수 있습니까? 실제로 파일 구조에 대한 예제는이 질문에 대답하기에 충분하지 않습니다. 구조가 중첩 될 수 있는지 여부를 알아야합니다. 블록블록을 포함 할 수 있습니까?

중첩이 없으면 정규 표현식은 충분히 강력하며 작업을 수행 할 수있는 도구가 많이 있습니다 (예 : egrep, perl, awk, sed, findstr).

+0

글쎄, 블록은 다른 블록을 포함 할 수 없지만 예제를 조금 간략화했습니다. 모든 블록은 TableStart/TableEnd 쌍으로 둘러싸여 있습니다 (질문을 편집했습니다). 그러나 이것은 아무것도 바뀌지 않습니다. 그렇죠? – exilit

+0

또 다른 질문 : 블록이 일종의 컨텍스트 감도를 도입하지 않으므로 유형 1의 언어가됩니까? – exilit

+0

@exilit 한 블록 내의 기호가 뒤 따르는 블록의 구문을 변경하면 문맥에 따라 달라집니다. 즉 기호가 일치 할 때 문법이 변경됩니다. 당신의 모범에서 볼 때 그렇진 않습니다. 아마도 당신은 데이터의 의미와 구문을 혼동하고있을 것입니다. –