如何在词法分析中检测字符串?

时间:2016-02-21 06:10:55

标签: c flex-lexer

我在词法分析中使用一些语法来检测字符串

{-# LANGUAGE DeriveGeneric #-}

import GHC.Generics
import Data.Aeson
import Data.Aeson.TH

data MyData = MyData {
  id        :: Int,
  something :: Maybe String
} deriving (Generic, Show)

instance ToJSON MyData where
  toJSON = genericToJSON defaultOptions

但这不起作用。

1 个答案:

答案 0 :(得分:1)

我想你想要

\".*\"

但要注意flex中的与换行符不匹配。并且,正如@chqrlie在评论中提到的那样, 匹配" ,因此它将匹配最后一个字符串的末尾,而不是当前字符串的末尾。

所以更好的模式可能是:

\"[^"]*\"

[^"]匹配包括换行符在内的任何字符,但" 除外。

但是你无法在字符串中包含" 。所以你必须决定应该是什么语法。如果要实现SQL样式,使用双引号表示字符串中的单引号,可以使用

\"([^"]|\"\")*\"

对于可能更常见的反斜杠转义:

\"([^"]|\\(.|\n))*\"