문제

Jsyntaxpane과 함께 사용할 수있는 Lexer를 생성하기 위해 사용자 정의 Flex 파일을 작성합니다.

Lex에 필요한 맞춤 언어에는 다른 상태가 있으며 스택에 서로 내장 될 수 있습니다.

즉, 하나의 인용 문자열이있는 표현식을 작성한 다음 특수 토큰 평가 ()를 사용하여 문자열 내에 다른 표현식을 포함시킬 수 있습니다. 그러나 표현식을 이중 인용 문자열 내에 포함시킬 수도 있습니다.

예 :

someExpressionFunction('a single-quoted string with an eval(expression) embedded in it', "a double-quoted string with an eval(expression) embedded in it")

이것은 단순화이며, 이보다 더 많은 상태가 있지만 Double_string과 Single_string에 대해 다른 상태가 필요하다고 가정하면 내 상황을 적절하게 설명합니다.

Eval Expression을 닫을 때 올바른 상태로 돌아가도록 보장하는 가장 좋은 방법은 무엇입니까 (즉, Double_string으로 돌아 가면 Double Quotes, Single_string이 단일 따옴표에 있으면)

내가 제기 한 솔루션은 작동하는 솔루션은 스택을 사용하여 상태를 추적하고 Yybegin을 사용하여 다른 상태를 시작하는 대신 사용할 수있는 몇 가지 사용자 정의 방법을 추적하는 것입니다.

private Stack<Integer> stack = new Stack<Integer>();

public void yypushState(int newState) {
  stack.push(yystate());
  yybegin(newState);
}

public void yypopState() {
  yybegin(stack.pop());
}

이것이 이것을 달성하는 가장 좋은 방법입니까? JFLEX의 더 간단한 내장 기능이 활용할 수있는 기능이 있습니까? 또는 내가 알아야 할 모범 사례가 있습니까?

도움이 되었습니까?

해결책

나는 그것이 그것을하는 아주 좋은 방법 중 하나라고 생각합니다. 실제로 Groovy Gstring, String과 같은 Python 및 일부 HTML을 Javadocs에 추가하기 위해 비슷한 기능이 필요했습니다.

내가 추가하고 싶은 것은 Lexer를 부르기 위해 서브 섹션을 구문 분석하기 위해 Lexer입니다. HTML에 내장 된 JavaScript와 같은 것. 그러나 나는 그것을 할 시간을 얻지 못했습니다.

나는 stackoverflow를 좋아하지만 왜 Jsyntaxpane의 문제에 이것을 게시하지 않았습니까?

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