diff --git a/Changes b/Changes
--- a/Changes
+++ b/Changes
@@ -1,3 +1,7 @@
+[Changes for 0.54 - 2022-06-16]
+
+* Fix compilation for GCC 14 (@ocharles).
+
 [Changes for 0.53 - 2015-02-27]
 
 * Change Cabal license field to say MIT.
diff --git a/Data/Yaml/Syck.hsc b/Data/Yaml/Syck.hsc
--- a/Data/Yaml/Syck.hsc
+++ b/Data/Yaml/Syck.hsc
@@ -1,4 +1,5 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE ForeignFunctionInterface, MagicHash, CPP, DeriveDataTypeable, TypeSynonymInstances, PatternGuards, RecursiveDo #-}
+
 #include "syck.h"
 
 module Data.Yaml.Syck (
@@ -160,10 +161,10 @@
     nodePtr <- freeze node
     rv      <- syck_emitter_mark_node emitter nodePtr
     if rv == 0 then return () else do
-    case n_elem node of
-        EMap xs  -> sequence_ [ mark x >> mark y | (x, y) <- xs ]
-        ESeq xs  -> mapM_ mark xs
-        _        -> return ()
+        case n_elem node of
+            EMap xs  -> sequence_ [ mark x >> mark y | (x, y) <- xs ]
+            ESeq xs  -> mapM_ mark xs
+            _        -> return ()
     where
     mark = markYamlNode freeze emitter
 
@@ -243,10 +244,10 @@
         syck_parser_taguri_expansion parser 0
         symId <- syck_parse parser
         if symId /= 0 then readNode parser symId else do
-        rv <- readIORef err
-        case rv of
-            Nothing     -> return nilNode
-            Just e      -> fail e
+            rv <- readIORef err
+            case rv of
+                Nothing     -> return nilNode
+                Just e      -> fail e
 
 type HashTable k v = Hash.CuckooHashTable k v
 type BadAnchorTable = HashTable Int YamlNode
@@ -258,8 +259,8 @@
     kind    <- syckNodeKind syckNode
 
     let makeRegularNode = do
-        len     <- syckNodeLength kind syckNode
-        parseNode kind parser syckNode len symId
+            len     <- syckNodeLength kind syckNode
+            parseNode kind parser syckNode len symId
 
     node    <- case kind of
         SyckMap -> do
diff --git a/HsSyck.cabal b/HsSyck.cabal
--- a/HsSyck.cabal
+++ b/HsSyck.cabal
@@ -1,6 +1,6 @@
 Name:                HsSyck
-Version:             0.53
-Cabal-version:       >= 1.6
+Version:             0.54
+Cabal-version:       >= 1.10
 Category:            Text, Pugs
 Synopsis:            Fast, lightweight YAML loader and dumper
 Description:         This is a simple YAML ('Yet Another Markup Language') processor,
@@ -15,11 +15,11 @@
 License-File:        LICENSE
 Author:              Audrey Tang
 Maintainer:          audreyt@audreyt.org
-Copyright:           Audrey Tang, Gaal Yahas, Oliver Charles, 2005, 2006, 2007, 2008, 2009, 2013, 2014, 2015
+Copyright:           Audrey Tang, Gaal Yahas, Oliver Charles, 2005, 2006, 2007, 2008, 2009, 2013, 2014, 2015, 2025
 Bug-Reports: https://github.com/audreyt/hssyck/issues
 
 Build-Type:          Simple
-Tested-With:         GHC==6.8.2, GHC==6.8.3, GHC==6.10.1, GHC==6.10.2, GHC==7.6.3
+Tested-With:         GHC==6.8.2, GHC==6.8.3, GHC==6.10.1, GHC==6.10.2, GHC==7.6.3, GHC==9.4.8
 Data-Files:          Changes
 Extra-Source-Files:  syck/syck.h syck/syck_st.h syck/gram.h syck/yamlbyte.h
 
@@ -28,14 +28,17 @@
     location: http://github.com/audreyt/hssyck
 
 Library
-    Build-Depends: base>=4 && <6, bytestring>=0.9.0.1, syb, utf8-string>=0.3, hashtables
+    Default-language:    Haskell2010
+    Build-Depends: base>=4 && <6,
+                   bytestring>=0.9.0.1 && <0.12,
+                   syb<0.8,
+                   utf8-string>=0.3 && <1.1,
+                   hashtables<1.5
 
     exposed-modules: Data.Yaml.Syck
 
-    ghc-options: -funbox-strict-fields
+    ghc-options: -funbox-strict-fields -optc-Wno-int-conversion -optc-Wno-deprecated-non-prototype -optc-Wno-format
 
-    extensions: ForeignFunctionInterface, MagicHash, CPP,
-                DeriveDataTypeable, TypeSynonymInstances, PatternGuards, RecursiveDo
 
     c-sources: syck/bytecode.c syck/emitter.c syck/gram.c syck/handler.c
                syck/implicit.c syck/node.c syck/syck.c syck/syck_st.c
diff --git a/syck/gram.c b/syck/gram.c
--- a/syck/gram.c
+++ b/syck/gram.c
@@ -141,7 +141,8 @@
 # define YYSTYPE_IS_TRIVIAL 1
 #endif
 
-
+/* Forward declaration for sycklex */
+int sycklex( YYSTYPE *, void * );
 
 /* Copy the second part of user declarations.  */
 
