canonical_collection: List (Set Item);
runGOTO(state: Int, symbol: Symbol): Maybe Int;
getLA(state: Int, item: Item): Set Terminal
{
map: Map (Int, Item) (Set Terminal);
go(state: Int, item: Item): Set Terminal
{
switch map.lookup((state, item))
{
case (Just lookaheads):
return lookaheads;
case Nothing:
preds := getPRED(state, item.left);
lookaheads := empty;
map.insert((state, item), lookaheads);
for state' in preds
{
for item' in canonical_collection.at(state')
{
switch (item'.right)
{
case Nil:
break;
case (Cons symbol symbols):
if (symbol == item.lhs)
lookaheads += ring_sum(getFIRST(symbols), go(state', item'));
}
}
}
map.update((state, item), lookaheads);
return lookaheads;
}
}
start_item := Item {
lhs := start_symbol';
left := Nil;
right := Cons start_symbol Nil;
};
map := singleton((0, start_item), singleton(EOF));
return (go(state, item));
}
물론 슈도 코드임 ㅇㅅㅇ
singleton(EOF)이 $만을 원소로 가지는 집합이란 것은 지난번에 니가 답변했었는데 singleton((0, start_item), singleton(EOF));에서 0, start_item)와 singleton(EOF)을 인자로 가지는 singleton함수는 무슨 역할(의미?)을 하는 거야? 그리고 map 함수가 구체적으로 무언지 좀 이해가 안 가는데 책에서 map이 이전 상태를 기억하고 있는 함수라고 기억이 나는데 map은 또 뭐임?
0, start_item)=>(0, start_item)
Map은 자료구조 중 하나로 순서쌍들의 집합이야. 원소가 한 개인 Map을 만들 때 singleton을 써.
https://hackage.haskell.org/package/containers-0.6.2.1/docs/Data-Map-Strict.html
0, start_item)=>(0, start_item)
go 함수는 goto 함수인 건가
go는 함수 안의 함수인데 getLA의 본체의 역할을 해.
runGOTO는 함수정의만 있고 코드에서는 실제로 안 쓰이는 거 같은데 대체 무슨 용도임?
PRED 구현할 때 써야 하는데 PRED를 구현 안 함
Cons start_symbol Nil<=== 이건또 무슨 뜻이지 Cons는 상수를 말하는 건가 Cons 뒤에 start_symbol하고 Nil도 이해가 안 가는데
https://en.wikipedia.org/wiki/Cons
List 부분 보셈
아 여하튼 다시 답변해줘서 고마워.곰곰히 살펴봐야겠다
ㅇㅇ 힘내
해당 댓글은 삭제되었습니다.
슈도코드라고 - dc App
하나만 더 물어보자 Maybe는 대체 뭐임? 구글로 검색해보면 monad의 일종이라는데 하스켈에서 쓰는 거 같은데 Maybe가 대체 뭐야?
타입 Maybe a의 값은 Just x또는 Nothing이고 이때 x: a임. - dc App
그러면 하나 더 Set Terminal이란 건 대체 뭘 의미해?
Terminal 기호들의 집합 - dc App
아 그래 답변 고마워.. 이제 물어볼 것은 다 물어본 거 같고 슈도 코드 보면서 명상해봐야겠다. 여하튼 추가 답변 고맙고 질문들에 대해서 댓글 달아준 것도 고마워.
ㅇㅇ - dc App