Skip to content

Instantly share code, notes, and snippets.

@jbarguil
Created January 25, 2025 02:42
Show Gist options
  • Select an option

  • Save jbarguil/38fa7ff7593b6666d02545eafd8311b4 to your computer and use it in GitHub Desktop.

Select an option

Save jbarguil/38fa7ff7593b6666d02545eafd8311b4 to your computer and use it in GitHub Desktop.

PCS3616 - Sistemas de Programação

Syntax highlighting para arquivos do simulador MVN

Ao criar programas para o simulador MVN, podemos trabalhar com dois tipos de arquivos: arquivos assembly (.asm) e arquivos que representam valores nas posições de memória (.mvn).

Como a vida é curta demais para programar sem syntax highlighting (i.e., os códigos "coloridinhos" no editor), segue abaixo um exemplo de como configurar o VSCode para trabalhar com arquivos .mvn e .asm.

1. Instale a extensão

Siga as instruções de instalação da página da extensão Highlight, ou busque por ela na aba de Extensões do VSCode.

2. Abra as configurações do Highlight

  1. Acesse a aba de extensões do seu VSCode.
  2. Encontre o Highlight na lista de extensões instaladas.
  3. Clique em "Manage" no botão com o símbolo de engrenagem.
  4. Selecione "Settings".
  5. Clique em "Edit in settings.json

3. Adicione configurações personalizadas.

O arquivo settings.json da extensão deverá abrir no seu VSCode e poderá ser editado como qualquer outro arquivo.

O JSON abaixo contém os valores do campo "highlight.regexes" correspondentes às regras que precisamos para os arquivos .asm e .mvn. Adicione-as ao seu arquivo de configurações, dentro do campo "highlight.regexes".

Todas as regras são baseadas em expressões regulares, e as cores são definidas por códigos hexadecimais. Divirta-se explorando-as e modificando-as, se desejar.

{
    "highlight.regexes": {
        // Highlight MVN: ASM instructions
        "(?<!\\w)(JP|JZ|JN|LV|AD|SB|ML|DV|LD|MM|SC|RS|HM|GD|PD|SO)(?!\\w)": {
            "filterFileRegex": ".*\\.asm",
            "decorations": [
                {
                    "color": "#569CD6", // Blue for instructions
                    "fontWeight": "bold"
                }
            ]
        },
        // Highlight MVN: comments
        "(;.*)": {
            "filterFileRegex": ".*\\.[asm|mvn]",
            "decorations": [
                {
                    "color": "#6A9955", // Green for comments
                }
            ]
        },
        // Highlight MVN: numbers in hexadecimal format
        "(/[0-9A-F]+)": {
            "filterFileRegex": ".*\\.asm",
            "decorations": [
                {
                    "color": "#B5CEA8", // Light green for hex values
                    // "fontStyle": "italic"
                }
            ]
        },
        // Highlight MVN: constants in various formats
        "([/=@#][0-9A-F]+|'/[ -~]')": {
            "filterFileRegex": ".*\\.asm",
            "decorations": [
                {
                    "color": "#DCDCAA", // Yellow for constants
                    // "fontStyle": "italic"
                }
            ]
        },
        // Highlight MVN: export/import markers
        "([>|<]\\s+[A-Za-z_][A-Za-z0-9_]*)": {
            "filterFileRegex": ".*\\.asm",
            "decorations": [
                {
                    "color": "#9CDCFE", // Light blue for export/import markers
                }
            ]
        },
        // Highlight MVN: pseudo-instructions
        "(?<!\\w)(@|&|K|\\$|#)(?!\\w)": {
            "filterFileRegex": ".*\\.asm",
            "decorations": [
                {
                    "color": "#D19A66", // Orange for pseudo-instructions
                    "fontWeight": "bold"
                }
            ]
        },
        // Highlight MVN: labels
        "([A-Za-z_][A-Za-z0-9_]*)": {
            "filterFileRegex": ".*\\.asm",
            "decorations": [
                {
                    "color": "#C586C0", // Purple for labels
                    "fontWeight": "bold"
                }
            ]
        },
        // Highlight MVN: memory addresses, opcodes and operands in MVN binary format
        "([0-9A-FX]{4})( *)([0-9A-F]{1})([0-9A-F]{3})": {
            "filterFileRegex": ".*\\.mvn",
            "decorations": [
                {
                    "color": "#C586C0", // Purple for memory addresses
                },
                {}, // Ignore spaces
                {
                    "color": "#67b7f8", // Blue for opcodes
                    "fontWeight": "bold"
                },
                {
                    // Nothing for operand values - sticking to default color
                },
            ]
        },
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment