Skip to content

Instantly share code, notes, and snippets.

@junlarsen
Created December 6, 2020 23:39
Show Gist options
  • Save junlarsen/afe19c61ba4e83b58d2fe5c347bd4647 to your computer and use it in GitHub Desktop.
Save junlarsen/afe19c61ba4e83b58d2fe5c347bd4647 to your computer and use it in GitHub Desktop.
grammar Slede8;
program
: (programNode | NL)+
;
programNode
: (instruction NL)
| block
;
instruction
: KW_SETT REGISTER COMMA (REGISTER | INTEGER) #instructionSett
| KW_NOPE #instructionNope
| KW_STOPP #instructionStopp
| KW_OG REGISTER COMMA REGISTER #instructionOg
| KW_ELLER REGISTER COMMA REGISTER #instructionEller
| KW_XELLER REGISTER COMMA REGISTER #instructionXEller
| KW_VSKIFT REGISTER COMMA REGISTER #instructionVSkift
| KW_HSKIFT REGISTER COMMA REGISTER #instructionHSkift
| KW_PLUSS REGISTER COMMA REGISTER #instructionPluss
| KW_MINUS REGISTER COMMA REGISTER #instructionMinus
| KW_LIK REGISTER COMMA REGISTER #instructionLik
| KW_ULIK REGISTER COMMA REGISTER #instructionUlik
| KW_ME REGISTER COMMA REGISTER #instructionMe
| KW_MEL REGISTER COMMA REGISTER #instructionMel
| KW_SE REGISTER COMMA REGISTER #instructionSe
| KW_SEL REGISTER COMMA REGISTER #instructionSel
| KW_HOPP (LABEL | ADDRESS) #instructionHopp
| KW_BHOPP (LABEL | ADDRESS) #instructionBHopp
| KW_LES REGISTER #instructionLes
| KW_SKRIV (REGISTER | INTEGER) #instructionSkriv
| KW_TUR (LABEL | ADDRESS) #instructionTur
| KW_RETUR #instructionRetur
| KW_FINN (LABEL | ADDRESS) #instructionFinn
| KW_LAST REGISTER #instructionLast
| KW_LAGR REGISTER #instructionLagr
| KW_DATA INTEGER (COMMA INTEGER)* #instructionData
;
block
: LABEL COLON NL (instruction NL) (instruction NL)*
;
KW_SETT : 'SETT';
KW_NOPE : 'NOPE';
KW_STOPP : 'STOPP';
KW_OG : 'OG';
KW_ELLER : 'ELLER';
KW_XELLER : 'XELLER';
KW_VSKIFT : 'VSKIFT';
KW_HSKIFT : 'HSKIFT';
KW_PLUSS : 'PLUSS';
KW_MINUS : 'MINUS';
KW_LIK : 'LIK';
KW_ULIK : 'ULIK';
KW_ME : 'ME';
KW_MEL : 'MEL';
KW_SE : 'SE';
KW_SEL : 'SEL';
KW_HOPP : 'HOPP';
KW_BHOPP : 'BHOPP';
KW_LES : 'LES';
KW_SKRIV : 'SKRIV';
KW_FINN : 'FINN';
KW_LAST : 'LAST';
KW_LAGR : 'LAGR';
KW_TUR : 'TUR';
KW_RETUR : 'RETUR';
KW_DATA : '.DATA';
REGISTER : 'r' [0-9]+;
INTEGER : HEXADECIMAL_INTEGER | DECIMAL_INTEGER;
LABEL : [0-9a-zA-ZæøåÆØÅ\-_]+;
ADDRESS : HEXADECIMAL_INTEGER;
fragment DECIMAL_INTEGER : [0-9]+;
fragment HEXADECIMAL_INTEGER : '0x' [0-9a-fA-F]+;
COLON : ':';
COMMA : ',';
COMMENT : ';' ~[\r\n]* -> channel(HIDDEN);
WHITESPACE : [ \t\r] -> channel(HIDDEN);
NL : [\n];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment