문자열 / 문자 리터럴의 문자 '\ r'에 Haskell 오류 어휘 오류가 있습니다.

초록 3000

안녕하세요 저는 마크 다운을 HTML로 변환하는 프로그램을 작성하려고합니다. Pandoc이 있다는 것을 이해하지만 프로젝트가 수동으로 작성하고 있습니다. 나는 그것을 완료했거나 적어도 나는 생각하지만 다음과 같은 오류가 발생합니다. Haskell 오류 lexical error in string/character literal at character ' \r'나는 무엇을 말하는지에 대한 아이디어가 없으며 그것을 지적하는 데 도움이 될 것입니다. 감사합니다 그래서 업데이트 : 나는 기타 기호로 몇 가지를 변경했으며 지금 얻는 오류는 hs.38:17: Not in scope 'str'38 행에서 반복적으로 지적하면서 동일한 문제를 무시하기 때문에 문제가 무엇인지 파악할 수 없습니다. 이전 함수의 정확한 것

module Main
(
convertToHTML,
convertSpecialChar,
main
) where

import System.Environment (getArgs)
import System.IO
import Data.Char
import Data.List
import Data.List.Split

eof = "</body></html>"

convertToHTML :: String -> String
convertToHTML x = specialTags $ headings $ endings $ beginnings $ replace "---"<hr>" x


convertSpecialChar :: String -> String
ConvertSpecialChar x = (convertLessThan $ convertAmpersand $ convertGreaterThan x)++eof
    where
        convertLessThan str = concat [if c =='<' then '&lt" else [c] | c <- str]
        convertAmpersand str = concat [if c == '&' then "&amp" else [c] | c <- str]
        convertGreaterThan str = concat [if c =='>' then "&gt" else [c] | c <- str]

beginnings :: String -> String
beginnings str = unwords $ map tag ch
   where
   tag x
    | isPrefixOf "**" x = "<strong>" ++ (tail $ tail x)
    | isPrefixOf "__" x = "<strong>" ++ (tail $ tail x)
    | isPrefixOf  "_" x = "<em>" ++ (tail x)
    | isPrefixOf "*" x = "<em>" ++ (tail x)
    | isPrefixOf  "^" x = "<p>" ++ (tail x)
    | isPrefixOf "---" x = replace "---" "<hr>"
    | otherwise = x
ch =splitOn " " str

replace :: Eq a => [a] -> [a] -> [a] -> [a]
replace old new x = intercalate new (splitOn old x)

endings :: String -> String
endings str = unwords $ map tag ch
   where
       tag x
    | isInfixOf "**" x = replace "**" "</strong>" x
    | isInfixOf "__" x = replace "__" "</strong>" x
    | isInfixOf "_"  x = replace "_" "</em>" x
    | isInfixOf "*" x = replace "*" "</em>" x
    | isInfixOf "^" x = replace "^" "</p>" x
    | isInfixOf "---" x = replace "---" "<hr>" x
    | otherwise = x
   ch = splitOn " " str

headings str = unlines $ map heads (lines str)
   where
      heads x
    | isPrefixOf "######" x = "<h6>" ++ (numTail 6 x) ++ "</h6>"
    | isPrefixOf "#####" x = "<h5>" ++ (numTail 5 x) ++ "</h5>"
    | isPrefixOf "####" x = "<h4>" ++ (numTail 4 x) ++ "</h4>"
    | isPrefixOf "###" x = "<h3>" ++ (numTail 3 x) ++ "</h3>"
    | isPrefixOf "##" x = "<h2>" ++ (tail $ tail x) ++ "</h2>"
    | isPrefixOf "#" x = "<h1>" ++ (tail x) ++ "</h1>"
    | otherwise = x

specialTags str = unlines $ map tags (lines str)
   where
      tags x
    | isPrefixOf "[code]" x = "<blockquote><pre><code>" ++ (numTail 6 x)
    | isSuffixOf "[code]" x = (numInit 6 x) ++ "</code></pre></blockquote>"
    | otherwise = x

numTail :: Int -> String -> String
numTail _ [] = []
numTail 1 str = tail str
numTail x str = tail $ (numTail (x-1) str)

numInit :: Int-> String -> String
numInit _ [] = []
numInit 1 str = init str
numInit x str = init $ (numInit (x-1) str)

main = do
   args <- getArgs
   let (infile,outfile) = (\\(x:y:ys) -> (x,y)) args
   putStrLn $ "Input file: " ++ infile
   putStrLn $ "Output file: " ++ outfile
   contents <- readFile infile
   let contentlines = unlines $ tail $ lines contents
   let title = head $ lines contents
   let header = "<!DOCTYPE html> <head>" ++ "<meta http-equiv = \\"Content-type\\"content=\\"text/html; charset=utf-8\\" />" ++ "<title>" ++title++"</title>" ++"</head><body>"
   writeFile outfile $ convertToHTML $ header ++ convertSpecialChar contentlines 
스테판 홀더 만 스

17 행에 큰 따옴표가 없습니다. replace "---"<hr>" x읽어야 한다고 생각 합니다 replace "---" "<hr>" x.

함수의 전체 선언은 convertToHTML다음 읽

convertToHTML :: String -> String
convertToHTML x = specialTags $ headings $ endings $ beginnings $ replace "---" "<hr>" x 

그렇다면 컴파일러는 왜 캐릭터에 대해 불평을했을 '\r'까요?

Haskell 모듈 컴파일의 첫 번째 단계는 어휘 분석으로, 프로그램 텍스트가 토큰으로 분할 된 다음 파서에 의해 처리됩니다. 귀하의 경우 새 문자열 리터럴이에서 시작되었다고 가정했기 때문에 어휘 분석이 실패했습니다 " x. 그런 다음이 제대로 닫는 큰 따옴표 나되는 문자열 리터럴의 표시를 종료하기 시작 문자없이 라인 (17)의 끝을 발견 여러 줄 문자열 리터럴 . 이것은 잘못된 어휘 구문이므로 발생한 줄 끝 ( '\r')에 대해 불평했습니다 .

물론 오류 메시지가 종료되지 않은 문자열 리터럴을 명시 적으로 언급했다면 더 도움이되었을 것입니다.

어쨌든 Haskell에 대한 구문 강조 기능을 지원하는 편집기는 이미 초기에 문제를 암시했을 것입니다. ;)

들여 쓰기

str로컬 정의의 범위에 있지 않은 변수와 관련된 문제는 ch레이아웃 때문입니다. ch의 이전 정의와 동일한 수준에서 들여 쓰기 되었는지 확인합니다 tag. 즉, 대신

beginnings :: String -> String
beginnings str = unwords $ map tag ch
   where
   tag x
    | isPrefixOf "**" x = "<strong>" ++ (tail $ tail x)
    | isPrefixOf "__" x = "<strong>" ++ (tail $ tail x)
    | isPrefixOf  "_" x = "<em>" ++ (tail x)
    | isPrefixOf "*" x = "<em>" ++ (tail x)
    | isPrefixOf  "^" x = "<p>" ++ (tail x)
    | isPrefixOf "---" x = replace "---" "<hr>"
    | otherwise = x
ch =splitOn " " str

다음과 같이 작성해야합니다.

beginnings :: String -> String
beginnings str = unwords $ map tag ch
  where
    tag x
      | isPrefixOf "**" x = "<strong>" ++ (tail $ tail x)
      | isPrefixOf "__" x = "<strong>" ++ (tail $ tail x)
      | isPrefixOf  "_" x = "<em>" ++ (tail x)
      | isPrefixOf "*" x = "<em>" ++ (tail x)
      | isPrefixOf  "^" x = "<p>" ++ (tail x)
      | isPrefixOf "---" x = replace "---" "<hr>"
      | otherwise = x
    ch = splitOn " " str

Haskell에서는 코드 레이아웃이 중요 합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

어휘 오류 : 문자열 내에서 '\'가 문자 앞에 발생합니다.

분류에서Dev

오류 : 문자 리터럴 asp.net에 문자가 너무 많습니다.

분류에서Dev

쿼리 식의 문자열에 구문 오류가 있습니다.

분류에서Dev

어휘 오류 : 문자열 내에서 문자 앞에 '\'발생 / R에서 jsonlite 사용

분류에서Dev

asp.net의 쿼리 문자열에 컴파일 오류가 있습니다.

분류에서Dev

JSON 구문 분석 오류 'JSON.parse : 문자열 리터럴의 잘못된 제어 문자'를 어떻게 해결할 수 있습니까?

분류에서Dev

R의 변수에 문자열 : 오류 : 파일을 열 수 없습니다.

분류에서Dev

오류 : 문자열은 원자 벡터 R이어야합니다.

분류에서Dev

구문 분석 오류 : 1 행, 2 열 (bash)에 잘못된 숫자 리터럴이 있습니다.

분류에서Dev

C ++ 문자열 라이브러리 오류 : 문자열 첨자가 범위를 벗어났습니다.

분류에서Dev

Haskell 구문 오류가 있습니다.

분류에서Dev

단순 문자열 오류, var의 '에서 문자열 분리

분류에서Dev

R의 문자열에서 해시 태그를 추출 할 때 오류가 발생했습니다.

분류에서Dev

Java 프로그램 (텍스트 문서)에서 계산 된 단어, 문자 및 문자의 양에 오류가 있습니다.

분류에서Dev

React createElement 오류 "유형이 잘못되었습니다. 문자열에 개체가 있어야합니다."

분류에서Dev

R의 단어 중간에서 대문자가 소문자 뒤에 오는 경우 문자열 분할

분류에서Dev

XML Deserilation의 경로 오류에 잘못된 문자가 있습니다.

분류에서Dev

컴파일 오류 : (1)의 이름에 잘못된 문자가 있습니다.

분류에서Dev

문자열 리터럴 풀에서 문자열 리터럴의 해시는 어떻게 계산됩니까?

분류에서Dev

런타임 오류 '3075': 쿼리 식 '[Order Number] ='에 구문 오류 (연산자 누락)가 있습니다.

분류에서Dev

R 오류 : 아래 첨자 var에 잘못된 유형의 quosure / formula가 있습니다. 숫자 또는 문자 여야합니다.

분류에서Dev

어디에서 오류가 발생 했습니까? exec (compile (script, "<문자열>", 'exec'))

분류에서Dev

문자열 쿼리에서 오류 가져 오기

분류에서Dev

문자 배열에 문자를 할당하는 for 루프가 있습니다. 오류 : System.IndexOutOfRangeException

분류에서Dev

C ++에서 문자를 문자열의 구성 요소와 비교할 때 오류가 발생합니다.

분류에서Dev

c의 문자열 리터럴에서 개별 문자를 어떻게 얻을 수 있습니까?

분류에서Dev

"문자열"토큰에 구문 오류가 있습니다.이 토큰을 삭제하십시오.

분류에서Dev

"문자열 아래 첨자가 범위를 벗어났습니다."오류

분류에서Dev

두 문자열 var 사이에 + 연산자가있는 Java 오류 문

Related 관련 기사

  1. 1

    어휘 오류 : 문자열 내에서 '\'가 문자 앞에 발생합니다.

  2. 2

    오류 : 문자 리터럴 asp.net에 문자가 너무 많습니다.

  3. 3

    쿼리 식의 문자열에 구문 오류가 있습니다.

  4. 4

    어휘 오류 : 문자열 내에서 문자 앞에 '\'발생 / R에서 jsonlite 사용

  5. 5

    asp.net의 쿼리 문자열에 컴파일 오류가 있습니다.

  6. 6

    JSON 구문 분석 오류 'JSON.parse : 문자열 리터럴의 잘못된 제어 문자'를 어떻게 해결할 수 있습니까?

  7. 7

    R의 변수에 문자열 : 오류 : 파일을 열 수 없습니다.

  8. 8

    오류 : 문자열은 원자 벡터 R이어야합니다.

  9. 9

    구문 분석 오류 : 1 행, 2 열 (bash)에 잘못된 숫자 리터럴이 있습니다.

  10. 10

    C ++ 문자열 라이브러리 오류 : 문자열 첨자가 범위를 벗어났습니다.

  11. 11

    Haskell 구문 오류가 있습니다.

  12. 12

    단순 문자열 오류, var의 '에서 문자열 분리

  13. 13

    R의 문자열에서 해시 태그를 추출 할 때 오류가 발생했습니다.

  14. 14

    Java 프로그램 (텍스트 문서)에서 계산 된 단어, 문자 및 문자의 양에 오류가 있습니다.

  15. 15

    React createElement 오류 "유형이 잘못되었습니다. 문자열에 개체가 있어야합니다."

  16. 16

    R의 단어 중간에서 대문자가 소문자 뒤에 오는 경우 문자열 분할

  17. 17

    XML Deserilation의 경로 오류에 잘못된 문자가 있습니다.

  18. 18

    컴파일 오류 : (1)의 이름에 잘못된 문자가 있습니다.

  19. 19

    문자열 리터럴 풀에서 문자열 리터럴의 해시는 어떻게 계산됩니까?

  20. 20

    런타임 오류 '3075': 쿼리 식 '[Order Number] ='에 구문 오류 (연산자 누락)가 있습니다.

  21. 21

    R 오류 : 아래 첨자 var에 잘못된 유형의 quosure / formula가 있습니다. 숫자 또는 문자 여야합니다.

  22. 22

    어디에서 오류가 발생 했습니까? exec (compile (script, "<문자열>", 'exec'))

  23. 23

    문자열 쿼리에서 오류 가져 오기

  24. 24

    문자 배열에 문자를 할당하는 for 루프가 있습니다. 오류 : System.IndexOutOfRangeException

  25. 25

    C ++에서 문자를 문자열의 구성 요소와 비교할 때 오류가 발생합니다.

  26. 26

    c의 문자열 리터럴에서 개별 문자를 어떻게 얻을 수 있습니까?

  27. 27

    "문자열"토큰에 구문 오류가 있습니다.이 토큰을 삭제하십시오.

  28. 28

    "문자열 아래 첨자가 범위를 벗어났습니다."오류

  29. 29

    두 문자열 var 사이에 + 연산자가있는 Java 오류 문

뜨겁다태그

보관