All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.dingyi222666.monarch.languages.LanguageWgsl.kt Maven / Gradle / Ivy

The newest version!
package io.github.dingyi222666.monarch.languages

import io.github.dingyi222666.monarch.common.*
 import io.github.dingyi222666.monarch.loader.dsl.*
import io.github.dingyi222666.monarch.types.IMonarchLanguage

public val WgslLanguage: IMonarchLanguage by lazy {
  buildMonarchLanguage {
    tokenPostfix = ".wgsl"
    unicode = true
    defaultToken = "invalid"
    "atoms" and listOf("true", "false")
    keywords("alias", "break", "case", "const", "const_assert", "continue", "continuing", "default",
        "diagnostic", "discard", "else", "enable", "fn", "for", "if", "let", "loop", "override",
        "requires", "return", "struct", "switch", "var", "while")
    "reserved" and listOf("NULL", "Self", "abstract", "active", "alignas", "alignof", "as", "asm",
        "asm_fragment", "async", "attribute", "auto", "await", "become", "binding_array", "cast",
        "catch", "class", "co_await", "co_return", "co_yield", "coherent", "column_major", "common",
        "compile", "compile_fragment", "concept", "const_cast", "consteval", "constexpr",
        "constinit", "crate", "debugger", "decltype", "delete", "demote", "demote_to_helper", "do",
        "dynamic_cast", "enum", "explicit", "export", "extends", "extern", "external",
        "fallthrough", "filter", "final", "finally", "friend", "from", "fxgroup", "get", "goto",
        "groupshared", "highp", "impl", "implements", "import", "inline", "instanceof", "interface",
        "layout", "lowp", "macro", "macro_rules", "match", "mediump", "meta", "mod", "module",
        "move", "mut", "mutable", "namespace", "new", "nil", "noexcept", "noinline",
        "nointerpolation", "noperspective", "null", "nullptr", "of", "operator", "package",
        "packoffset", "partition", "pass", "patch", "pixelfragment", "precise", "precision",
        "premerge", "priv", "protected", "pub", "public", "readonly", "ref", "regardless",
        "register", "reinterpret_cast", "require", "resource", "restrict", "self", "set", "shared",
        "sizeof", "smooth", "snorm", "static", "static_assert", "static_cast", "std", "subroutine",
        "super", "target", "template", "this", "thread_local", "throw", "trait", "try", "type",
        "typedef", "typeid", "typename", "typeof", "union", "unless", "unorm", "unsafe", "unsized",
        "use", "using", "varying", "virtual", "volatile", "wgsl", "where", "with", "writeonly",
        "yield")
    "predeclared_enums" and listOf("read", "write", "read_write", "function", "private",
        "workgroup", "uniform", "storage", "perspective", "linear", "flat", "center", "centroid",
        "sample", "vertex_index", "instance_index", "position", "front_facing", "frag_depth",
        "local_invocation_id", "local_invocation_index", "global_invocation_id", "workgroup_id",
        "num_workgroups", "sample_index", "sample_mask", "rgba8unorm", "rgba8snorm", "rgba8uint",
        "rgba8sint", "rgba16uint", "rgba16sint", "rgba16float", "r32uint", "r32sint", "r32float",
        "rg32uint", "rg32sint", "rg32float", "rgba32uint", "rgba32sint", "rgba32float",
        "bgra8unorm")
    "predeclared_types" and listOf("bool", "f16", "f32", "i32", "sampler", "sampler_comparison",
        "texture_depth_2d", "texture_depth_2d_array", "texture_depth_cube",
        "texture_depth_cube_array", "texture_depth_multisampled_2d", "texture_external",
        "texture_external", "u32")
    "predeclared_type_generators" and listOf("array", "atomic", "mat2x2", "mat2x3", "mat2x4",
        "mat3x2", "mat3x3", "mat3x4", "mat4x2", "mat4x3", "mat4x4", "ptr", "texture_1d",
        "texture_2d", "texture_2d_array", "texture_3d", "texture_cube", "texture_cube_array",
        "texture_multisampled_2d", "texture_storage_1d", "texture_storage_2d",
        "texture_storage_2d_array", "texture_storage_3d", "vec2", "vec3", "vec4")
    "predeclared_type_aliases" and listOf("vec2i", "vec3i", "vec4i", "vec2u", "vec3u", "vec4u",
        "vec2f", "vec3f", "vec4f", "vec2h", "vec3h", "vec4h", "mat2x2f", "mat2x3f", "mat2x4f",
        "mat3x2f", "mat3x3f", "mat3x4f", "mat4x2f", "mat4x3f", "mat4x4f", "mat2x2h", "mat2x3h",
        "mat2x4h", "mat3x2h", "mat3x3h", "mat3x4h", "mat4x2h", "mat4x3h", "mat4x4h")
    "predeclared_intrinsics" and listOf("bitcast", "all", "any", "select", "arrayLength", "abs",
        "acos", "acosh", "asin", "asinh", "atan", "atanh", "atan2", "ceil", "clamp", "cos", "cosh",
        "countLeadingZeros", "countOneBits", "countTrailingZeros", "cross", "degrees",
        "determinant", "distance", "dot", "exp", "exp2", "extractBits", "faceForward",
        "firstLeadingBit", "firstTrailingBit", "floor", "fma", "fract", "frexp", "inverseBits",
        "inverseSqrt", "ldexp", "length", "log", "log2", "max", "min", "mix", "modf", "normalize",
        "pow", "quantizeToF16", "radians", "reflect", "refract", "reverseBits", "round", "saturate",
        "sign", "sin", "sinh", "smoothstep", "sqrt", "step", "tan", "tanh", "transpose", "trunc",
        "dpdx", "dpdxCoarse", "dpdxFine", "dpdy", "dpdyCoarse", "dpdyFine", "fwidth",
        "fwidthCoarse", "fwidthFine", "textureDimensions", "textureGather", "textureGatherCompare",
        "textureLoad", "textureNumLayers", "textureNumLevels", "textureNumSamples", "textureSample",
        "textureSampleBias", "textureSampleCompare", "textureSampleCompareLevel",
        "textureSampleGrad", "textureSampleLevel", "textureSampleBaseClampToEdge", "textureStore",
        "atomicLoad", "atomicStore", "atomicAdd", "atomicSub", "atomicMax", "atomicMin",
        "atomicAnd", "atomicOr", "atomicXor", "atomicExchange", "atomicCompareExchangeWeak",
        "pack4x8snorm", "pack4x8unorm", "pack2x16snorm", "pack2x16unorm", "pack2x16float",
        "unpack4x8snorm", "unpack4x8unorm", "unpack2x16snorm", "unpack2x16unorm", "unpack2x16float",
        "storageBarrier", "workgroupBarrier", "workgroupUniformLoad")
    operators("&", "&&", "->", "/", "=", "==", "!=", ">", ">=", "<", "<=", "%", "-", "--", "+",
        "++", "|", "||", "*", "<<", ">>", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", ">>=",
        "<<=")
    symbols("[!%&*+\\-\\.\\/:;<=>^|_~,]+")
    tokenizer {
      root {
        "enable|requires|diagnostic".action("keyword").state("@directive")
        "[_\\p{XID_Start}]\\p{XID_Continue}*".action {
          cases {
            "@atoms" and "variable.predefined"
            "@keywords" and "keyword"
            "@reserved" and "invalid"
            "@predeclared_enums" and "variable.predefined"
            "@predeclared_types" and "variable.predefined"
            "@predeclared_type_generators" and "variable.predefined"
            "@predeclared_type_aliases" and "variable.predefined"
            "@predeclared_intrinsics" and "variable.predefined"
            "@default" and "identifier"
          }
        }
        include("@commentOrSpace")
        include("@numbers")
        "[{}()\\[\\]]".token("@brackets")
        "@".action("annotation").state("@attribute")
        "@symbols".action {
          cases {
            "@operators" and "operator"
            "@default" and "delimiter"
          }
        }
        ".".token("invalid")
      }
      "commentOrSpace" rules {
        "\\s+".token("white")
        "\\/\\*".action("comment").state("@blockComment")
        "\\/\\/.*${'$'}".token("comment")
      }
      "blockComment" rules {
        "[^\\/*]+".token("comment")
        "\\/\\*".action("comment").state("@push")
        "\\*\\/".action("comment").state("@pop")
        "[\\/*]".token("comment")
      }
      "attribute" rules {
        include("@commentOrSpace")
        "\\w+".action("annotation").state("@pop")
      }
      "directive" rules {
        include("@commentOrSpace")
        "[()]".token("@brackets")
        ",".token("delimiter")
        "[_\\p{XID_Start}]\\p{XID_Continue}*".token("meta.content")
        ";".action("delimiter").state("@pop")
      }
      "numbers" rules {
        "0[fh]".token("number.float")
        "[1-9][0-9]*[fh]".token("number.float")
        "[0-9]*\\.[0-9]+([eE][+-]?[0-9]+)?[fh]?".token("number.float")
        "[0-9]+\\.[0-9]*([eE][+-]?[0-9]+)?[fh]?".token("number.float")
        "[0-9]+[eE][+-]?[0-9]+[fh]?".token("number.float")
        "0[xX][0-9a-fA-F]*\\.[0-9a-fA-F]+(?:[pP][+-]?[0-9]+[fh]?)?".token("number.hex")
        "0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*(?:[pP][+-]?[0-9]+[fh]?)?".token("number.hex")
        "0[xX][0-9a-fA-F]+[pP][+-]?[0-9]+[fh]?".token("number.hex")
        "0[xX][0-9a-fA-F]+[iu]?".token("number.hex")
        "[1-9][0-9]*[iu]?".token("number")
        "0[iu]?".token("number")
      }
    }
  }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy