{ "name": "jdg", "word": "identifier", "rules": { "source_file": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_top_statement" } }, "comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "//" }, { "type": "PATTERN", "value": "[^\\n]*" } ] } }, "_top_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "include" }, { "type": "SYMBOL", "name": "toolchains" }, { "type": "SYMBOL", "name": "build_defaults" }, { "type": "SYMBOL", "name": "structured_build" }, { "type": "SYMBOL", "name": "legacy_build_platform" }, { "type": "SYMBOL", "name": "legacy_build" }, { "type": "SYMBOL", "name": "binary_decl" }, { "type": "SYMBOL", "name": "sources_decl" }, { "type": "SYMBOL", "name": "bool_decl" }, { "type": "SYMBOL", "name": "timeout_decl" }, { "type": "SYMBOL", "name": "memory_limit_decl" }, { "type": "SYMBOL", "name": "group" } ] }, "include": { "type": "SEQ", "members": [ { "type": "STRING", "value": "include" }, { "type": "FIELD", "name": "path", "content": { "type": "SYMBOL", "name": "string" } } ] }, "legacy_build": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "build" }, { "type": "FIELD", "name": "command", "content": { "type": "SYMBOL", "name": "string" } } ] } }, "legacy_build_platform": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "keyword", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "build_linux" }, { "type": "STRING", "value": "build_windows" }, { "type": "STRING", "value": "build_darwin" } ] } }, { "type": "FIELD", "name": "command", "content": { "type": "SYMBOL", "name": "string" } } ] }, "structured_build": { "type": "PREC", "value": 2, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "build" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "build_block" } } ] } }, "build_defaults": { "type": "SEQ", "members": [ { "type": "STRING", "value": "build_defaults" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "build_block" } } ] }, "build_block": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_build_field" } }, { "type": "STRING", "value": "}" } ] }, "_build_field": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "build_scalar_field" }, { "type": "SYMBOL", "name": "build_list_field" }, { "type": "SYMBOL", "name": "build_profile_field" }, { "type": "SYMBOL", "name": "build_warnings_field" }, { "type": "SYMBOL", "name": "define_field" }, { "type": "SYMBOL", "name": "os_override" } ] }, "build_scalar_field": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "language" }, { "type": "STRING", "value": "standard" }, { "type": "STRING", "value": "output" }, { "type": "STRING", "value": "wrapper" } ] } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "build_list_field": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "sources" }, { "type": "STRING", "value": "includes" }, { "type": "STRING", "value": "sanitize" }, { "type": "STRING", "value": "link" }, { "type": "STRING", "value": "extra" }, { "type": "STRING", "value": "platforms" }, { "type": "STRING", "value": "compilers" } ] } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "string" } } } ] }, "build_profile_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "profile" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "profile_value" } } ] }, "profile_value": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "release" }, { "type": "STRING", "value": "debug" }, { "type": "STRING", "value": "sanitized" } ] }, "build_warnings_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "warnings" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "warnings_value" } } ] }, "warnings_value": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "default" }, { "type": "STRING", "value": "strict" }, { "type": "STRING", "value": "pedantic" } ] }, "define_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "define" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "key", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "os_override": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "os", "content": { "type": "SYMBOL", "name": "os_name" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "build_block" } } ] }, "os_name": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "linux" }, { "type": "STRING", "value": "windows" }, { "type": "STRING", "value": "darwin" } ] }, "toolchains": { "type": "SEQ", "members": [ { "type": "STRING", "value": "toolchains" }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "toolchain_entry" } }, { "type": "STRING", "value": "}" } ] }, "toolchain_entry": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "string" } ] } }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_toolchain_field" } }, { "type": "STRING", "value": "}" } ] }, "_toolchain_field": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "toolchain_platforms_field" }, { "type": "SYMBOL", "name": "toolchain_binary_field" }, { "type": "SYMBOL", "name": "toolchain_class_field" } ] }, "toolchain_platforms_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "platforms" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "string" } } } ] }, "toolchain_binary_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "binary" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "toolchain_class_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "class" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "class_value" } } ] }, "class_value": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "gnu" }, { "type": "STRING", "value": "msvc" } ] }, "binary_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "binary" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "sources_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "sources" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "bool_decl": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "normalize_crlf" }, { "type": "STRING", "value": "trim_trailing_ws" } ] } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "bool" } } ] }, "timeout_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "timeout" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "duration" } } ] }, "memory_limit_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "memory_limit" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "size" } } ] }, "group": { "type": "SEQ", "members": [ { "type": "STRING", "value": "group" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_group_field" } }, { "type": "STRING", "value": "}" } ] }, "_group_field": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "group_weight_field" }, { "type": "SYMBOL", "name": "group_timeout_field" }, { "type": "SYMBOL", "name": "group_memory_field" }, { "type": "SYMBOL", "name": "group_scoring_field" }, { "type": "SYMBOL", "name": "group_wrapper_field" }, { "type": "SYMBOL", "name": "env_decl" }, { "type": "SYMBOL", "name": "test" }, { "type": "SYMBOL", "name": "pattern" } ] }, "group_weight_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "weight" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "number" } } ] }, "group_timeout_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "timeout" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "duration" } } ] }, "group_memory_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "memory_limit" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "size" } } ] }, "group_scoring_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "scoring" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "scoring_value" } } ] }, "scoring_value": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "partial" }, { "type": "STRING", "value": "all_or_none" } ] }, "group_wrapper_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "wrapper" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "env_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "env" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "key", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "test": { "type": "SEQ", "members": [ { "type": "STRING", "value": "test" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_test_field" } }, { "type": "STRING", "value": "}" } ] }, "_test_field": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "test_stdin_field" }, { "type": "SYMBOL", "name": "test_stdout_field" }, { "type": "SYMBOL", "name": "test_stderr_field" }, { "type": "SYMBOL", "name": "test_args_field" }, { "type": "SYMBOL", "name": "test_exit_code_field" }, { "type": "SYMBOL", "name": "test_timeout_field" }, { "type": "SYMBOL", "name": "test_memory_field" }, { "type": "SYMBOL", "name": "test_wrapper_field" }, { "type": "SYMBOL", "name": "env_decl" }, { "type": "SYMBOL", "name": "file_decl" }, { "type": "SYMBOL", "name": "out_file_decl" } ] }, "test_stdin_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "stdin" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "test_stdout_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "stdout" }, { "type": "SYMBOL", "name": "_matcher" } ] }, "test_stderr_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "stderr" }, { "type": "SYMBOL", "name": "_matcher" } ] }, "test_args_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "args" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "string" } } } ] }, "test_exit_code_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "exitCode" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "integer" } } ] }, "test_timeout_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "timeout" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "duration" } } ] }, "test_memory_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "memory_limit" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "size" } } ] }, "test_wrapper_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "wrapper" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "file_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "file" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "key", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "out_file_decl": { "type": "SEQ", "members": [ { "type": "STRING", "value": "outFile" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "key", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "_matcher": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "exact_matcher" }, { "type": "SYMBOL", "name": "numeric_matcher" }, { "type": "SYMBOL", "name": "contains_matcher" }, { "type": "SYMBOL", "name": "regex_matcher" }, { "type": "SYMBOL", "name": "any_order_matcher" } ] }, "exact_matcher": { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "numeric_matcher": { "type": "SEQ", "members": [ { "type": "STRING", "value": "~" }, { "type": "FIELD", "name": "epsilon", "content": { "type": "SYMBOL", "name": "number" } }, { "type": "STRING", "value": "of" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "contains_matcher": { "type": "SEQ", "members": [ { "type": "STRING", "value": "contains" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "regex_matcher": { "type": "SEQ", "members": [ { "type": "STRING", "value": "matches" }, { "type": "FIELD", "name": "pattern", "content": { "type": "SYMBOL", "name": "regex_string" } } ] }, "any_order_matcher": { "type": "SEQ", "members": [ { "type": "STRING", "value": "anyOrder" }, { "type": "STRING", "value": "{" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": "}" } ] }, "pattern": { "type": "SEQ", "members": [ { "type": "STRING", "value": "pattern" }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_pattern_field" } }, { "type": "STRING", "value": "}" } ] }, "_pattern_field": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "pattern_input_field" }, { "type": "SYMBOL", "name": "pattern_output_field" }, { "type": "SYMBOL", "name": "pattern_dirs_field" }, { "type": "SYMBOL", "name": "pattern_args_field" } ] }, "pattern_input_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "input" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "pattern_output_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "output" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "pattern_dirs_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "dirs" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "string" } } ] }, "pattern_args_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "args" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "string" } } } ] }, "bool": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "true" }, { "type": "STRING", "value": "false" } ] }, "number": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "integer" }, { "type": "SYMBOL", "name": "float" } ] }, "string": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "heredoc_string" }, { "type": "SYMBOL", "name": "simple_string" } ] }, "simple_string": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[^\"\\\\\\n]" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "PATTERN", "value": "." } ] } ] } }, { "type": "STRING", "value": "\"" } ] } }, "heredoc_string": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"\"\"" }, { "type": "PATTERN", "value": "([^\"]|\"[^\"]|\"\"[^\"])*" }, { "type": "STRING", "value": "\"\"\"" } ] } }, "regex_string": { "type": "SYMBOL", "name": "simple_string" }, "identifier": { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z0-9_]*" }, "integer": { "type": "TOKEN", "content": { "type": "PATTERN", "value": "-?\\d+" } }, "float": { "type": "TOKEN", "content": { "type": "PATTERN", "value": "-?\\d+\\.\\d+" } }, "duration": { "type": "TOKEN", "content": { "type": "PATTERN", "value": "\\d+(ms|s|m)" } }, "size": { "type": "TOKEN", "content": { "type": "PATTERN", "value": "\\d+(KiB|MiB|GiB|KB|MB|GB|B|K|M|G)" } } }, "extras": [ { "type": "PATTERN", "value": "\\s+" }, { "type": "SYMBOL", "name": "comment" } ], "conflicts": [], "precedences": [], "externals": [], "inline": [], "supertypes": [] }