Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Anders Blomdell
LabComm
Commits
65b8ec23
Commit
65b8ec23
authored
May 29, 2015
by
Sven Gestegård Robertz
Browse files
initial sketch of typedefs as samples
parent
f2be82a5
Changes
3
Hide whitespace changes
Inline
Side-by-side
compiler/2014/GenerateTypedefs.jrag
0 → 100644
View file @
65b8ec23
aspect TypeDefGen {
public void Specification.generateTypedefs(PrintStream out, int ver) {
for(Decl d : getDecls()) {
d.generateTypedefs(out);
}
}
public void Decl.generateTypedefs(PrintStream out) {
}
public void Decl.generateDepTypedefs(PrintStream out){
Iterator<Decl> it = type_dependencies().iterator();
while(it.hasNext()) {
Decl d = it.next();
d.generateDepTypedefs(out);
}
pp(out);
}
public void SampleDecl.generateTypedefs(PrintStream out){
if(hasDependencies()) {
out.println("sample "+getName()+"_def {");
out.println(" sample sample;");
out.println(" string typedef = <<EOL");
for(Decl d : type_dependencies()) {
d.generateDepTypedefs(out);
}
pp(out);
out.println("EOL;");
}
}
}
compiler/2014/LabComm.java
View file @
65b8ec23
...
...
@@ -36,8 +36,9 @@ public class LabComm {
println
(
"[ Misc options ]"
);
println
(
" --pretty=PFILE Pretty prints to PFILE"
);
println
(
" --typeinfo=TIFILE Generates typeinfo in TIFILE"
);
println
(
" --typedefs=TIFILE Generates typedefs in TIFILE"
);
}
/** To be cleaned up.
*/
private
static
void
checkVersion
(
int
v
)
{
...
...
@@ -48,12 +49,12 @@ public class LabComm {
}
}
private
static
void
genH
(
Specification
p
,
String
hName
,
private
static
void
genH
(
Specification
p
,
String
hName
,
Vector
cIncludes
,
String
coreName
,
String
prefix
,
int
ver
)
{
try
{
FileOutputStream
f
;
PrintStream
out
;
f
=
new
FileOutputStream
(
hName
);
out
=
new
PrintStream
(
f
);
p
.
C_genH
(
out
,
cIncludes
,
coreName
,
prefix
,
ver
);
...
...
@@ -63,7 +64,7 @@ public class LabComm {
}
}
private
static
void
genC
(
Specification
p
,
String
cName
,
private
static
void
genC
(
Specification
p
,
String
cName
,
Vector
cIncludes
,
String
coreName
,
String
prefix
,
int
ver
)
{
try
{
FileOutputStream
f
;
...
...
@@ -83,7 +84,7 @@ public class LabComm {
try
{
p
.
CS_gen
(
csName
,
csNamespace
,
ver
);
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"IOException: "
+
csName
+
" "
+
System
.
err
.
println
(
"IOException: "
+
csName
+
" "
+
csNamespace
+
" "
+
e
);
}
}
...
...
@@ -92,7 +93,7 @@ public class LabComm {
try
{
p
.
J_gen
(
dirName
,
packageName
,
ver
);
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"IOException: "
+
dirName
+
" "
+
System
.
err
.
println
(
"IOException: "
+
dirName
+
" "
+
packageName
+
" "
+
e
);
}
}
...
...
@@ -119,7 +120,7 @@ public class LabComm {
}
}
/** Helper class to contain command line options
/** Helper class to contain command line options
and their associated behaviour
**/
private
static
class
Opts
{
...
...
@@ -139,6 +140,7 @@ public class LabComm {
String
pythonFile
=
null
;
String
prettyFile
=
null
;
String
typeinfoFile
=
null
;
String
typedefsFile
=
null
;
String
rapidFile
=
null
;
String
fileName
=
null
;
...
...
@@ -150,21 +152,21 @@ public class LabComm {
int
i
=
s
.
lastIndexOf
(
'.'
);
return
s
.
substring
(
0
,
i
>
0
?
i
:
s
.
length
());
}
private
static
String
getFileName
(
String
s
)
{
return
s
.
substring
(
s
.
lastIndexOf
(
'/'
)
+
1
,
s
.
length
());
}
private
static
String
getBaseName
(
String
s
)
{
s
=
getFileName
(
s
);
int
i
=
s
.
lastIndexOf
(
'.'
);
return
s
.
substring
(
0
,
i
>
0
?
i
:
s
.
length
());
}
private
static
String
getPrefix
(
String
s
)
{
return
s
.
substring
(
s
.
lastIndexOf
(
'/'
)
+
1
,
s
.
length
());
}
boolean
processFilename
(){
// Scan for first non-option
for
(
int
i
=
0
;
i
<
args
.
length
;
i
++)
{
...
...
@@ -180,12 +182,12 @@ public class LabComm {
}
return
fileName
!=
null
;
}
void
processArgs
(){
for
(
int
i
=
0
;
i
<
args
.
length
;
i
++)
{
if
(
fileName
==
null
||
args
[
i
].
equals
(
"-help"
)
||
args
[
i
].
equals
(
"-h"
)
||
args
[
i
].
equals
(
"-help"
)
||
args
[
i
].
equals
(
"-h"
)
||
args
[
i
].
equals
(
"--help"
))
{
print_help
();
System
.
exit
(
0
);
...
...
@@ -223,6 +225,8 @@ public class LabComm {
prettyFile
=
args
[
i
].
substring
(
9
);
}
else
if
(
args
[
i
].
startsWith
(
"--typeinfo="
))
{
typeinfoFile
=
args
[
i
].
substring
(
11
);
}
else
if
(
args
[
i
].
startsWith
(
"--typedefs="
))
{
typedefsFile
=
args
[
i
].
substring
(
11
);
}
else
if
(
args
[
i
].
equals
(
"--rapid"
))
{
rapidFile
=
coreName
+
".sys"
;
}
else
if
(
i
==
args
.
length
-
1
)
{
...
...
@@ -249,7 +253,7 @@ public class LabComm {
Specification
p
=
(
Specification
)
parser
.
parse
(
scanner
);
Collection
errors
=
new
LinkedList
();
p
.
errorCheck
(
errors
);
if
(
errors
.
isEmpty
())
{
ast
=
p
;
}
else
{
...
...
@@ -269,7 +273,7 @@ public class LabComm {
}
boolean
generateC
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
Vector
hIncludes
=
new
Vector
(
cIncludes
);
if
(
hFile
!=
null
)
{
cIncludes
.
add
(
hFile
);
...
...
@@ -286,19 +290,19 @@ public class LabComm {
}
return
wroteFile
;
}
boolean
generateCS
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
if
(
csFile
!=
null
)
{
printStatus
(
"C#: "
,
csFile
);
printStatus
(
"C#: "
,
csFile
);
genCS
(
ast
,
csFile
,
csNamespace
,
ver
);
wroteFile
=
true
;
}
return
wroteFile
;
}
boolean
generateJava
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
if
(
javaDir
!=
null
)
{
printStatus
(
"Java: "
,
javaDir
);
genJava
(
ast
,
javaDir
,
javaPackage
,
ver
);
...
...
@@ -306,19 +310,19 @@ public class LabComm {
}
return
wroteFile
;
}
boolean
generatePython
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
if
(
pythonFile
!=
null
)
{
printStatus
(
"Python: "
,
pythonFile
);
printStatus
(
"Python: "
,
pythonFile
);
genPython
(
ast
,
pythonFile
,
prefix
,
ver
);
wroteFile
=
true
;
}
return
wroteFile
;
}
boolean
generateRAPID
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
if
(
rapidFile
!=
null
)
{
printStatus
(
"RAPID: "
,
rapidFile
);
genRAPID
(
ast
,
rapidFile
,
coreName
,
ver
);
...
...
@@ -327,9 +331,9 @@ public class LabComm {
return
wroteFile
;
}
boolean
generatePrettyPrint
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
if
(
prettyFile
!=
null
)
{
printStatus
(
"Pretty: "
,
prettyFile
);
printStatus
(
"Pretty: "
,
prettyFile
);
try
{
FileOutputStream
f
=
new
FileOutputStream
(
prettyFile
);
PrintStream
out
=
new
PrintStream
(
f
);
...
...
@@ -338,15 +342,15 @@ public class LabComm {
wroteFile
=
true
;
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"IOException: "
+
prettyFile
+
" "
+
e
);
}
}
}
return
wroteFile
;
}
boolean
generateTypeinfo
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
boolean
wroteFile
=
false
;
if
(
typeinfoFile
!=
null
)
{
printStatus
(
"TypeInfo: "
,
typeinfoFile
);
printStatus
(
"TypeInfo: "
,
typeinfoFile
);
try
{
FileOutputStream
f
=
new
FileOutputStream
(
typeinfoFile
);
PrintStream
out
=
new
PrintStream
(
f
);
...
...
@@ -361,9 +365,25 @@ public class LabComm {
return
wroteFile
;
}
boolean
generateTypedefs
(
Specification
ast
)
{
boolean
wroteFile
=
false
;
if
(
typedefsFile
!=
null
)
{
printStatus
(
"Typedefs: "
,
typedefsFile
);
try
{
FileOutputStream
f
=
new
FileOutputStream
(
typedefsFile
);
PrintStream
out
=
new
PrintStream
(
f
);
ast
.
generateTypedefs
(
out
,
ver
);
wroteFile
=
true
;
}
catch
(
IOException
e
)
{
System
.
err
.
println
(
"IOException: "
+
typedefsFile
+
" "
+
e
);
}
}
return
wroteFile
;
}
private
void
printStatus
(
String
kind
,
String
filename
){
if
(
verbose
)
{
System
.
err
.
println
(
"Generating "
+
kind
+
": "
+
filename
);
if
(
verbose
)
{
System
.
err
.
println
(
"Generating "
+
kind
+
": "
+
filename
);
}
}
}
...
...
@@ -379,7 +399,7 @@ public class LabComm {
Specification
ast
=
opts
.
parseFile
();
if
(
ast
!=
null
)
{
boolean
fileWritten
=
false
;
fileWritten
|=
opts
.
generateC
(
ast
);
...
...
@@ -389,6 +409,7 @@ public class LabComm {
fileWritten
|=
opts
.
generateRAPID
(
ast
);
fileWritten
|=
opts
.
generatePrettyPrint
(
ast
);
fileWritten
|=
opts
.
generateTypeinfo
(
ast
);
fileWritten
|=
opts
.
generateTypedefs
(
ast
);
// if no output to files, prettyprint on stdout
if
(!
fileWritten
)
{
...
...
@@ -400,5 +421,5 @@ public class LabComm {
System
.
exit
(
3
);
}
}
}
}
}
compiler/2014/TypeReferences.jrag
View file @
65b8ec23
...
...
@@ -10,23 +10,23 @@ aspect User_Types {
}
aspect Type_References {
// The dependencies on other type declarations for a Decl.
coll Set<Decl> Decl.type_dependencies() [new HashSet<Decl>()] with add;
Field contributes ((UserType)getDataType()).decl()
Field contributes ((UserType)getDataType()).decl()
when parentDecl() != null && getDataType().isUserType()
to Decl.type_dependencies()
to Decl.type_dependencies()
for parentDecl();
UserType contributes decl()
when parentDecl() != null
to Decl.type_dependencies()
UserType contributes decl()
when parentDecl() != null
to Decl.type_dependencies()
for parentDecl();
/*
Field contributes getDataType().decl()
Field contributes getDataType().decl()
when parentDecl() != null && getDataType().isLeafType()
to Decl.type_dependencies()
to Decl.type_dependencies()
for parentDecl();
*/
...
...
Write
Preview
Supports
Markdown
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