필자는 ANTLR에 대해 상대적으로 새로운 기능을 제공합니다. 나는 아주 쉬운 문법을 가지고 start :
('A' 'B' 'C' '1'
|'A' 'B' 'C' '2'
|'A' 'B' 'C' '3'
)
;
나는 이미 (문법 술어와 함께 작동) 미리보고 되돌아의 개념의 기초를 이해하고 있다고 생각합니다. 따라서이 문법은 k = 4 또는 backt
문법은 다음과 같습니다. S → a S b S | b S a S | ε 작은 컴파일러를 작성하려고하므로 LL (1)로 만들고 싶습니다. 여기에 FIRST/FOLLOW 충돌이있는 것으로 보이며이를 해결하기 위해 대체 방법을 사용해야한다는 것을 알고 있지만 어떻게해야하는지 명확하게 알지 못합니다. 다음은 제안 된 문법입니다. 그러나 맞는지 확실하지 않습니다.
는 LL 문법 정의된다 : 임의의 생산 A -> a|b 들어, 다음 두 조건이 적용되는 경우 만 문법은 LL이다. FIRST(a) 및 FIRST(b)은 해체된다. 이 b 다음 a는 그 FIRST(a)하고 FOLLOW(A)은 해체해야한다, FOLLOW(A)로 시작하는 모든 문자열을 추출 할 수 없습니다 EMPTY 도출 할 수 있다면 그들은 모두 EMPTY 을
그래서 나는 숙제를하고 난이 문법은 LL 파서 작동하지 않습니다 이유를 알아 내려고 2 시간 동안 지출했습니다 <A> → a <B>
<A> → a b <C>
<B> → b d <D>
<C> → d <E>
<D> → m n
<E> → x y
사람은 오른쪽으로 날 지점 시겠어요 방향? LL가 트립 될 수있는 방법 중 하나는 그것이 내가 여기 있다고
LL (3)이 LR (2)의 하위 집합이고 그 반대 인 경우 질문을받습니다. 나는 (3) LR의 일부가 아닌 그 LL을 증명하기 위해 성공 (2) : LL에서 것은 (3) 우리가 시작 과거 3 개 문자를 읽고 규칙을 인식 할 수 있습니다. LR (2)에서 끝에서 2 문자를 읽은 후 규칙을 인식 할 수 있습니다. 따라서 규칙이 비어 있다면 (upsilon)
저는 lex/yacc를 사용해 왔고 이제 ANTLR로 전환하려고합니다. 주요 관심사는 LINR 인 yacc와 달리 ANTLR은 LL (*) 파서입니다. 나는 상향식 사고를하는 데 익숙해졌으며 LL 문법의 장점이 무엇인지 정확히 알지 못합니다. LL 문법은 이해하기 쉽고 요즘 대중적이라고 사람들은 말합니다. 그러나 LR 파서가 더 강력하다는 것. LL 파서는
저는 PEG (Parsing Expression Grammar) 파서를 조사하는 중입니다. 제가 짚어보고있는 주제 중 하나는 다른 파싱 기술과 동등한 것입니다. From Regular Expressions to Parsing Expression Grammars에서 regexes를 동등한 PEG로 변형하는 것에 대한 좋은 논문을 찾았습니다. 나는 LL(*)
현재 자유 시간에 Dragon Book을 읽고 있습니다. 이 책에는 어떤 제품 A-> a | b에 대해서만 인 경우 문법은 LL 이고 다음 두 조건이 적용됩니다. 1) FIRST (a)와 FIRST (b)는 서로 떨어져 있습니다. 이것은 그들이 모두 EMPTY 2) 'b는'EMPTY 유도 할 수 있다면, 'A'내가 그 LL 파서가 왼쪽으로 처리 할 수있어