|
- package a
-
- import (
- . "github.com/alecthomas/chroma" // nolint
- "github.com/alecthomas/chroma/lexers/internal"
- )
-
- var ArmAsm = internal.Register(MustNewLazyLexer(
- &Config{
- Name: "ArmAsm",
- Aliases: []string{"armasm"},
- EnsureNL: true,
- Filenames: []string{"*.s", "*.S"},
- MimeTypes: []string{"text/x-armasm", "text/x-asm"},
- },
- armasmRules,
- ))
-
- func armasmRules() Rules {
- return Rules{
- "commentsandwhitespace": {
- {`\s+`, Text, nil},
- {`[@;].*?\n`, CommentSingle, nil},
- {`/\*.*?\*/`, CommentMultiline, nil},
- },
- "literal": {
- // Binary
- {`0b[01]+`, NumberBin, Pop(1)},
- // Hex
- {`0x\w{1,8}`, NumberHex, Pop(1)},
- // Octal
- {`0\d+`, NumberOct, Pop(1)},
- // Float
- {`\d+?\.\d+?`, NumberFloat, Pop(1)},
- // Integer
- {`\d+`, NumberInteger, Pop(1)},
- // String
- {`(")(.+)(")`, ByGroups(Punctuation, StringDouble, Punctuation), Pop(1)},
- // Char
- {`(')(.{1}|\\.{1})(')`, ByGroups(Punctuation, StringChar, Punctuation), Pop(1)},
- },
- "opcode": {
- // Escape at line end
- {`\n`, Text, Pop(1)},
- // Comment
- {`(@|;).*\n`, CommentSingle, Pop(1)},
- // Whitespace
- {`(\s+|,)`, Text, nil},
- // Register by number
- {`[rapcfxwbhsdqv]\d{1,2}`, NameClass, nil},
- // Address by hex
- {`=0x\w+`, ByGroups(Text, NameLabel), nil},
- // Pseudo address by label
- {`(=)(\w+)`, ByGroups(Text, NameLabel), nil},
- // Immediate
- {`#`, Text, Push("literal")},
- },
- "root": {
- Include("commentsandwhitespace"),
- // Directive with optional param
- {`(\.\w+)([ \t]+\w+\s+?)?`, ByGroups(KeywordNamespace, NameLabel), nil},
- // Label with data
- {`(\w+)(:)(\s+\.\w+\s+)`, ByGroups(NameLabel, Punctuation, KeywordNamespace), Push("literal")},
- // Label
- {`(\w+)(:)`, ByGroups(NameLabel, Punctuation), nil},
- // Syscall Op
- {`svc\s+\w+`, NameNamespace, nil},
- // Opcode
- {`[a-zA-Z]+`, Text, Push("opcode")},
- },
- }
- }
|