tree-sitter-abl 0.0.49 → 0.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +3 -0
- package/binding.gyp +19 -19
- package/bindings/node/binding.cc +1 -1
- package/bindings/node/index.js +1 -1
- package/bindings/rust/build.rs +40 -40
- package/bindings/rust/lib.rs +52 -52
- package/example1.cls +1 -32
- package/grammar.js +119 -56
- package/package.json +1 -1
- package/parser.obj +0 -0
- package/scanner.obj +0 -0
- package/src/grammar.json +838 -293
- package/src/node-types.json +451 -4
- package/src/parser.c +167765 -105977
- package/src/tree_sitter/array.h +2 -1
- package/tree-sitter-abl.wasm +0 -0
- package/bindings/node/binding_test.js +0 -9
- package/bindings/node/index.d.ts +0 -28
package/binding.gyp
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"targets": [
|
|
3
|
-
{
|
|
4
|
-
"target_name": "tree_sitter_abl_binding",
|
|
5
|
-
"include_dirs": [
|
|
6
|
-
"<!(node -e \"require('nan')\")",
|
|
7
|
-
"src"
|
|
8
|
-
],
|
|
9
|
-
"sources": [
|
|
10
|
-
"bindings/node/binding.cc",
|
|
11
|
-
"src/parser.c",
|
|
12
|
-
"src/scanner.c",
|
|
13
|
-
],
|
|
14
|
-
"cflags_c": [
|
|
15
|
-
"-std=c99",
|
|
16
|
-
]
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"targets": [
|
|
3
|
+
{
|
|
4
|
+
"target_name": "tree_sitter_abl_binding",
|
|
5
|
+
"include_dirs": [
|
|
6
|
+
"<!(node -e \"require('nan')\")",
|
|
7
|
+
"src"
|
|
8
|
+
],
|
|
9
|
+
"sources": [
|
|
10
|
+
"bindings/node/binding.cc",
|
|
11
|
+
"src/parser.c",
|
|
12
|
+
"src/scanner.c",
|
|
13
|
+
],
|
|
14
|
+
"cflags_c": [
|
|
15
|
+
"-std=c99",
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
package/bindings/node/binding.cc
CHANGED
package/bindings/node/index.js
CHANGED
package/bindings/rust/build.rs
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
fn main() {
|
|
2
|
-
let src_dir = std::path::Path::new("src");
|
|
3
|
-
|
|
4
|
-
let mut c_config = cc::Build::new();
|
|
5
|
-
c_config.include(&src_dir);
|
|
6
|
-
c_config
|
|
7
|
-
.flag_if_supported("-Wno-unused-parameter")
|
|
8
|
-
.flag_if_supported("-Wno-unused-but-set-variable")
|
|
9
|
-
.flag_if_supported("-Wno-trigraphs");
|
|
10
|
-
let parser_path = src_dir.join("parser.c");
|
|
11
|
-
c_config.file(&parser_path);
|
|
12
|
-
|
|
13
|
-
// If your language uses an external scanner written in C,
|
|
14
|
-
// then include this block of code:
|
|
15
|
-
|
|
16
|
-
/*
|
|
17
|
-
let scanner_path = src_dir.join("scanner.c");
|
|
18
|
-
c_config.file(&scanner_path);
|
|
19
|
-
println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
c_config.compile("parser");
|
|
23
|
-
println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
|
|
24
|
-
|
|
25
|
-
// If your language uses an external scanner written in C++,
|
|
26
|
-
// then include this block of code:
|
|
27
|
-
|
|
28
|
-
/*
|
|
29
|
-
let mut cpp_config = cc::Build::new();
|
|
30
|
-
cpp_config.cpp(true);
|
|
31
|
-
cpp_config.include(&src_dir);
|
|
32
|
-
cpp_config
|
|
33
|
-
.flag_if_supported("-Wno-unused-parameter")
|
|
34
|
-
.flag_if_supported("-Wno-unused-but-set-variable");
|
|
35
|
-
let scanner_path = src_dir.join("scanner.cc");
|
|
36
|
-
cpp_config.file(&scanner_path);
|
|
37
|
-
cpp_config.compile("scanner");
|
|
38
|
-
println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
|
|
39
|
-
*/
|
|
40
|
-
}
|
|
1
|
+
fn main() {
|
|
2
|
+
let src_dir = std::path::Path::new("src");
|
|
3
|
+
|
|
4
|
+
let mut c_config = cc::Build::new();
|
|
5
|
+
c_config.include(&src_dir);
|
|
6
|
+
c_config
|
|
7
|
+
.flag_if_supported("-Wno-unused-parameter")
|
|
8
|
+
.flag_if_supported("-Wno-unused-but-set-variable")
|
|
9
|
+
.flag_if_supported("-Wno-trigraphs");
|
|
10
|
+
let parser_path = src_dir.join("parser.c");
|
|
11
|
+
c_config.file(&parser_path);
|
|
12
|
+
|
|
13
|
+
// If your language uses an external scanner written in C,
|
|
14
|
+
// then include this block of code:
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
let scanner_path = src_dir.join("scanner.c");
|
|
18
|
+
c_config.file(&scanner_path);
|
|
19
|
+
println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
c_config.compile("parser");
|
|
23
|
+
println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
|
|
24
|
+
|
|
25
|
+
// If your language uses an external scanner written in C++,
|
|
26
|
+
// then include this block of code:
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
let mut cpp_config = cc::Build::new();
|
|
30
|
+
cpp_config.cpp(true);
|
|
31
|
+
cpp_config.include(&src_dir);
|
|
32
|
+
cpp_config
|
|
33
|
+
.flag_if_supported("-Wno-unused-parameter")
|
|
34
|
+
.flag_if_supported("-Wno-unused-but-set-variable");
|
|
35
|
+
let scanner_path = src_dir.join("scanner.cc");
|
|
36
|
+
cpp_config.file(&scanner_path);
|
|
37
|
+
cpp_config.compile("scanner");
|
|
38
|
+
println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
|
|
39
|
+
*/
|
|
40
|
+
}
|
package/bindings/rust/lib.rs
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
//! This crate provides abl language support for the [tree-sitter][] parsing library.
|
|
2
|
-
//!
|
|
3
|
-
//! Typically, you will use the [language][language func] function to add this language to a
|
|
4
|
-
//! tree-sitter [Parser][], and then use the parser to parse some code:
|
|
5
|
-
//!
|
|
6
|
-
//! ```
|
|
7
|
-
//! let code = "";
|
|
8
|
-
//! let mut parser = tree_sitter::Parser::new();
|
|
9
|
-
//! parser.set_language(tree_sitter_abl::language()).expect("Error loading abl grammar");
|
|
10
|
-
//! let tree = parser.parse(code, None).unwrap();
|
|
11
|
-
//! ```
|
|
12
|
-
//!
|
|
13
|
-
//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
|
|
14
|
-
//! [language func]: fn.language.html
|
|
15
|
-
//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
|
|
16
|
-
//! [tree-sitter]: https://tree-sitter.github.io/
|
|
17
|
-
|
|
18
|
-
use tree_sitter::Language;
|
|
19
|
-
|
|
20
|
-
extern "C" {
|
|
21
|
-
fn tree_sitter_abl() -> Language;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/// Get the tree-sitter [Language][] for this grammar.
|
|
25
|
-
///
|
|
26
|
-
/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
|
|
27
|
-
pub fn language() -> Language {
|
|
28
|
-
unsafe { tree_sitter_abl() }
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/// The content of the [`node-types.json`][] file for this grammar.
|
|
32
|
-
///
|
|
33
|
-
/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
|
|
34
|
-
pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json");
|
|
35
|
-
|
|
36
|
-
// Uncomment these to include any queries that this grammar contains
|
|
37
|
-
|
|
38
|
-
// pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm");
|
|
39
|
-
// pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm");
|
|
40
|
-
// pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm");
|
|
41
|
-
// pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm");
|
|
42
|
-
|
|
43
|
-
#[cfg(test)]
|
|
44
|
-
mod tests {
|
|
45
|
-
#[test]
|
|
46
|
-
fn test_can_load_grammar() {
|
|
47
|
-
let mut parser = tree_sitter::Parser::new();
|
|
48
|
-
parser
|
|
49
|
-
.set_language(super::language())
|
|
50
|
-
.expect("Error loading abl language");
|
|
51
|
-
}
|
|
52
|
-
}
|
|
1
|
+
//! This crate provides abl language support for the [tree-sitter][] parsing library.
|
|
2
|
+
//!
|
|
3
|
+
//! Typically, you will use the [language][language func] function to add this language to a
|
|
4
|
+
//! tree-sitter [Parser][], and then use the parser to parse some code:
|
|
5
|
+
//!
|
|
6
|
+
//! ```
|
|
7
|
+
//! let code = "";
|
|
8
|
+
//! let mut parser = tree_sitter::Parser::new();
|
|
9
|
+
//! parser.set_language(tree_sitter_abl::language()).expect("Error loading abl grammar");
|
|
10
|
+
//! let tree = parser.parse(code, None).unwrap();
|
|
11
|
+
//! ```
|
|
12
|
+
//!
|
|
13
|
+
//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
|
|
14
|
+
//! [language func]: fn.language.html
|
|
15
|
+
//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html
|
|
16
|
+
//! [tree-sitter]: https://tree-sitter.github.io/
|
|
17
|
+
|
|
18
|
+
use tree_sitter::Language;
|
|
19
|
+
|
|
20
|
+
extern "C" {
|
|
21
|
+
fn tree_sitter_abl() -> Language;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// Get the tree-sitter [Language][] for this grammar.
|
|
25
|
+
///
|
|
26
|
+
/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html
|
|
27
|
+
pub fn language() -> Language {
|
|
28
|
+
unsafe { tree_sitter_abl() }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/// The content of the [`node-types.json`][] file for this grammar.
|
|
32
|
+
///
|
|
33
|
+
/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types
|
|
34
|
+
pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json");
|
|
35
|
+
|
|
36
|
+
// Uncomment these to include any queries that this grammar contains
|
|
37
|
+
|
|
38
|
+
// pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm");
|
|
39
|
+
// pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm");
|
|
40
|
+
// pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm");
|
|
41
|
+
// pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm");
|
|
42
|
+
|
|
43
|
+
#[cfg(test)]
|
|
44
|
+
mod tests {
|
|
45
|
+
#[test]
|
|
46
|
+
fn test_can_load_grammar() {
|
|
47
|
+
let mut parser = tree_sitter::Parser::new();
|
|
48
|
+
parser
|
|
49
|
+
.set_language(super::language())
|
|
50
|
+
.expect("Error loading abl language");
|
|
51
|
+
}
|
|
52
|
+
}
|
package/example1.cls
CHANGED
|
@@ -1,32 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/* { "abl.completion.upperCase": true}*/
|
|
3
|
-
|
|
4
|
-
CLASS A:
|
|
5
|
-
DEFINE PROTECTED VARIABLE oRepo AS ILanguageRepository NO-UNDO.
|
|
6
|
-
|
|
7
|
-
CONSTRUCTOR PUBLIC LanguageService (poRepo AS ILanguageRepository):
|
|
8
|
-
THIS-OBJECT:oRepo = poRepo.
|
|
9
|
-
END CONSTRUCTOR.
|
|
10
|
-
|
|
11
|
-
METHOD PUBLIC Language GetByID(pcID AS CHARACTER):
|
|
12
|
-
RETURN THIS-OBJECT:oRepo:GetByID(pcID).
|
|
13
|
-
END METHOD.
|
|
14
|
-
|
|
15
|
-
METHOD PUBLIC Language GetByISO(pcISO AS CHARACTER):
|
|
16
|
-
RETURN THIS-OBJECT:oRepo:GetByISO(pcISO).
|
|
17
|
-
END METHOD.
|
|
18
|
-
|
|
19
|
-
METHOD PUBLIC LOGICAL ExistByISO(pcISO AS CHARACTER):
|
|
20
|
-
THIS-OBJECT:oRepo:GetByISO(pcISO).
|
|
21
|
-
RETURN TRUE.
|
|
22
|
-
|
|
23
|
-
CATCH e AS LanguageError:
|
|
24
|
-
RETURN FALSE.
|
|
25
|
-
END.
|
|
26
|
-
END METHOD.
|
|
27
|
-
|
|
28
|
-
METHOD PUBLIC Language GetByNameEn(pcNameEn AS CHARACTER):
|
|
29
|
-
RETURN THIS-OBJECT:oRepo:GetByNameEn(pcNameEn).
|
|
30
|
-
END METHOD.
|
|
31
|
-
|
|
32
|
-
END CLASS.
|
|
1
|
+
run getValues.p(input Session:List [{&value}], output table ttData append by-reference).
|
package/grammar.js
CHANGED
|
@@ -42,7 +42,7 @@ module.exports = grammar({
|
|
|
42
42
|
rules: {
|
|
43
43
|
source_code: ($) => repeat(choice($._statement, $.class_statement, $._definition, $.do_block, $.interface_statement)),
|
|
44
44
|
|
|
45
|
-
body: ($) => seq(":", repeat(choice($._statement, $._definition))),
|
|
45
|
+
body: ($) => seq(":", repeat(choice($._statement, $._definition, $.do_block))),
|
|
46
46
|
|
|
47
47
|
_statement_body: ($) => choice($.do_block, prec(2, $._statement)),
|
|
48
48
|
|
|
@@ -57,9 +57,11 @@ module.exports = grammar({
|
|
|
57
57
|
$.var_statement,
|
|
58
58
|
seq(
|
|
59
59
|
optional($.annotation),
|
|
60
|
-
$.method_statement
|
|
60
|
+
$.method_statement
|
|
61
|
+
),
|
|
61
62
|
$.constructor_statement,
|
|
62
|
-
$.destructor_statement
|
|
63
|
+
$.destructor_statement,
|
|
64
|
+
$.function_statement
|
|
63
65
|
)
|
|
64
66
|
)
|
|
65
67
|
),
|
|
@@ -242,6 +244,7 @@ module.exports = grammar({
|
|
|
242
244
|
$.array_literal,
|
|
243
245
|
$.array_access,
|
|
244
246
|
$.identifier,
|
|
247
|
+
$.constant,
|
|
245
248
|
$._binary_expression
|
|
246
249
|
),
|
|
247
250
|
|
|
@@ -283,7 +286,7 @@ module.exports = grammar({
|
|
|
283
286
|
|
|
284
287
|
// IDENTIFIERS
|
|
285
288
|
|
|
286
|
-
identifier: ($) => /[A-Z|a-z|\-|\\_]{1}[A-Z|a-z|\-|\\_|0-9]*/i,
|
|
289
|
+
identifier: ($) => /[A-Z|a-z|\-|\\_]{1}[#A-Z|a-z|\-|\\_|0-9]*/i,
|
|
287
290
|
|
|
288
291
|
constant: ($) =>
|
|
289
292
|
seq("{", optional("&"), $._constant_value, "}"),
|
|
@@ -302,7 +305,8 @@ module.exports = grammar({
|
|
|
302
305
|
choice(
|
|
303
306
|
$.access_tuning,
|
|
304
307
|
$.scope_tuning,
|
|
305
|
-
$.member_modifier
|
|
308
|
+
$.member_modifier,
|
|
309
|
+
$.constant
|
|
306
310
|
),
|
|
307
311
|
|
|
308
312
|
// TODO: Fix! HACK: progress spaghetti allows to define tuning order before where clause
|
|
@@ -533,23 +537,21 @@ module.exports = grammar({
|
|
|
533
537
|
),
|
|
534
538
|
|
|
535
539
|
variable_tuning: ($) =>
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
seq(optional(kw("NOT")), kw("CASE-SENSITIVE")),
|
|
552
|
-
)
|
|
540
|
+
choice(
|
|
541
|
+
$._serialize_name,
|
|
542
|
+
// $._bgcolor,
|
|
543
|
+
// $._fgcolor,
|
|
544
|
+
// $._pfcolor,
|
|
545
|
+
// $._dcolor,
|
|
546
|
+
// $._context_help_id,
|
|
547
|
+
$._value_tuning,
|
|
548
|
+
$._format,
|
|
549
|
+
$._font,
|
|
550
|
+
$._label,
|
|
551
|
+
seq(kw("MOUSE-POINTER"), $.identifier),
|
|
552
|
+
$._column_label,
|
|
553
|
+
// kw("DROP-TARGET"),
|
|
554
|
+
seq(optional(kw("NOT")), kw("CASE-SENSITIVE")),
|
|
553
555
|
),
|
|
554
556
|
|
|
555
557
|
// TYPES
|
|
@@ -649,9 +651,10 @@ module.exports = grammar({
|
|
|
649
651
|
$.number_literal,
|
|
650
652
|
$.null_expression,
|
|
651
653
|
$._binary_expression,
|
|
652
|
-
|
|
654
|
+
$.unary_expression,
|
|
655
|
+
$.function_call
|
|
653
656
|
),
|
|
654
|
-
|
|
657
|
+
repeat($.parameter_tuning)
|
|
655
658
|
)
|
|
656
659
|
),
|
|
657
660
|
|
|
@@ -726,7 +729,7 @@ module.exports = grammar({
|
|
|
726
729
|
seq(
|
|
727
730
|
field(
|
|
728
731
|
"object",
|
|
729
|
-
choice($.
|
|
732
|
+
choice($.new_expression, $.function_call, $.constant, $._name)
|
|
730
733
|
),
|
|
731
734
|
repeat1(seq(alias($._namecolon, ":"), field("property", $.identifier)))
|
|
732
735
|
),
|
|
@@ -740,7 +743,7 @@ module.exports = grammar({
|
|
|
740
743
|
),
|
|
741
744
|
|
|
742
745
|
case_condition: ($) =>
|
|
743
|
-
seq(optional(seq(kw("OR"), kw("WHEN"))), choice($._literal, $.boolean_literal)),
|
|
746
|
+
seq(optional(seq(kw("OR"), kw("WHEN"))), choice($._literal, $.boolean_literal, $.logical_expression, $.comparison_expression, $.unary_expression, $.object_access)),
|
|
744
747
|
|
|
745
748
|
case_when_branch: ($) =>
|
|
746
749
|
seq(kw("WHEN"), repeat1($.case_condition), kw("THEN"), $._statement_body),
|
|
@@ -854,9 +857,9 @@ module.exports = grammar({
|
|
|
854
857
|
|
|
855
858
|
_return_action: ($) =>
|
|
856
859
|
choice(
|
|
857
|
-
seq(kw("ERROR"), optional($.
|
|
860
|
+
seq(kw("ERROR"), optional($._return_value_expression)),
|
|
858
861
|
kw("NO-APPLY"),
|
|
859
|
-
$.
|
|
862
|
+
$._return_value_expression
|
|
860
863
|
),
|
|
861
864
|
|
|
862
865
|
// PHRASES
|
|
@@ -867,8 +870,8 @@ module.exports = grammar({
|
|
|
867
870
|
seq(
|
|
868
871
|
$.assignment,
|
|
869
872
|
kw("TO"),
|
|
870
|
-
choice($.function_call, $._integer_literal, $.identifier),
|
|
871
|
-
optional(seq(kw("BY"), $._integer_literal))
|
|
873
|
+
choice($.function_call, $._integer_literal, $.identifier, $.object_access),
|
|
874
|
+
optional(seq(kw("BY"), choice($._integer_literal, $.unary_expression)))
|
|
872
875
|
),
|
|
873
876
|
|
|
874
877
|
// combo_box_phrase: ($) =>
|
|
@@ -1118,6 +1121,13 @@ module.exports = grammar({
|
|
|
1118
1121
|
_list($._name, ",")
|
|
1119
1122
|
),
|
|
1120
1123
|
|
|
1124
|
+
in_frame_phrase: ($) =>
|
|
1125
|
+
seq(
|
|
1126
|
+
$.object_access,
|
|
1127
|
+
kw("IN"),
|
|
1128
|
+
$._frame
|
|
1129
|
+
),
|
|
1130
|
+
|
|
1121
1131
|
// widget_phrase: ($) =>
|
|
1122
1132
|
// choice(
|
|
1123
1133
|
// $._frame,
|
|
@@ -1386,13 +1396,16 @@ module.exports = grammar({
|
|
|
1386
1396
|
|
|
1387
1397
|
event_definition: ($) =>
|
|
1388
1398
|
seq(
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
optional(
|
|
1394
|
-
|
|
1395
|
-
|
|
1399
|
+
$._define,
|
|
1400
|
+
repeat($._tuning),
|
|
1401
|
+
kw("EVENT"),
|
|
1402
|
+
field("name", $.identifier),
|
|
1403
|
+
optional(
|
|
1404
|
+
choice(
|
|
1405
|
+
seq(optional(kw("SIGNATURE")), kw("VOID"), alias($.function_parameters, $.parameters)),
|
|
1406
|
+
seq(optional(kw("DELEGATE")), optional(kw("CLASS")), $._name),
|
|
1407
|
+
)
|
|
1408
|
+
),
|
|
1396
1409
|
$._terminator
|
|
1397
1410
|
),
|
|
1398
1411
|
|
|
@@ -1432,7 +1445,9 @@ module.exports = grammar({
|
|
|
1432
1445
|
optional(
|
|
1433
1446
|
choice(alias($._input_keyword, "INPUT"), alias($._output_keyword, "OUTPUT"), kw("INPUT-OUTPUT"), kw("RETURN"))
|
|
1434
1447
|
),
|
|
1435
|
-
|
|
1448
|
+
choice(kw("PARAMETER"), kw("PARAM")),
|
|
1449
|
+
optional($._parameter_definition_option),
|
|
1450
|
+
optional(alias($._for_keyword, "FOR")),
|
|
1436
1451
|
field("name", $.identifier),
|
|
1437
1452
|
choice(
|
|
1438
1453
|
seq($.type_tuning, repeat($.variable_tuning)),
|
|
@@ -1450,17 +1465,11 @@ module.exports = grammar({
|
|
|
1450
1465
|
),
|
|
1451
1466
|
|
|
1452
1467
|
_parameter_definition_option: ($) =>
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
kw("TABLE"),
|
|
1459
|
-
kw("TABLE-HANDLE"),
|
|
1460
|
-
seq(kw("DATASET"), optional(token.immediate(kw("-HANDLE"))))
|
|
1461
|
-
)
|
|
1462
|
-
),
|
|
1463
|
-
optional(alias($._for_keyword, "FOR")),
|
|
1468
|
+
choice(
|
|
1469
|
+
seq(kw("BUFFER"), field("buffer", $.identifier)),
|
|
1470
|
+
kw("TABLE"),
|
|
1471
|
+
kw("TABLE-HANDLE"),
|
|
1472
|
+
seq(kw("DATASET"), optional(token.immediate(kw("-HANDLE"))))
|
|
1464
1473
|
),
|
|
1465
1474
|
|
|
1466
1475
|
property_definition: ($) =>
|
|
@@ -1471,7 +1480,7 @@ module.exports = grammar({
|
|
|
1471
1480
|
field("name", $.identifier),
|
|
1472
1481
|
$.type_tuning,
|
|
1473
1482
|
repeat($._value_tuning),
|
|
1474
|
-
choice(
|
|
1483
|
+
choice(repeat1(choice($.getter, $.setter)), $._terminator)
|
|
1475
1484
|
),
|
|
1476
1485
|
|
|
1477
1486
|
query_definition: ($) =>
|
|
@@ -1652,8 +1661,18 @@ module.exports = grammar({
|
|
|
1652
1661
|
$.return_type,
|
|
1653
1662
|
optional($._extent),
|
|
1654
1663
|
optional(alias($.function_parameters, $.parameters)),
|
|
1655
|
-
|
|
1656
|
-
|
|
1664
|
+
$._function_option,
|
|
1665
|
+
),
|
|
1666
|
+
|
|
1667
|
+
_function_option: ($) =>
|
|
1668
|
+
choice(
|
|
1669
|
+
seq(
|
|
1670
|
+
optional(alias($.dot_body, $.body)),
|
|
1671
|
+
$._block_terminator),
|
|
1672
|
+
seq(
|
|
1673
|
+
choice(seq(kw("IN"), $.identifier), kw("FORWARD")),
|
|
1674
|
+
$._terminator
|
|
1675
|
+
)
|
|
1657
1676
|
),
|
|
1658
1677
|
|
|
1659
1678
|
repeat_statement: ($) =>
|
|
@@ -1693,6 +1712,7 @@ module.exports = grammar({
|
|
|
1693
1712
|
$._input_output_option,
|
|
1694
1713
|
repeat($.stream_tuning),
|
|
1695
1714
|
repeat($.stream_flag),
|
|
1715
|
+
optional($.constant),
|
|
1696
1716
|
$._terminator
|
|
1697
1717
|
),
|
|
1698
1718
|
|
|
@@ -1827,6 +1847,14 @@ module.exports = grammar({
|
|
|
1827
1847
|
$._terminator
|
|
1828
1848
|
),
|
|
1829
1849
|
|
|
1850
|
+
release_statement: ($) =>
|
|
1851
|
+
seq(
|
|
1852
|
+
kw("RELEASE"),
|
|
1853
|
+
$.identifier,
|
|
1854
|
+
optional(kw("NO-ERROR")),
|
|
1855
|
+
$._terminator
|
|
1856
|
+
),
|
|
1857
|
+
|
|
1830
1858
|
run_statement: ($) =>
|
|
1831
1859
|
seq(
|
|
1832
1860
|
kw("RUN"),
|
|
@@ -1939,13 +1967,22 @@ module.exports = grammar({
|
|
|
1939
1967
|
ambiguous_expression: ($) => seq(kw("AMBIGUOUS"), $._name),
|
|
1940
1968
|
|
|
1941
1969
|
temp_table_expression: ($) =>
|
|
1942
|
-
seq(kw("TEMP-TABLE"), field("table", $.identifier)),
|
|
1970
|
+
seq(kw("TEMP-TABLE"), field("table", choice($.identifier, $.object_access))),
|
|
1971
|
+
|
|
1972
|
+
query_expression: ($) =>
|
|
1973
|
+
seq(kw("QUERY"), field("query", choice($.identifier, $.object_access))),
|
|
1974
|
+
|
|
1975
|
+
stream_expression: ($) =>
|
|
1976
|
+
seq(kw("STREAM"), field("stream", choice($.identifier, $.object_access))),
|
|
1977
|
+
|
|
1978
|
+
buffer_expression: ($) =>
|
|
1979
|
+
seq(kw("BUFFER"), field("buffer", choice($.identifier, $.object_access))),
|
|
1943
1980
|
|
|
1944
1981
|
current_changed_expression: ($) => seq(kw("CURRENT-CHANGED"), $._name),
|
|
1945
1982
|
|
|
1946
1983
|
locked_expression: ($) => seq(kw("LOCKED"), $._name),
|
|
1947
1984
|
|
|
1948
|
-
|
|
1985
|
+
dataset_expression: ($) => seq(prec.left(kw("DATASET")), $._name),
|
|
1949
1986
|
|
|
1950
1987
|
when_expression: ($) => seq(kw("WHEN"), $._expression),
|
|
1951
1988
|
|
|
@@ -2005,7 +2042,7 @@ module.exports = grammar({
|
|
|
2005
2042
|
available_expression: ($) =>
|
|
2006
2043
|
seq(
|
|
2007
2044
|
choice(kw("AVAIL"), kw("AVAILABLE")),
|
|
2008
|
-
$.identifier
|
|
2045
|
+
choice($.identifier, $.parenthesized_expression),
|
|
2009
2046
|
),
|
|
2010
2047
|
|
|
2011
2048
|
new_expression: ($) =>
|
|
@@ -2030,6 +2067,30 @@ module.exports = grammar({
|
|
|
2030
2067
|
)
|
|
2031
2068
|
),
|
|
2032
2069
|
|
|
2070
|
+
_return_value_expression: ($) =>
|
|
2071
|
+
choice(
|
|
2072
|
+
$.string_literal,
|
|
2073
|
+
$.number_literal,
|
|
2074
|
+
$.boolean_literal,
|
|
2075
|
+
$.null_expression,
|
|
2076
|
+
$.dataset_expression,
|
|
2077
|
+
$.temp_table_expression,
|
|
2078
|
+
$.query_expression,
|
|
2079
|
+
$.stream_expression,
|
|
2080
|
+
$.buffer_expression,
|
|
2081
|
+
$.identifier,
|
|
2082
|
+
$.function_call,
|
|
2083
|
+
$.object_access,
|
|
2084
|
+
$.member_access,
|
|
2085
|
+
$.qualified_name,
|
|
2086
|
+
$.array_access,
|
|
2087
|
+
$.ternary_expression,
|
|
2088
|
+
$.new_expression,
|
|
2089
|
+
$.parenthesized_expression,
|
|
2090
|
+
$.unary_expression,
|
|
2091
|
+
$._binary_expression
|
|
2092
|
+
),
|
|
2093
|
+
|
|
2033
2094
|
// SUPERTYPES
|
|
2034
2095
|
|
|
2035
2096
|
_expression: ($) =>
|
|
@@ -2045,7 +2106,7 @@ module.exports = grammar({
|
|
|
2045
2106
|
$.temp_table_expression,
|
|
2046
2107
|
$.current_changed_expression,
|
|
2047
2108
|
$.locked_expression,
|
|
2048
|
-
|
|
2109
|
+
$.dataset_expression,
|
|
2049
2110
|
$.input_expression,
|
|
2050
2111
|
$.can_find_expression,
|
|
2051
2112
|
$.new_expression,
|
|
@@ -2060,6 +2121,7 @@ module.exports = grammar({
|
|
|
2060
2121
|
$.member_access,
|
|
2061
2122
|
$.array_access,
|
|
2062
2123
|
$.function_call,
|
|
2124
|
+
$.in_frame_phrase,
|
|
2063
2125
|
|
|
2064
2126
|
$._name,
|
|
2065
2127
|
$.constant
|
|
@@ -2090,6 +2152,7 @@ module.exports = grammar({
|
|
|
2090
2152
|
// $.interface_statement,
|
|
2091
2153
|
$.on_statement,
|
|
2092
2154
|
$.prompt_for_statement,
|
|
2155
|
+
$.release_statement,
|
|
2093
2156
|
$.run_statement,
|
|
2094
2157
|
$.enum_statement,
|
|
2095
2158
|
$.abl_statement,
|
package/package.json
CHANGED
package/parser.obj
CHANGED
|
Binary file
|
package/scanner.obj
CHANGED
|
Binary file
|