Skip to content

Instantly share code, notes, and snippets.

@jinny-l
Last active January 26, 2023 08:40
Show Gist options
  • Save jinny-l/f89b6056c0cff3a23ea7cb1d9356279a to your computer and use it in GitHub Desktop.
Save jinny-l/f89b6056c0cff3a23ea7cb1d9356279a to your computer and use it in GitHub Desktop.
Jinny - CS07

๐Ÿช™ CS07 - XML Parser

XML DOM Parser์˜ DOM ๋ถ„์„์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฏธ์…˜

ํ•™์Šต ํ‚ค์›Œ๋“œ
#XML #ํ† ํฐ #์ •๊ทœํ‘œํ˜„์‹ #Stack #DOM #Tokenizer #Parser

์‹คํ–‰ ์˜ˆ์‹œ

const str = "<!DOCTYPE html><HTML lang="ko"><BODY><P>BOOST<IMG SRC=\"codesquad.kr\"></IMG><BR/></P></BODY></HTML>";

const dom = XMLParser(str);
console.log(dom.stringfy()); 

{   element: 'HTML',
    attributes: [
        { name : "lang", value : "ko" }
    ]
    children: [
        { element : 'BODY',
            children: [
                { element : 'P',
                    text : 'BOOST', 
                    children: [
                        { element : 'IMG',
                            attributes : [
                                { name : 'SRC', value : 'codesquad.kr'}
                            ]
                        },
                        {   element: 'BR'  }  
                    ]
                }
            ]
        }
    ]
}
const str = "<!DOCTYPE html><HTML lang="ko"><BODY></HTML></BODY>";

const dom = XMLParser(str);
console.log(dom.stringify()); 

//ERROR: "์˜ฌ๋ฐ”๋ฅธ XML ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค."

๐Ÿ“ ๊ฐœ๋… ๊ณต๋ถ€

  • XML ๊ณต๋ถ€ ์‹œ๊ฐ„: 3H - 23.01.05
  • ์ปดํŒŒ์ผ๋Ÿฌ ์ด๋ก : tokenizer, lexer, parser ์ค‘์‹ฌ (๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ˆ์ •)

์ด๋ฒˆ ๋ฏธ์…˜ ๋‚ด์šฉ์„ ์ฝ์–ด ๋ณด๊ณ  ์šฉ์–ด๋ฅผ ํ•˜๋‚˜๋„ ๋ชจ๋ฅด๊ณ  ๋ญ˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€์กฐ์ฐจ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์šฐ์„  ๊ฐœ๋… ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค.
์šฐ์„  XML์— ๋Œ€ํ•ด ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , XML์„ ๊ณต๋ถ€ํ•˜๊ณ  ๋‚˜๋‹ˆ ๋‹ค์Œ์œผ๋กœ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๋‚ด์šฉ๊ณผ ๋ฏธ์…˜ ๋‚ด์šฉ์ด ๋ˆˆ์— ๋“ค์–ด์™”๋‹ค.

XML ์— ๊ด€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์€ ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

๋ฏธ์…˜์€ ์šฐ์„  ํ† ํฌ๋‚˜์ด์ € ํ•˜๋‚˜๋ผ๋„ ๊ตฌํ˜„ํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

โœ… ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ

  • tokenizer ๊ธฐ๋Šฅ
  • lexer ๊ธฐ๋Šฅ
  • parser ๊ธฐ๋Šฅ
  • ํƒœ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Stack ๊ธฐ๋Šฅ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ถˆ๊ฐ€)
  • ํƒœ๊ทธ ํ˜•์‹ ์˜ค๋ฅ˜ ์‹œ ์˜ค๋ฅ˜ ๋ฌธ๊ตฌ ์ถœ๋ ฅ ๊ธฐ๋Šฅ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment