Word, Number, String, RegExp, Operator, Comment 및 Newline과 같은 기본 유형을 탐지하는 간단한 javascript 토크 나이저를 작성합니다. 다 잘되고 있지만 현재 문자가 RegExp 구분 기호 또는 나누기 연산자인지 검색하는 방법을 이해할 수 없습니다. 너무 느리기 때문에 정규식을 사용하지 않습니다. 아무도 그것을 감지하는 메커니즘을 알고 있습니까? 감사.토큰 화 중에 나누기/RegExp 충돌
8
A
답변
6
스트림에서 이전 토큰이 무엇인지 알 수 있습니다. 렉서가 발행하는 각 토큰을 살펴보고 구분 기호 나 정규 표현식이 합리적으로 따라 올 수 있는지 여부를 묻습니다. 두 개의 결과 집합의 토큰이 서로 떨어져 있다는 것을 알 수 있습니다. 예를 들어, (
, [
, {
, ;
및 모든 2 진수 연산자의 경우에만 정규식을 사용할 수 있습니다. 마찬가지로 )
, ]
, }
, 식별자 및 문자열/숫자 리터럴 뒤에는 구분 기호가 올 수 있습니다.
자세한 내용은 ECMAScript spec의 섹션 7을 참조하십시오.
1
슬래시가 발생하면 컨텍스트를 확인해야합니다. 슬래시가 표현식 뒤에 있다면, 그것은 나누기 여야합니다, 또는 정규식 시작입니다.
문맥을 인식하기 위해서는 어쩌면 구문 분석기를 만들어야합니다. 예를
function f() {}
/1/g
//this case ,the slash is after a function definition, so it's a refexp start
var a = {}
/1/g;
//this case, the slash is after an object expression,so it's a division
관련 문제
- 1. 토큰 화 복잡한 입력
- 2. 토큰 화 문자열
- 3. 문자열 토큰 화 도구가
- 4. PHP 문자열 토큰 화
- 5. 토큰 화 문자열
- 6. KornShell에서 문자열의 토큰 화
- 7. 파일의 문자열 토큰 화
- 8. 개미 토큰 화 : 토큰 개인을 선택
- 9. Zend Lucene - 토큰 화 스웨덴어
- 10. C 문자열 토큰 화 질문
- 11. 토큰 화 오류 : java.util.regex.PatternSyntaxException, 메타 문자를 매달려 '*'
- 12. 파이썬 - 어휘 분석 및 토큰 화
- 13. 문장 분석 및 토큰 화 알고리즘
- 14. C++ 3D .obj 파일의 토큰 화
- 15. Objective-C에서 HTTP 메시지의 토큰 화 스트림
- 16. PHP 용 문자열 토큰 화 도구
- 17. 토큰 화 오류를 처리하는 방법은 무엇입니까?
- 18. Bash loop - 단어가 아닌 라인에서 토큰 화
- 19. SQL 명령을 포함하는 문자열 파싱/토큰 화
- 20. Solr에서 다중 토큰 화 도구 사용하기
- 21. 토큰 화 문자열 C++ 컴파일러/논리 오류
- 22. 임베디드 시스템에서 Lex 토큰 화 도구 사용
- 23. 세그먼트 화 오류 : std :: string 할당 중에
- 24. 부울 쿼리 구문 분석기의 '토큰 충돌'
- 25. SVN 병합 중에 Eclipse가 충돌 함
- 26. 문자열에서 정보를 토큰 화/추출하는 가장 좋은 방법
- 27. Linq 및 EF로 필터링 된 토큰 화 된 검색 결과
- 28. NSScanner 대 componentsSeparatedByCharactersInSet을 사용하는 경우 : NSString을 토큰 화 하시겠습니까?
- 29. 비 정렬 화 중에 JAXB를 사용하여 XML 형식화
- 30. Facebook JS SDK 및 PHP SDK 액세스 토큰 충돌
에 대한
나는 한 번 토크 나이를 쓰고, 다음은 "정규식 트리거를"감지 된 RE 있습니다 :'/ [{(\ [;,] /''/ \ + \ + | -? ~ | && | \? | : | \\ $ | (<<|> >>? ==? |! =? | [- <> + * % & \ | \^/]) =? /''/^(? = \ s | \/| user123444555621
기술적으로는 어쩔 수없는 몇 가지 모호성이 있습니다. 예를 들어'(a + b)/c'와'if (x) /foo/.exec ('bar')'(close-paren 앞에 둘 수있다.) 또한 ++/foo/.abc'와'a ++/b' (plus + plus 앞에 둘 수 있습니다.)와 함께'--'는 내가 아는 유일한 것들입니다. – dgreensp
@dgreensp 감사합니다. 유용한 관찰 !!! – Zo72