Skip to content

Commit

Permalink
parser: add enum_statement
Browse files Browse the repository at this point in the history
Fixes #80
  • Loading branch information
jkbz64 committed Sep 22, 2024
1 parent d69830f commit 95078f5
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 0 deletions.
33 changes: 33 additions & 0 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -1365,6 +1365,38 @@ module.exports = grammar({
$._terminator
),

enum_body: ($) => seq(":", repeat($.enum_definition)),
enum_member: ($) =>
seq(
field("name", $.identifier),
field(
"value",
optional(
seq(
kw("="),
_list(
choice($.identifier, $.number_literal, $.string_literal),
","
)
)
)
)
),
enum_definition: ($) =>
seq(kw("DEFINE"), kw("ENUM"), repeat($.enum_member), $._terminator),

enum_tuning: ($) => choice(kw("FLAGS")),
enum_statement: ($) =>
seq(
kw("ENUM"),
field("name", $.identifier),
repeat($.enum_tuning),
alias($.enum_body, $.body),
kw("END"),
optional(kw("ENUM")),
$._terminator
),

// Supertypes
_expression: ($) =>
choice(
Expand Down Expand Up @@ -1435,6 +1467,7 @@ module.exports = grammar({
$.dataset_definition,
$.button_definition,
$.run_statement,
$.enum_statement,
$.abl_statement,
prec.left(PREC.EXTRA, $.label)
)
Expand Down
86 changes: 86 additions & 0 deletions test/corpus/basic.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2447,3 +2447,89 @@ RUN server-error.p ON SERVER hServer
(identifier)
(type_tuning
(primitive_type))))))

================================================================================
ENUM statement
================================================================================

ENUM Weather:
define ENUM Rainy
Default = Sunny
Cloudy
Snowy
Apocalyptic.
END ENUM.

ENUM Permission FLAGS:
DEFINE ENUM None = 0
Read
Write
Update = Write
ReadWrite = Read,Write
Create
Delete
Execute.
END ENUM.

ENUM Direction:
DEFINE ENUM North
South
East
West.
END ENUM.

--------------------------------------------------------------------------------

(source_code
(enum_statement
(identifier)
(body
(enum_definition
(enum_member
(identifier))
(enum_member
(identifier)
(identifier))
(enum_member
(identifier))
(enum_member
(identifier))
(enum_member
(identifier)))))
(enum_statement
(identifier)
(enum_tuning)
(body
(enum_definition
(enum_member
(identifier)
(number_literal))
(enum_member
(identifier))
(enum_member
(identifier))
(enum_member
(identifier)
(identifier))
(enum_member
(identifier)
(identifier)
(identifier))
(enum_member
(identifier))
(enum_member
(identifier))
(enum_member
(identifier)))))
(enum_statement
(identifier)
(body
(enum_definition
(enum_member
(identifier))
(enum_member
(identifier))
(enum_member
(identifier))
(enum_member
(identifier))))))

0 comments on commit 95078f5

Please sign in to comment.