Happyを使用してJavaScriptパーサーを作成していますが、正規表現に一致させる必要があります。正規表現を完全に解析するのではなく、文字列として保存するだけです。
私のASTの関連部分は次のようになります:
data PrimaryExpr
-- | Literal integer
= ExpLitInt Integer
-- | Literal strings
| ExpLitStr String
-- | Identifier
| ExpId String
-- | Bracketed expression
| ExpBrackExp Expression
-- | This (current object)
| ExpThis
-- | Regular Expression
| ExpRegex String
-- | Arrays
| ExpArray ArrayLit
-- | Objects
| ExpObject [(PropName, Assignment)]
deriving Show
これは関連するハッピーコードです:
primaryExpr :: { PrimaryExpr }
: LITINT { ExpLitInt $1 }
| LITSTR { ExpLitStr $1 }
| ID { ExpId $1 }
| THIS { ExpThis }
| regex { ExpRegex $1 }
| arrayLit { ExpArray $1 }
| objectLit { ExpObject $1 }
| '(' expression ')' { ExpBrackExp $2 }
私の質問は、非終端記号をどのように定義する必要があるかということregex
です。このような構造は正しいですか?
regex :: { String }
: '/' whatHere? '/' { $2 }