여러줄로 나눠쓰기 위한 "\" (역슬래쉬)

futari의 이미지

소스코드나 등등에서 한줄로 쓸걸 두줄 이상으로 쓰기 위해서

역슬래시를 쓰는 경우가 종종 있는데요,

이 경우에 내부적으로는 어떻게 처리되는 것일까요?

"역슬래쉬엔터" => "\\r\n" 이거나 "\\n" 으로 들어갈텐데...

파서에서 역슬래쉬가 두개 나올때 처리해주는 건가요?

그냥 그러기엔 약간의 다른 상황들도 있을 듯 한데...

파서에서 저런거 구현할땐 어떻게 하나요?

저런건 안해봐서...

"따옴표에 묶이지 않았을 때에 역슬래쉬엔터는 없었던 일로 한다" -_-;; 이런걸까요?

vacancy의 이미지

정확한 건 잘 모르겠지만요.
Lexer가 알아서 할 것 같네요.
Parser까지 넘어갈 필요가 없을듯요.

futari의 이미지

vacancy wrote:
정확한 건 잘 모르겠지만요.
Lexer가 알아서 할 것 같네요.
Parser까지 넘어갈 필요가 없을듯요.

아.. 그거야 원론적인 이야기고 당연한거지만 ㅡㅡ;;

제 말은 tokenize 할때 저걸 어떻게 처리할까 하는 이야기지요.

물론 tokenize는 일반적으로 lexer가 하겠지만요.

저기 파서는 그냥 analyzer + processor를 통칭한거죠.

잘 몰라서 질문하면서 어쩌구 저쩌구 해봤자 ^^;;

여하튼 답변 감사드리구요 ^^;

아무래도 해보신 분은 없나보니 ㅜ.ㅜ

시간날때 소스나 뒤져봐야겠네요. ^^;

혹 알게되면 다시 댓글 달겠습니다~

-------------------------
The universe is run by the complex interweaving of three elements: matter, energy, and enlightened self-interest.
- G'kar, Babylon 5

eminency의 이미지

음... 제가 정확히 질문을 다 이해한 것은 아니지만 아마 이해를 잘못 하고 계신 듯 합니다.
특히 이 부분을 보건데요....^^;

Quote:

"역슬래쉬엔터" => "\\r\n" 이거나 "\\n" 으로 들어갈텐데...

파서에서 역슬래쉬가 두개 나올때 처리해주는 건가요?

역슬래시 & 엔터가 입력되면 파서에서 "\\n"의 세 개의 문자가 입력되는 것이 아니라 '\'과 '\n'이라는 두 가지의 문자가 입력되는 것입니다. newline을 의미하는 \n은 눈에 보이지 않는 invisible 문자를 이해하기 쉽도록 표시한 것에 불과합니다.

그러므로 역슬래시 두 개가 온 상황이 절대 아닌 것이죠.
제 생각엔 역슬래시는 escape 캐릭터로 쓰이므로 \뒤에 blank character가 온다면(다른 문자가 오지 않는다면) line concatenation으로 처리해 주는 것 같습니다.
다시 말하면 그다지 크게 복잡한 일은 아닌 것 같네요 ㅡ.ㅡ;;

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

mancord의 이미지

맞습니다
/n 는 뉴라인이고
/ 는 역슬래쉬입니다.

글구 렉스는 인식만 하구 토큰을 넘겨주면 약에서 문법을 처리 하는거니까

어떠한 문법이 쭈루룩 오다가 다 끝마치지 도 않았는데 역슬래쉬 나오고

뉴라인 하면, 그다음 내용의 문법이 이어진다고 처리 할수도 있고.

아예 역슬래쉬 하고 뉴라인 같이 오면 토큰을 약에 아예 넘겨주지 않으면

약은 계속 연결된것으로 알아 먹습니다.

어차피 넘겨주지 않으니까 뉴라인이 되었는지안되었는지 모르죠.

무한포옹의 이미지

mancord wrote:
맞습니다
/n 는 뉴라인이고
/ 는 역슬래쉬입니다.

\입니다. 이게 멉니까! 슬래쉬 나파요~

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

futari의 이미지

futari wrote:

"따옴표에 묶이지 않았을 때에 역슬래쉬엔터는 없었던 일로 한다" -_-;; 이런걸까요?

역슬래쉬 두개라는건 역슬래시 뒤에 오는 escape 문자들을 -_-;;;

저도 lexer와 parser는 작성해 본 적이 있습니다. 간단하게나마 IO, if, for, while, repeat등등까지를 처리하는 인터프리터는 작성해봤습니다.

근데 코드를 줄 넘어가게 쓰는걸 생각 해본적이 없어서요.

궁금해 했던건 문자열이나 기타 코드에서도 \\n이 사용될 수 있는 부분들이 있을텐데, ambiguous 하지 않게 처리하는 논리가 무엇일까 하는 것이었습니다.

역슬래시 치고 엔터 치는 경우를 이야기 하고 있었는데

역슬래시 두개.. 라는 말에 꼬리를 다심은 좀 -_-;;

그럼 역슬래시 두개만 무시하면 'n'은 남는다는 말이었겠습니까 ;

말씀하신 대로 \n이라고 적은건 newline을 표시하기 위한 것이었으니까요.

eminency wrote:
\뒤에 blank character가 온다면(다른 문자가 오지 않는다면) line concatenation으로 처리해 주는 것 같습니다.
다시 말하면 그다지 크게 복잡한 일은 아닌 것 같네요 ㅡ.ㅡ;;

위와같이 처리하면 될거 같긴 하네요. : )

-------------------------
The universe is run by the complex interweaving of three elements: matter, energy, and enlightened self-interest.
- G'kar, Babylon 5

datamind의 이미지

질문에 답변이 맞을지 모르겠지만,
말씀하신 내용은 파서가 하지 않은것 같은데요,,
구문분석기가 처리하는것으로 알고 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.