2013-01-20 3 views
2

나는 파이썬을위한 어휘 분석기를 처음부터 만들고 싶다. 그러나 나는 어디서 어떻게 시작해야할지 모른다. 처음에는 파이썬 프로그램을 분석기에 전달 된 문자열 세트로 사용할 것이라고 가정하고 싶습니다. 분석기는 새로운 라인이 어디에 있는지, 적절한 공백을 조사해야합니다. 파이썬 소스 코드에서 새로운 라인을 찾는 방법? 나는 파이썬의 어휘 스펙을 읽었고 공백으로 들여 쓰기를 해결하기 위해 스택 기반 접근법을 사용할 수 있지만 볼 방법을 파악할 수는 없다. '\ n'을 사용하는 정규 표현식 검사인지 또는 알고리즘이 있는지 이것을 결정하는 방법?처음부터 어휘 분석기 작성을 시작하는 방법은 무엇입니까?

필자는 lex, yacc 또는 flex와 같은 것을 의도적으로 사용하고 싶지 않습니다.

+1

당신이 원하는 것을 잃어 버린 것처럼 보입니다. 렉서에서 얻은 토큰으로 구문 분석을 원할 수도 있지만, 토큰과 관련된 것은 언급하지 마십시오. 당신은 기본적인 문자 당 문자 읽기에 대해 인식하지 못하는 것 같습니다. 적어도 관련 장, "컴파일러 : 원리, 기술 및 도구"(일반적으로 드래곤의 책이라고도 함)을 읽는 것이 좋습니다. , 그 표지에 멋진 용을 줘라). – mmgp

+0

파이썬 자체의 렉서 ([tokenizer.c'] (http://hg.python.org/cpython/file/575eb20cd7d1/Parser/tokenizer.c)에서 보았습니까? –

+0

드래곤 북은 고대 (1977 년)이지만 읽을만한 가치가 있습니다. 제가 80 년대에 언어 개발에 종사했을 때 표준 참조였습니다. –

답변

1

최근에 SQL 문을 찾기위한 파서를 개발했습니다. 나는 규칙이 다르다는 것을 알고 있지만 접근법은 비슷할 수 있습니다. 나는 파서를 개발하기 위해 파이썬을 사용했다. 첫 번째 단계는 토큰의 시작을 찾는 정규 표현식입니다. 그런 다음이 목록을 유한 상태 시스템에 전달하여 토큰이 무엇을 나타내는 지 결정했습니다.

줄 바꿈, 세미콜론 및 문자열과 줄을 넘길 수있는 설명 등을 설명하는 데 필요한 규칙. 파이썬에서는 라인 피드와 들여 쓰기에 더 관심이 있습니다.

개별 구문을 구문 분석 할 수있게되면 구문을 구문 분석 할 수있는 함수로 전달해야합니다. 비슷한 접근 방식을 취할 것입니다.

SQL 구문 분석기는 https://github.com/PeterWooster/SQL-Tools/blob/master/SQLStatements.py에서 찾을 수 있습니다. 여기서는 토큰을 찾고 FSM을 사용하여 처리하는 방법을 보여줍니다. 그리고 예, 줄 바꿈을 가로 지르는 문자열을 처리합니다.

관련 문제