Skip to content

Instantly share code, notes, and snippets.

@kaby76
Created June 29, 2021 13:13
Show Gist options
  • Save kaby76/f50080dd5fdcb5ffdabbe70b44e4debe to your computer and use it in GitHub Desktop.
Save kaby76/f50080dd5fdcb5ffdabbe70b44e4debe to your computer and use it in GitHub Desktop.
Translation of github.com/antlr/grammars-v4/abb/*.g4 to Lark
start : module
module : moduledata
moduledata : MODULE modulename NEWLINE datalist NEWLINE* ENDMODULE
modulename : IDENTIFIER
| proccall
datalist : (NEWLINE
| declaration NEWLINE
| procedure NEWLINE)*
procedure : PROC proccall NEWLINE (functioncall NEWLINE)* ENDPROC
proccall : procname procparameter?
procname : IDENTIFIER
procparameter : BRACKET_OPEN IDENTIFIER? BRACKET_CLOSE
functioncall : IDENTIFIER (functionparameter COMMA)* functionparameter SEMICOLON
functionparameter : ON_CALL
| OFF_CALL
| primitive
| IDENTIFIER
declaration : init_ type_ IDENTIFIER (EQUALS expression)? SEMICOLON
type_ : ( TOOLDATA | WOBJDATA | SPEEDDATA | ZONEDATA | CLOCK | BOOL )
init_ : LOCAL? ( CONST | PERS | VAR )
expression : array_ | primitive
array_ : SQUARE_OPEN (expression COMMA)* expression SQUARE_CLOSE
primitive : BOOLLITERAL
| CHARLITERAL
| STRINGLITERAL
| (PLUS | MINUS)? FLOATLITERAL
| (PLUS | MINUS)? INTLITERAL
MODULE : "module"
ENDMODULE : "endmodule"
PROC : P R O C
ENDPROC : E N D P R O C
LOCAL : L O C A L
CONST : C O N S T
PERS : P E R S
VAR : V A R
TOOLDATA : T O O L D A T A
WOBJDATA : W O B J D A T A
SPEEDDATA : S P E E D D A T A
ZONEDATA : Z O N E D A T A
CLOCK : C L O C K
BOOL : B O O L
ON_CALL : "\\" O N
OFF_CALL : "\\" O F F
SLASH : "/"
EQUALS : ":="
COMMA : ","
CURLY_OPEN : "{"
CURLY_CLOSE : "}"
COLON : ":"
SEMICOLON : ";"
BRACKET_OPEN : "("
BRACKET_CLOSE : ")"
SQUARE_OPEN : "["
SQUARE_CLOSE : "]"
DOT : "."
DOUBLEDOT : ".."
REL_BIGGER : ">"
REL_BIGGER_OR_EQUAL : ">="
REL_SMALLER : "<"
REL_SMALLER_OR_EQUAL: "<="
REL_EQUAL : "=="
REL_NOTEQUAL : "<>"
PLUS : "+"
MINUS : "-"
MULTIPLY : "*"
PERCENT : "%"
HASH : "#"
A : ("a" | "A")
B : ("b" | "B")
C : ("c" | "C")
D : ("d" | "D")
E : ("e" | "E")
F : ("f" | "F")
G : ("g" | "G")
H : ("h" | "H")
I : ("i" | "I")
J : ("j" | "J")
K : ("k" | "K")
L : ("l" | "L")
M : ("m" | "M")
N : ("n" | "N")
O : ("o" | "O")
P : ("p" | "P")
Q : ("q" | "Q")
R : ("r" | "R")
S : ("s" | "S")
T : ("t" | "T")
U : ("u" | "U")
V : ("v" | "V")
W : ("w" | "W")
X : ("x" | "X")
Y : ("y" | "Y")
Z : ("z" | "Z")
WS : (" " | "\t" | "\u000C")
NEWLINE : "\r"? "\n"
LINE_COMMENT : "!" /(!?\n|\r)*/
BOOLLITERAL : (F A L S E | T R U E)
CHARLITERAL : "'" (ESCAPESEQUENCE | /(!?'|\\|\r|\n)/ ) "'"
STRINGLITERAL : "\"" (ESCAPESEQUENCE | /(!?\\|"|\r|\n)/ )* "\""
ESCAPESEQUENCE : "\\" ("b" | "t" | "n" | "f" | "r" | "\"" | "'" | "\\" | ("0" .. "3") ("0" .. "7") ("0" .. "7") | ("0" .. "7") ("0" .. "7") | ("0" .. "7"))
FLOATLITERAL : ("0" .. "9") + "." ("0" .. "9")* EXPONENT? | "." ("0" .. "9") + EXPONENT? | ("0" .. "9") + EXPONENT
EXPONENT : E ("+" | "-")? ("0" .. "9") +
INTLITERAL : ("0" .. "9") + | HEXPREFIX HEXDIGIT + HEXSUFFIX | BINPREFIX BINDIGIT + BINSUFFIX
HEXPREFIX : "'" H
HEXDIGIT : ("0" .. "9" | "a" .. "f" | "A" .. "F")
HEXSUFFIX : "'"
BINPREFIX : "'" B
BINDIGIT : ("0" | "1")
BINSUFFIX : "'"
IDENTIFIER : IDENTIFIERSTART IDENTIFIERPART*
IDENTIFIERSTART : "a" .. "z" | "A" .. "Z" | "_"
IDENTIFIERPART : (IDENTIFIERSTART | "0" .. "9")
%ignore WS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment