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

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

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 SbLanguage: IMonarchLanguage by lazy {
  buildMonarchLanguage {
    tokenPostfix = ".sb"
    ignoreCase = true
    defaultToken = ""
    brackets {
      bracket("[","]","delimiter.array")
      bracket("(",")","delimiter.parenthesis")
      bracket("If","EndIf","keyword.tag-if")
      bracket("While","EndWhile","keyword.tag-while")
      bracket("For","EndFor","keyword.tag-for")
      bracket("Sub","EndSub","keyword.tag-sub")
    }
    keywords("Else", "ElseIf", "EndFor", "EndIf", "EndSub", "EndWhile", "For", "Goto", "If", "Step",
        "Sub", "Then", "To", "While")
    "tagwords" and listOf("If", "Sub", "While", "For")
    operators(">", "<", "<>", "<=", ">=", "And", "Or", "+", "-", "*", "/", "=")
    "identifier" and "[a-zA-Z_][\\w]*"
    symbols("[=><:+\\-*\\/%\\.,]+")
    escapes("\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})")
    tokenizer {
      root {
        include("@whitespace")
        "(@identifier)(?=[.])".token("type")
        "@identifier".action {
          cases {
            "@keywords" and {
              token = "keyword.${'$'}0"
            }
            "@operators" and "operator"
            "@default" and "variable.name"
          }
        }
        "([.])(@identifier)".action {
          cases {
            "${'$'}2" actionArray {
              token("delimiter")
              token("type.member")
            }
            "@default" and ""
          }
        }
        "\\d*\\.\\d+".token("number.float")
        "\\d+".token("number")
        "[()\\[\\]]".token("@brackets")
        "@symbols".action {
          cases {
            "@operators" and "operator"
            "@default" and "delimiter"
          }
        }
        "\"([^\"\\\\]|\\\\.)*${'$'}".token("string.invalid")
        "\"".action("string").state("@string")
      }
      whitespace {
        "[ \\t\\r\\n]+".token("")
        "(\\').*${'$'}".token("comment")
      }
      string {
        "[^\\\\\"]+".token("string")
        "@escapes".token("string.escape")
        "\\\\.".token("string.escape.invalid")
        "\"C?".action("string").state("@pop")
      }
    }
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy