문제

일상 업무에서 나와 다른 팀원들은 주로 상용 공급업체와 몇몇 오픈 소스 시뮬레이터 프로젝트에서 지원하는 언어인 Verilog-AMS로 많은 하드웨어 모델을 작성합니다.서로의 코드를 더욱 유용하게 지원하는 한 가지 방법은 코드에서 일반적인 문제를 확인하고 공유 코드 형식 지정 스타일을 적용하는 데 도움을 주는 LINTER입니다.물론 나는 나만의 규칙을 추가하고 그 유용성을 스스로 증명한 후 나머지 팀에게 홍보할 수 있기를 원합니다.나는 해야 할 일을 하는 것에 개의치 않지만, 물론 다른 기존 프로젝트의 작업도 활용하고 싶습니다.

yacc 또는 bison 형식으로 허용되는 언어 구문을 사용하면 도움이 됩니까?아니면 각 언어 구문을 Perl 문자열로 빨아들여 패턴 일치를 사용하여 내가 좋아하지 않는 것을 찾아야 할까요?

(대부분의 구문 및 컴파일 오류는 상용 도구로 쉽게 발견됩니다.그러나 우리는 우리만의 확장 기능을 가지고 있습니다.)

도움이 되었습니까?

해결책

lex/flex 및 yacc/bison은 사용하기 쉽고 잘 이해되는 어휘 분석기 및 구문 분석기 생성기를 제공합니다.펄.정규식은 상대적으로 고정되어 있지는 않지만 구조가 완전히 고정되지 않은 문자열을 분리하는 강력한 도구입니다.실제 프로그래밍 언어를 사용하면 상태 머신의 크기가 Real Lexer/Parser(tm)가 아니면 관리할 수 없게 됩니다.Verilog AMS와 같은 것에서 허용되는 키워드, 식별자, 연산자, 불필요한 괄호, 불필요한 세미콜론 및 주석의 가능한 모든 인터리빙을 정규식과 절차적 코드만으로 처리한다고 상상해 보십시오.

상당한 학습 곡선이 있다는 점은 부인할 수 없지만 flex 및 bison에 사용할 수 있는 문법을 작성하고 bison에서 나오는 구문 트리에서 유용한 작업을 수행하는 것이 우선 구문 트리를 사용하여 더 자연스럽게 처리되는 수많은 특수 사례 문자열 처리 코드입니다.또한, 이런 식으로 작성하는 방법을 배우면 해키적인 Perl 코드를 작성하는 것보다 훨씬 더 기술 범위가 넓어질 것입니다. 따라서 수단이 있다면 강력히 추천합니다 ;-)

또한 게으른 경우 Verilog 및 VHDL에 대한 구문 강조 및 기본 리팩토링을 수행하는 Eclipse 플러그인을 확인하십시오.마지막으로 확인한 결과 엄청나게 원시적인 상태에 있지만, 찾고 있는 코드 중 일부가 있을 수도 있고, 자신만의 접근 방식을 더 잘 알리기 위해 살펴봐야 할 최소한 기본 코드 조각이 있을 수도 있습니다.

다른 팁

나는 몇 가지 Verilog 파서를 작성했으며 선호하는 프로그래밍 언어가 C/C++/Java라면 PCCTS/ANTLR을 제안합니다.이있다 PCCTS/ANTLR Verilog 문법 시작할 수 있습니다.내가 가장 좋아하는 파서 생성기는 혹소 이는 Common Lisp를 기반으로 합니다.

물론 가장 중요한 일은 모든 린팅 규칙을 지정하는 것입니다.린팅 규칙을 지정하기 위해 일종의 언어를 만드는 것도 의미가 있습니다.

린터에 들어가는 작업량을 과소평가하지 마십시오.구문 분석은 대부분을 자동화할 수 있는 도구(bison, flex, ANTLR/PCCTS)가 있기 때문에 쉬운 부분입니다.

하지만 일단 구문 분석을 하고 나면 어떻게 될까요?디자인을 위한 의미 트리를 구축해야 합니다.입력이 얼마나 복잡한지에 따라 Verilog-AMS 설계를 정교하게 만들어야 합니다(예:매개변수 해결, 생성 풀기 등해당 기능을 사용하는 경우).그래야만 규칙을 구현해 볼 수 있습니다.

사용자 수와 잠재적인 시간 절약으로 인해 개발 시간이 정당화되지 않는 한 linter를 작성하기 전에 다른 가능한 솔루션을 진지하게 고려해 보겠습니다.

답을 찾으려고 노력하면서 나는 이것을 찾았습니다. ANTLR - 유용할 수도 있다

Java(및 IDEA)를 전혀 사용하는 경우 IDE의 사용자 정의 언어 확장 유용할 수도 있다

yacc/bison 좋은 Linting을 위해서는 프로그램 구문 분석이 필요하기 때문에 확실히 도움이 됩니다.정규 표현식(적어도 실제 정규 표현식)은 사소한 경우를 다룰 수 있지만 정규 표현식이 일치하지 않지만 여전히 나쁜 스타일인 코드를 작성하는 것은 쉽습니다.

ANTLR은 보다 일반적인 방법에 대한 대체 경로인 것으로 보입니다(OK 이전에 들어본 적이 있음) YACC/BISON 접근 방식은 일반적으로 LEX/FLEX를 프런트 엔드로 사용하는 것으로 나타났습니다.

FLEX 매뉴얼 페이지를 빠르게 읽으면 정규 표현식 유형의 아이디어에 대한 프레임워크가 될 수 있다는 생각이 듭니다.

좋아요..이 과정을 조금 더 기다려본 후 프로토타입 파서를 얼마나 빨리 구축할 수 있는지 살펴보겠습니다.

그리고 조금 더 길어

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