2014-02-10 5 views
2

Regex가 휠체어 밖에 있지만, PIC 18 어셈블리 (https://github.com/amorrow/pic-assembly-textmate-bundle)의 기존 구문 정의를 최신 PIC 24/33 명령 세트로 업데이트하려고합니다.Textmate Regex 구문 정의 .b 접미 부

기본적으로 키워드 목록을 확장하고 있습니다. 문제는 많은 명령어 (전부는 아님)가 바이트 변형을 가지고 있다는 것입니다. 예를 들어, mov 명령어는 mov.b 변형입니다. 강조 표시는 지침의 mov 부분에 대해서는 작동하지만 .b을 강조 표시하지 않습니다. movmov.b을 키워드 목록에 추가하면 작동하지 않으며 어느 쪽도 mov\.b을 추가하지 않았습니다.

는 여기가 (가독성을 위해 축약 명령어 목록)의 모습입니다 :

<dict> 
     <key>match</key> 
     <string>\b(add|addc|mov)\b</string> 
     <key>name</key> 
     <string>keyword.mnemonic</string> 
    </dict> 

정규식은 여전히 ​​나에게 매우 외국인이고, 나는 그것이 mov.b 하나의 전체 명령 있음을 알려하는 방법을 확실 해요.

+0

정규식 패턴은 분명히 왼쪽에서 오른쪽으로 읽습니다. 'mov'를 포함하고있는 목록에'mov \ .b'를 추가하고 싶다면, 목록에'mov' 앞에 놓아야합니다. 다른 방법은'mov '를'mov (? : \ .b)'로 대체하여 수량 한정자의 욕심을 사용하는 것입니다. –

+0

방금 ​​기본 명령어 앞에 각 변형을 추가했습니다. 가장 우아한 솔루션은 아니지만, 저에게 도움이 될 것입니다. 감사. – OfficerHalf

답변

0

목록의 기본 명령 앞에 접두사가 붙은 명령을 추가하면 문제가 해결되었습니다.

예 :

<dict> 
    <key>match</key> 
    <string>\b(add\.b|add|addc\.b|addc|mov\.b|mov)\b</string> 
    <key>name</key> 
    <string>keyword.mnemonic</string> 
</dict> 
+0

나는 단지 같은 것을하는 정규식이지만, 더 짧고 (그리고 더 효율적일 수있다) '\ b ((: : addc? | mov) (? : \ b)?) \ b'라고 언급 할 것이다. 물론, 그것을 사용하거나 보관하려는 경우에는 여전히 귀하에게 달려 있습니다. – Jerry

0

\b(?:add|addc|mov)(?:\.\S+)?\b? "mov.b", "mov.b.cde"등의 작업을 수행합니다.

선택적 "." 하나 이상의 공백이 아닌 문자가 뒤 따른다.

+0

여기의 문제는 모든 명령어가'.b' (또는'.c' 또는'.z') 변형을 가지고있는 것은 아닙니다. – OfficerHalf

+0

정규식을 사용하지 않으셨습니까? 나는 '\. \ S +'는 선택 사항이기 때문에 "mov"와 "add"같은 것도 일치한다고 설명하기조차했다. – tenub

+0

제가 말했듯이, 저는 정규 표현식을 얻지도 않았고, 당신의 설명을 정말로 이해하지도 못했습니다. 코드는 대체로 횡설수설합니다. 지시 사항 목록이 상당히 큽니다. 서로 다른 접미어를 허용하는 목록에 대해 별도의 목록을 가지고 있습니까? – OfficerHalf

0

내 의견에 제안로서 당신은 정규식 엔진 작업을 줄이기 위해 비 캡처 그룹 (?:...) 및 정량 ?를 사용할 수 있습니다

<dict> 
    <key>match</key> 
    <string>\b(add(?:\.b)?|addc(?:\.b)?|mov(?:\.b)?)\b</string> 
    <key>name</key> 
    <string>keyword.mnemonic</string> 
</dict> 

인 이상을 인수 분해 : (괄호의 수준을 표시하기 위해 noprlf 니모닉을 추가했습니다)

<dict> 
    <key>match</key> 
    <string>\b(nop|(?:addc?|mov)(?:\.b)?|rlf)\b</string> 
    <key>name</key> 
    <string>keyword.mnemonic</string> 
</dict>