FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
pineapple-java/src/main/java/com/fun/Parser.java at main · LionCoder4ever/pineapple-java · GitHub
LionCoder4ever
/
pineapple-java
Public
Notifications
You must be signed in to change notification settings
Fork
2
Star
8
Code
Issues
0
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
pineapple-java
/
src
/
main
/
java
/
com
/
fun
/
Parser.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
116 lines (103 loc) · 3.87 KB
Breadcrumbs
pineapple-java
/
src
/
main
/
java
/
com
/
fun
/
Parser.java
Copy path
File metadata and controls
116 lines (103 loc) · 3.87 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package
com
.
fun
;
import
lombok
.
extern
.
slf4j
.
Slf4j
;
import
java
.
util
.
ArrayList
;
import
java
.
util
.
List
;
import
java
.
util
.
Objects
;
@
Slf4j
public
class
Parser
{
private
Print
parsePrint
(
Lexer
lexer
) {
Print
p
=
new
Print
();
p
.
setLineNum
(
lexer
.
getLineNum
());
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_PRINT
);
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_LEFT_PAREN
);
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
p
.
setVariable
(
this
.
parseVariable
(
lexer
));
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_RIGHT_PAREN
);
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
return
p
;
}
private
String
parseName
(
Lexer
lexer
) {
MatchedToken
m
=
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_NAME
);
return
m
.
getToken
();
}
private
Statement
parseAssignment
(
Lexer
lexer
) {
Assignment
assignment
=
new
Assignment
();
assignment
.
setLineNum
(
lexer
.
getLineNum
());
assignment
.
setVariable
(
parseVariable
(
lexer
));
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_EQUAL
);
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
assignment
.
setValue
(
parseString
(
lexer
));
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
return
assignment
;
}
private
String
parseString
(
Lexer
lexer
) {
String
str
=
""
;
switch
(
lexer
.
lookAhead
()) {
case
TOKEN_DUOQUOTE
:
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_DUOQUOTE
);
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
return
str
;
case
TOKEN_QUOTE
:
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_QUOTE
);
str
=
lexer
.
scanBeforeToken
(
lexer
.
getTokenNameMap
().
get
(
TokenEnum
.
TOKEN_QUOTE
));
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_QUOTE
);
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
return
str
;
default
:
log
.
error
(
"parse String error"
);
System
.
exit
(-
1
);
return
""
;
}
}
private
boolean
isSourceCodeEnd
(
TokenEnum
tokenEnum
) {
return
Objects
.
equals
(
tokenEnum
,
TokenEnum
.
TOKEN_EOF
);
}
private
Variable
parseVariable
(
Lexer
lexer
) {
Variable
variable
=
new
Variable
();
variable
.
setLineNum
(
lexer
.
getLineNum
());
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_VAR_PREFIX
);
String
name
=
parseName
(
lexer
);
variable
.
setName
(
name
);
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
return
variable
;
}
private
Statement
parseStatement
(
Lexer
lexer
) {
lexer
.
lookAheadAndSkip
(
TokenEnum
.
TOKEN_IGNORED
);
switch
(
lexer
.
lookAhead
()) {
case
TOKEN_PRINT
:
return
parsePrint
(
lexer
);
case
TOKEN_VAR_PREFIX
:
return
parseAssignment
(
lexer
);
default
:
log
.
error
(
"unknown statement"
);
System
.
exit
(-
1
);
return
null
;
}
}
public
SourceCode
parse
(
String
code
) {
Lexer
lexer
=
new
Lexer
(
code
);
SourceCode
sourceCode
=
parseSourceCode
(
lexer
);
lexer
.
nextTokenIs
(
TokenEnum
.
TOKEN_EOF
);
return
sourceCode
;
}
private
List
<
Statement
>
parseStatements
(
Lexer
lexer
) {
List
<
Statement
>
statements
=
new
ArrayList
<>();
while
(!
isSourceCodeEnd
(
lexer
.
lookAhead
())) {
Statement
statement
=
parseStatement
(
lexer
);
if
(
Objects
.
isNull
(
statement
)) {
log
.
error
(
"parse error"
);
System
.
exit
(-
1
);
}
statements
.
add
(
statement
);
}
return
statements
;
}
private
SourceCode
parseSourceCode
(
Lexer
lexer
) {
SourceCode
sourceCode
=
new
SourceCode
();
sourceCode
.
setLineNum
(
lexer
.
getLineNum
());
sourceCode
.
setStatements
(
parseStatements
(
lexer
));
return
sourceCode
;
}
}
Back
|
FazBrowse Home
|
New Git URL