Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Milhomme Allan
JavaMetaParser
Commits
07b00196
Commit
07b00196
authored
Oct 17, 2018
by
Custom2043
Browse files
Fix and better tokens data handling
parent
6759db84
Changes
11
Hide whitespace changes
Inline
Side-by-side
JMP.jar
View file @
07b00196
No preview for this file type
src/compiler/Compiler.java
View file @
07b00196
...
...
@@ -29,10 +29,6 @@ public class Compiler
"try"
,
"void"
,
"volatile"
,
"while"
};
public
static
final
String
variableNames
[]
=
{
"column"
,
"length"
,
"line"
,
"start"
,
"total"
,
"totalTokens"
,
"builderSearches"
};
public
static
final
String
forbiddenTokenNames
[]
=
{
"ArraySearch"
,
"BracketSearch"
,
"Builder"
,
"OptionalSearch"
,
"OrSearch"
,
"ParserString"
,
"Result"
,
"Search"
};
...
...
@@ -82,10 +78,6 @@ public class Compiler
if
(
s
.
equals
(((
Line
)
t
).
header
.
id
.
getName
()))
report
(
new
Info
(
InfoModel
.
illegalIdentifier
,
((
Line
)
t
).
header
.
id
));
for
(
String
s
:
variableNames
)
if
(
s
.
equals
(((
Line
)
t
).
header
.
id
.
getName
()))
report
(
new
Info
(
InfoModel
.
illegalIdentifier
,
((
Line
)
t
).
header
.
id
));
for
(
String
s
:
forbiddenTokenNames
)
if
(
s
.
equals
(((
Line
)
t
).
header
.
id
.
getName
()))
report
(
new
Info
(
InfoModel
.
illegalIdentifier
,
((
Line
)
t
).
header
.
id
));
...
...
src/compiler/Info.java
View file @
07b00196
...
...
@@ -17,7 +17,7 @@ public class Info
@Override
public
String
toString
()
{
return
String
.
format
(
"%s : %s at line %d, column %d, char %d : %s"
,
this
.
model
.
etat
.
name
(),
this
.
model
.
message
,
this
.
token
.
l
ine
,
this
.
token
.
c
olumn
,
this
.
token
.
s
tart
,
this
.
token
.
total
.
replace
(
"\n"
,
""
).
replace
(
"\r"
,
""
));
return
String
.
format
(
"%s : %s at line %d, column %d, char %d : %s"
,
this
.
model
.
etat
.
name
(),
this
.
model
.
message
,
this
.
token
.
getL
ine
()
,
this
.
token
.
getC
olumn
()
,
this
.
token
.
getS
tart
()
,
this
.
token
.
getPrinteableTotal
(
));
}
}
enum
InfoModel
...
...
src/compiler/ParserStringGenerator.java
View file @
07b00196
...
...
@@ -131,9 +131,9 @@ public class ParserStringGenerator
else
{
parserCharacterBuilder
.
append
(
"0"
);
parserCharacterBuilder
.
append
(((
NumberChar
)
character
).
base
.
t
otal
);
parserCharacterBuilder
.
append
(((
NumberChar
)
character
).
base
.
getT
otal
()
);
for
(
ParserString
p
:
((
NumberChar
)
character
).
value
)
parserCharacterBuilder
.
append
(
p
.
t
otal
);
parserCharacterBuilder
.
append
(
p
.
getT
otal
()
);
}
}
else
...
...
src/parser/Parser.java
View file @
07b00196
...
...
@@ -55,17 +55,6 @@ public class Parser
}
}
}
/**
* @return the line of the character (used to report errors)
*/
private
static
int
getLine
(
int
atChar
)
{
int
currentLine
=
1
;
for
(
Integer
i
:
lineJumps
)
if
(
i
<
atChar
)
currentLine
++;
return
currentLine
;
}
/**
* Reads until the line defining the given token (inclusive) or until the end if the builder is null</br>
...
...
@@ -86,12 +75,12 @@ public class Parser
int
oldIndex
=
index
;
Token
t
;
ParserMemory
memory
=
ParserMemory
.
setLastResult
(
getTokenStart
()
,
line
);
ParserMemory
memory
=
ParserMemory
.
setLastResult
(
index
,
line
);
mark
.
currentToken
=
memory
.
getToken
();
if
(
memory
.
getToken
()
!=
null
)
{
//System.out.println("Found : "+mark.token+" at : "+index+" while building "+builder);
index
=
mark
.
currentToken
.
s
tart
+
mark
.
currentToken
.
l
ength
;
index
=
mark
.
currentToken
.
getS
tart
()
+
mark
.
currentToken
.
getL
ength
()
;
mark
();
}
...
...
@@ -102,7 +91,7 @@ public class Parser
if
((
t
=
buildToken
(
lineBuilder
,
mark
.
currentToken
))
!=
null
)
{
mark
.
currentToken
=
t
;
ParserMemory
.
addResult
(
ge
tTokenStart
(),
new
ParserMemory
(
mark
.
currentToken
,
lineBuilder
.
getLine
()));
ParserMemory
.
addResult
(
mark
.
curren
tToken
.
get
Start
(),
new
ParserMemory
(
mark
.
currentToken
,
lineBuilder
.
getLine
()));
}
else
if
(
lineBuilder
.
getLine
()
==
line
&&
!
excluded
)
{
...
...
@@ -126,6 +115,8 @@ public class Parser
//System.out.println("Try to build : "+tokenBuilder+" with "+current+" at index : "+index);
mark
();
int
start
=
current
==
null
?
index
:
current
.
getStart
();
Result
[]
results
=
new
Result
[
tokenBuilder
.
getSearches
().
length
];
...
...
@@ -144,7 +135,7 @@ public class Parser
for
(
int
i
=
0
;
i
<
results
.
length
;
i
++)
TokenCreator
.
fill
(
total
,
results
[
i
],
build
,
new
LinkedList
<
Integer
>(),
new
LinkedList
<
Integer
>());
build
.
totalTokens
=
total
.
toArray
(
new
Token
[
total
.
size
()]);
build
.
setDatas
(
start
,
index
-
start
,
getLine
(
start
),
Parser
.
getTokenStartColumn
(
start
),
Parser
.
readFrom
(
start
,
index
-
start
),
total
.
toArray
(
new
Token
[
total
.
size
()])
)
;
build
.
getClass
().
getDeclaredField
(
"searchResults"
).
set
(
build
,
results
);
...
...
@@ -167,6 +158,8 @@ public class Parser
*/
static
ParserString
readParserString
(
int
stringIndex
)
{
int
start
=
index
;
Parser
.
submark
();
int
indexCheck
=
-
1
;
...
...
@@ -186,14 +179,14 @@ public class Parser
if
(
correct
)
{
ParserString
string
=
new
ParserString
(
stringIndex
);
string
.
totalTokens
=
new
Token
[
0
];
string
.
setDatas
(
start
,
index
-
start
,
getLine
(
start
),
Parser
.
getTokenStartColumn
(
start
),
Parser
.
readFrom
(
start
,
index
-
start
),
new
Token
[
0
]
)
;
return
string
;
}
Parser
.
subreset
();
return
null
;
}
p
ublic
static
char
read
()
throws
ArrayIndexOutOfBoundsException
p
rivate
static
char
read
()
throws
ArrayIndexOutOfBoundsException
{
return
content
[
index
++];
}
...
...
@@ -207,50 +200,53 @@ public class Parser
index
=
mark
.
markIndex
;
mark
.
submarks
=
new
LinkedList
<>();
}
public
static
boolean
isSubmarked
()
static
boolean
isSubmarked
()
{
return
!
mark
.
submarks
.
isEmpty
();
}
public
static
void
submark
()
static
void
submark
()
{
mark
.
submarks
.
addLast
(
index
);
}
public
static
void
subreset
()
static
void
subreset
()
{
index
=
mark
.
submarks
.
removeLast
();
}
public
static
int
getTokenStart
()
{
return
mark
.
currentToken
==
null
?
mark
.
markIndex
:
mark
.
currentToken
.
start
;
}
public
static
int
get
TokenStartLine
(
)
/**
* @
return
the line of the character (used to report errors)
*/
public
static
int
get
Line
(
int
atChar
)
{
return
getLine
(
getTokenStart
());
int
currentLine
=
1
;
for
(
Integer
i
:
lineJumps
)
if
(
i
<
atChar
)
currentLine
++;
return
currentLine
;
}
public
static
int
getTokenStartColumn
()
public
static
int
getTokenStartColumn
(
int
tokenStart
)
{
int
currentIndex
=
-
1
;
for
(
Integer
i
:
lineJumps
)
if
(
i
<=
getT
okenStart
()
)
if
(
i
<=
t
okenStart
)
currentIndex
=
i
;
return
getT
okenStart
()
-
currentIndex
;
return
t
okenStart
-
currentIndex
;
}
public
static
boolean
moreToRead
()
private
static
boolean
moreToRead
()
{
return
index
<
content
.
length
;
}
public
static
int
getTokenLength
()
{
return
index
-
getTokenStart
();
}
public
static
String
readFrom
(
int
start
,
int
length
)
private
static
String
readFrom
(
int
start
,
int
length
)
{
char
[]
c
=
new
char
[
length
];
for
(
int
i
=
start
;
i
<
start
+
length
;
i
++)
c
[
i
-
start
]
=
content
[
i
];
return
new
String
(
c
);
}
private
static
class
Mark
{
private
int
markIndex
=
index
;
...
...
src/parser/ParserString.java
View file @
07b00196
...
...
@@ -88,6 +88,6 @@ public class ParserString extends Token
@Override
public
String
toString
()
{
return
"ParserString "
+
this
.
index
+
", start "
+
this
.
s
tart
+
" ; length : "
+
this
.
l
ength
+
" : "
+
this
.
getPrinteableTotal
();
return
"ParserString "
+
this
.
index
+
", start "
+
this
.
getS
tart
()
+
" ; length : "
+
this
.
getL
ength
()
+
" : "
+
this
.
getPrinteableTotal
();
}
}
src/parser/Token.java
View file @
07b00196
...
...
@@ -46,26 +46,52 @@ public abstract class Token
/********** Do not modify or remove **********/
public
final
int
start
,
length
,
line
,
column
;
public
final
String
total
;
Token
[]
totalTokens
;
public
Token
()
private
int
start
,
length
,
line
,
column
;
private
String
total
;
private
Token
[]
totalTokens
;
void
setDatas
(
int
s
,
int
l
,
int
li
,
int
c
,
String
t
,
Token
[]
tokens
)
{
this
.
start
=
Parser
.
getTokenStart
();
this
.
length
=
Parser
.
getTokenLength
();
this
.
line
=
Parser
.
getTokenStartLine
();
this
.
column
=
Parser
.
getTokenStartColumn
();
this
.
total
=
Parser
.
readFrom
(
this
.
start
,
this
.
length
);
this
.
start
=
s
;
this
.
length
=
l
;
this
.
line
=
li
;
this
.
column
=
c
;
this
.
total
=
t
;
this
.
totalTokens
=
tokens
;
}
@Override
public
String
toString
()
public
int
getStart
()
{
return
this
.
toString
(
0
);
return
this
.
start
;
}
public
int
getLength
()
{
return
this
.
length
;
}
public
int
getLine
()
{
return
this
.
line
;
}
public
int
getColumn
()
{
return
this
.
column
;
}
public
String
getTotal
()
{
return
this
.
total
;
}
public
Token
[]
getTotalTokens
()
{
return
this
.
totalTokens
;
}
@Override
public
String
toString
()
{
return
this
.
toString
(
0
);
}
public
String
toString
(
int
i
)
{
String
s
=
""
;
...
...
@@ -80,6 +106,10 @@ public abstract class Token
s
+=
"\n"
+
t
.
toString
(
i
+
1
);
return
s
;
}
public
String
getPrinteableTotal
()
{
return
this
.
total
.
replace
(
"\n"
,
"\\n"
).
replace
(
"\t"
,
"\\t"
).
replace
(
"\r"
,
"\\r"
);
}
public
static
String
getStringFromTokens
(
Token
...
tokens
)
{
...
...
@@ -88,12 +118,7 @@ public abstract class Token
builder
.
append
(
t
.
total
);
return
builder
.
toString
();
}
public
String
getPrinteableTotal
()
{
return
this
.
total
.
replace
(
"\n"
,
"\\n"
).
replace
(
"\t"
,
"\\t"
).
replace
(
"\r"
,
"\\r"
);
}
public
List
<
Token
>
getTokensIn
(
Class
<?
extends
Token
>
c
)
{
List
<
Token
>
tokens
=
new
LinkedList
<>();
...
...
src/tokens/CharacterToken.java
View file @
07b00196
...
...
@@ -52,7 +52,7 @@ public class CharacterToken extends Token
public
ParserCharacter
toParserCharacter
()
{
if
(
this
.
character1
.
length
==
1
&&
this
.
character1
[
0
].
t
otal
.
equals
(
"*"
)
&&
this
.
character2
[
0
]
==
null
)
if
(
this
.
character1
.
length
==
1
&&
this
.
character1
[
0
].
getT
otal
()
.
equals
(
"*"
)
&&
this
.
character2
[
0
]
==
null
)
return
this
.
notToken
==
null
?
ParserCharacter
.
any
:
ParserCharacter
.
none
;
char
[]
start
=
new
char
[
this
.
character1
.
length
],
end
=
new
char
[
this
.
character1
.
length
];
...
...
src/tokens/Identifier.java
View file @
07b00196
...
...
@@ -39,10 +39,10 @@ public class Identifier extends Token
public
String
getName
()
{
StringBuilder
builder
=
new
StringBuilder
();
builder
.
append
(
this
.
firstLetter
.
t
otal
);
builder
.
append
(
this
.
firstLetter
.
getT
otal
()
);
if
(
this
.
idName
!=
null
)
for
(
Token
t
:
this
.
idName
)
builder
.
append
(
t
.
t
otal
);
builder
.
append
(
t
.
getT
otal
()
);
return
builder
.
toString
();
}
}
src/tokens/NumberChar.java
View file @
07b00196
...
...
@@ -40,11 +40,11 @@ public class NumberChar extends Token
public
char
toChar
()
{
if
(
this
.
base
.
index
==
4
)
return
(
char
)
Integer
.
parseInt
(
this
.
t
otal
.
substring
(
2
),
2
);
return
(
char
)
Integer
.
parseInt
(
this
.
getT
otal
()
.
substring
(
2
),
2
);
else
if
(
this
.
base
.
index
==
6
)
return
(
char
)
Integer
.
parseInt
(
this
.
t
otal
.
substring
(
2
),
16
);
return
(
char
)
Integer
.
parseInt
(
this
.
getT
otal
()
.
substring
(
2
),
16
);
else
if
(
this
.
base
.
index
==
8
)
return
(
char
)
Integer
.
parseInt
(
this
.
t
otal
.
substring
(
2
),
8
);
return
(
char
)(
int
)
Integer
.
valueOf
(
this
.
t
otal
);
return
(
char
)
Integer
.
parseInt
(
this
.
getT
otal
()
.
substring
(
2
),
8
);
return
(
char
)(
int
)
Integer
.
valueOf
(
this
.
getT
otal
()
);
}
}
src/tokens/SingleChar.java
View file @
07b00196
...
...
@@ -43,8 +43,8 @@ public class SingleChar extends Token
public
String
getString
()
{
if
(
this
.
backslash
!=
null
)
return
"\\"
+
this
.
backslash
.
t
otal
;
return
this
.
t
otal
;
return
"\\"
+
this
.
backslash
.
getT
otal
()
;
return
this
.
getT
otal
()
;
}
public
char
toChar
()
...
...
@@ -67,7 +67,7 @@ public class SingleChar extends Token
return
'\"'
;
}
else
return
((
ParserString
)
this
.
searchResults
[
0
].
getToken
()).
t
otal
.
charAt
(
0
);
return
((
ParserString
)
this
.
searchResults
[
0
].
getToken
()).
getT
otal
()
.
charAt
(
0
);
return
0
;
//Shouldn't happen
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment