mirror of
https://github.com/Ed94/LangStudies.git
synced 2024-11-13 21:54:52 -08:00
93 lines
1.1 KiB
Plaintext
93 lines
1.1 KiB
Plaintext
Following the first lecture of "Building a Parser from scratch"
|
|
By Dmitry Soshnikov.
|
|
|
|
|
|
Lecture 1:
|
|
|
|
|
|
Phases:
|
|
|
|
Data - Text Content
|
|
Processor - Tokenizer
|
|
Data - Tokens
|
|
Processor - Parser
|
|
Data - AST
|
|
|
|
|
|
Example of syntaxes :
|
|
|
|
S-Expression :
|
|
|
|
(class Point
|
|
(begin
|
|
|
|
(def constructor (self x y)
|
|
(begin
|
|
(set (prop self x) x)
|
|
(set (prop self y) y)
|
|
)
|
|
)
|
|
|
|
(def calc (self)
|
|
(+ (prop self x)
|
|
(prop self y)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(var p (new Point 10 20))
|
|
|
|
((prop p calc) p)
|
|
|
|
|
|
User Syntax :
|
|
|
|
class Point
|
|
{
|
|
def constructor( x, y )
|
|
{
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
|
|
def calc() {
|
|
return this.x + this.y;
|
|
}
|
|
}
|
|
|
|
let
|
|
p = new Point(10, 20);
|
|
p.calc();
|
|
|
|
|
|
Tokenizer - Lexial Analysis : Uses Regular Expressions (Optimal)
|
|
Parser - Syntactic Analysis : Uses Backus-Naur Form
|
|
|
|
|
|
Backus-Naur Example :
|
|
|
|
Program
|
|
: StatementList
|
|
;
|
|
|
|
StatementList
|
|
: BlockStatement
|
|
| IfStatement
|
|
| FunctionDeclaration
|
|
...
|
|
;
|
|
|
|
FunctionDeclaration
|
|
: def Identifier ( Arguments ) BlockStatement
|
|
;
|
|
|
|
|
|
Hand-written parsers :
|
|
Use recursive descent.
|
|
|
|
Automatically generated
|
|
All kinds of stuff...
|
|
|
|
|