Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)
-
Upload
binary-studio -
Category
Software
-
view
198 -
download
0
Transcript of Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)
![Page 1: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/1.jpg)
ANTLR 4
Grammars
by Alexander Vasiltsov
![Page 2: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/2.jpg)
EBNF
● lexeme “::=” its description (or “=”)
● ‘...’ - text element - character or group of
characters
● А В - element А followed by element B
(concatenation)
● A | B - element А or В (choice)
● [A] - element А exists or not (optional
existence)
● {A} - zero or more А elements (repeat)
● (А В) - elements grouping
![Page 3: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/3.jpg)
ANTLR Notation
![Page 4: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/4.jpg)
Grammar patterns
Sequence of elements
Choice between multiple alternatives
Token dependence - precence of some token
requires presence of its counterpart
somewhere in a phrase
Nested phrase - a self-similar language
construct
![Page 5: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/5.jpg)
Sequence
This is a finite or arbitrarily long sequence of
tokens or subphrases
Sequence with terminator
Sequence with separator
![Page 6: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/6.jpg)
Choiсe (Alternatives)
This is a set of alternative phrases
![Page 7: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/7.jpg)
Token Dependency
The presence of one token requires the
presence of one or more subsequent tokens
![Page 8: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/8.jpg)
Nested Phrase
This is a self-similar language structure
![Page 9: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/9.jpg)
Common lexical structures
![Page 10: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/10.jpg)
Lexical Starter Kit (1)
![Page 11: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/11.jpg)
Lexical Starter Kit (2)
![Page 12: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/12.jpg)
Lexical Starter Kit (3)
![Page 13: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/13.jpg)
Line between lexer and parser
● Match and discard anything in the lexer that the parser
does not need to see at all
● Match common tokens such as identifiers, keywords,
strings, and numbers in the lexer
● Lump together into a single token type those lexical
structures that the parser does not need to distinguish
● Lump together anything that the parser can treat as a
single entity
● On the other hand, if the parser needs to pull apart a
lump of text to process it, the lexer should pass the
individual components as tokens to the parser
![Page 15: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/15.jpg)
JSON grammar (1)grammar JSON;
json: object
| array
;
object
: '{' pair (',' pair)* '}'
| '{' '}' // empty object
;
pair: STRING ':' value ;
array
: '[' value (',' value)* ']'
| '[' ']' // empty array
;
value
: STRING
| NUMBER
| object // recursion
| array // recursion
| 'true' // keywords
| 'false'
| 'null'
;
![Page 16: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/16.jpg)
JSON grammar (2)
STRING : '"' (ESC | ~["\\])* '"' ;
fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ;
fragment UNICODE : 'u' HEX HEX HEX HEX ;
fragment HEX : [0-9a-fA-F] ;
NUMBER
: '-'? INT '.' [0-9]+ EXP? // 1.35, 1.35E-9, 0.3, -4.5
| '-'? INT EXP // 1e10 -3e4
| '-'? INT // -3, 45
;
fragment INT : '0' | [1-9] [0-9]* ; // no leading zeros
fragment EXP : [Ee] [+\-]? INT ; // \- since - means "range" inside [...]
WS : [ \t\n\r]+ -> skip ;
![Page 17: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/17.jpg)
Typical JSON
![Page 18: Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 2)](https://reader034.fdocuments.in/reader034/viewer/2022042715/55a1b6bd1a28abec398b45fe/html5/thumbnails/18.jpg)
Parse tree