Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.keras filter=lfs diff=lfs merge=lfs -text
12 changes: 12 additions & 0 deletions .run/NNFormatLTSPSamplesBuilderKt.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="NNFormatLTSPSamplesBuilderKt" type="JetRunConfigurationType" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ce.parser.NNFormatLTSPSamplesBuilderKt" />
<module name="codegen.cgen-console.main" />
<option name="PROGRAM_PARAMETERS" value="$ProjectFileDir$/keras/format" />
<shortenClasspath name="NONE" />
<option name="WORKING_DIRECTORY" value="$ProjectFileDir$" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
2 changes: 1 addition & 1 deletion .run/RunCodegenOnTest.run.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="MAIN_CLASS_NAME" value="ce.entrypoints.BuildProjectKt" />
<module name="codegen.cgen-console.main" />
<option name="PROGRAM_PARAMETERS" value="--project ./test/project.json" />
<option name="PROGRAM_PARAMETERS" value="--project ./test/project.json --storeInTree --storeOutTree --storeOutTreeFormatted" />
<method v="2">
<option name="Make" enabled="true" />
</method>
Expand Down
10 changes: 8 additions & 2 deletions cgen-console/src/main/kotlin/ce/entrypoints/BuildProject.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ import kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory
fun main(args: Array<String>) {
var needToStoreInTree = false
var needToStoreOutTree = false
var needToStoreOutTreeFormatted = false
var projectFile = ""

val it = args.iterator()
while (it.hasNext()) {
when (it.next()) {
"--project" -> projectFile = it.next()
"--storeOutTree" -> needToStoreOutTree = true
"--storeOutTreeFormatted" -> needToStoreOutTreeFormatted = true
"--storeInTree" -> needToStoreInTree = true
}
}
Expand Down Expand Up @@ -54,6 +56,10 @@ fun main(args: Array<String>) {
val dir = DirsConfiguration(
workingDir = File(".").absolutePath
)
buildProjectUseCase(projectFile, needToStoreInTree, needToStoreOutTree,
dir)
buildProjectUseCase(
projectFile = projectFile,
writeInTree = needToStoreInTree,
writeOutTree = needToStoreOutTree,
writeOutTreeFormated = needToStoreOutTreeFormatted,
dirsConfiguration = dir)
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,17 @@ class BuildProjectUseCase(
operator fun invoke(projectFile: String,
writeInTree: Boolean = false,
writeOutTree : Boolean = false,
dirsConfiguration: DirsConfiguration) {
dirsConfiguration: DirsConfiguration,
writeOutTreeFormated: Boolean = false) {
val project : Project = getProjectUseCase(projectFile, dirsConfiguration)
val codeStyleRepo = CodestyleRepoImpl(project)
val reportsRepo = ReportsRepoImpl()
reportsRepo.logi("Processing $project")
val generatorsRepo = GeneratorsRepo(
project = project,
codestylesRepo = codeStyleRepo)
val writtersRepo = WrittersRepoImpl(codestylesRepo = codeStyleRepo,
val writersRepo = WrittersRepoImpl(
codestylesRepo = codeStyleRepo,
reportsRepo = reportsRepo
)

Expand All @@ -48,7 +50,10 @@ class BuildProjectUseCase(
codeFormatter = generatorsRepo.getFormatter(target.type)
)
val codeStyleTree = prepareCodeStyleTreeUseCase.prepareCodeStyleTree(outTree)
writtersRepo.getWritter(target).write(codeStyleTree)
if (writeOutTreeFormated) {
storeOutTreeUseCase(target.outputFolder + "output_tree_formatted_${target.type.name}.xml", codeStyleTree)
}
writersRepo.getWritter(target).write(codeStyleTree)
}
}
}
16 changes: 16 additions & 0 deletions cgen-lib/src/main/kotlin/ce/treeio/TreeReader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,23 @@ package ce.treeio

import generators.obj.abstractSyntaxTree.Leaf

/**
* Interface for reading a tree structure from a file or a string.
*/
interface TreeReader {
/**
* Loads the tree structure from the specified file path.
*
* @param filePath The path of the file from which the tree will be loaded.
* @return The loaded tree structure as a Leaf object.
*/
fun load(filePath: String): Leaf

/**
* Loads the tree structure from the given string data.
*
* @param data The string data from which the tree will be loaded.
* @return The loaded tree structure as a Leaf object.
*/
fun loadFromString(data: String): Leaf
}
9 changes: 9 additions & 0 deletions cgen-lib/src/main/kotlin/ce/treeio/TreeWritter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ package ce.treeio

import generators.obj.abstractSyntaxTree.Leaf

/**
* Interface for writing a tree structure to a file.
*/
interface TreeWritter {
/**
* Stores the given tree structure to the specified file path.
*
* @param filePath The path of the file where the tree will be stored.
* @param tree The tree structure to store.
*/
fun storeTree(filePath: String, tree: Leaf)
}
11 changes: 0 additions & 11 deletions cgen-lib/src/main/kotlin/generators/cpp/CppClasses.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ data class CppHeaderFile(
override var isDirty: Boolean = false
) : FileData {

init {
addSub(CompilerDirective("pragma once"))
addSub(ImportsBlock())
isDirty = false
}

override fun copyLeaf(parent: Node?, copySubs: Boolean) =
this.copyNodeExt(parent, copySubs) { this.copy(subs = mutableListOf()).apply { subs.clear() }}

Expand All @@ -44,11 +38,6 @@ data class CppFileData(
override var isDirty: Boolean = false
) : FileData {

init {
addSub(ImportsBlock())
isDirty = false
}

override fun toString(): String = name

override fun copyLeaf(parent: Node?, copySubs: Boolean) =
Expand Down
18 changes: 17 additions & 1 deletion cgen-lib/src/main/kotlin/generators/cpp/CppFileGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,33 @@ package generators.cpp

import generators.obj.CLikeFileGenerator
import generators.obj.abstractSyntaxTree.Block
import generators.obj.abstractSyntaxTree.addSub
import generators.obj.syntaxParseTree.FileData
import generators.obj.syntaxParseTree.ImportsBlock
import generators.obj.syntaxParseTree.OutputTree
import generators.obj.syntaxParseTree.FileMetaInformation

class CppFileGenerator() : CLikeFileGenerator() {
override fun createFile(project: OutputTree, outputFile: String, block: Block): List<FileData> {
override fun createFile(
project: OutputTree,
workingDirectory: String,
packageDirectory: String,
outputFile: String,
block: Block
): List<FileData> {
return listOf(
CppFileData(outputFile + ".cpp").apply {
setParent2(project)
addSub(FileMetaInformation(workingDirectory))
addSub(ImportsBlock())
isDirty = false
},
CppHeaderFile(outputFile + ".h").apply {
setParent2(project)
addSub(FileMetaInformation(workingDirectory))
addSub(CompilerDirective("pragma once"))
addSub(ImportsBlock())
isDirty = false
}
)
}
Expand Down
6 changes: 5 additions & 1 deletion cgen-lib/src/main/kotlin/generators/cpp/CppWritter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import generators.obj.syntaxParseTree.ImportLeaf
import generators.obj.syntaxParseTree.NamespaceBlock
import generators.obj.syntaxParseTree.OutBlock
import generators.obj.syntaxParseTree.OutBlockArguments
import generators.obj.syntaxParseTree.FileMetaInformation
import java.io.File

class CppWritter(
Expand All @@ -33,6 +34,7 @@ class CppWritter(
out.write("#include \"${leaf.name}\"")
}
}

else -> super.writeLeaf(leaf, out, indent)
}
}
Expand Down Expand Up @@ -62,7 +64,9 @@ class CppWritter(
reportsRepo.loge("No data to write ${fileData.name}")
return
}
val outputFile = File(fileData.name)
val fileMetaInformation = fileData.findOrNull(FileMetaInformation::class.java)?.name
?: throw IllegalStateException("No working directory found in fileData ${fileData.name}")
val outputFile = File(fileMetaInformation + "/" + fileData.name)
outputFile.parentFile.mkdirs()
reportsRepo.logi("Writing $outputFile")
outputFile.bufferedWriter().use { out ->
Expand Down
18 changes: 15 additions & 3 deletions cgen-lib/src/main/kotlin/generators/java/JavaFileGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,35 @@ import generators.obj.syntaxParseTree.FileDataImpl
import generators.obj.syntaxParseTree.ImportsBlock
import generators.obj.syntaxParseTree.NamespaceDeclaration
import generators.obj.syntaxParseTree.OutputTree
import generators.obj.syntaxParseTree.FileMetaInformation
import java.io.File

class JavaFileGenerator() : CLikeFileGenerator() {
override fun createFile(project: OutputTree, outputFile: String, block: Block): List<FileData> {
override fun createFile(
project: OutputTree,
workingDirectory: String,
packageDirectory: String,
outputFile: String,
block: Block
): List<FileData> {
return listOf(FileDataImpl(outputFile).apply {
setParent2(project)
addSub(FileMetaInformation(workingDirectory))
addSub(NamespaceDeclaration(block.getParentPath()))
addSub(ImportsBlock())
})
}

override fun getBlockFilePath(block: Block): String {
override fun getBlockFilePath(block: Block): BlockPath {
var fileName = block.name
if (block.outputFile.isNotEmpty()) {
fileName = block.outputFile
}
val namespace = block.getParentPath().replace('.', File.separatorChar)
return block.objectBaseFolder + File.separatorChar + namespace + File.separatorChar + fileName
return BlockPath(
baseObjectDirecotry = block.objectBaseFolder,
namespacePath = namespace,
fileName = fileName
)
}
}
6 changes: 5 additions & 1 deletion cgen-lib/src/main/kotlin/generators/java/JavaWritter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import ce.repository.ReportsRepo
import generators.obj.Writter
import generators.obj.abstractSyntaxTree.Leaf
import generators.obj.abstractSyntaxTree.Node
import generators.obj.abstractSyntaxTree.findOrNull
import generators.obj.syntaxParseTree.FileData
import generators.obj.syntaxParseTree.ImportLeaf
import generators.obj.syntaxParseTree.NamespaceDeclaration
import generators.obj.syntaxParseTree.OutBlock
import generators.obj.syntaxParseTree.FileMetaInformation
import java.io.File

class JavaWritter(
Expand All @@ -20,7 +22,9 @@ class JavaWritter(
: Writter(codeStyleRepo, outputFolder) {

override fun writeFile(fileData: FileData) {
val outputFile = File(fileData.name + ".java")
val fileMetaInformation = fileData.findOrNull(FileMetaInformation::class.java)?.name ?:
throw IllegalStateException("No working directory found in fileData ${fileData.name}")
val outputFile = File(fileMetaInformation + "/" + fileData.name + ".java")
outputFile.parentFile.mkdirs()
reportsRepo.logi("Writing $outputFile")
outputFile.bufferedWriter().use { out ->
Expand Down
23 changes: 20 additions & 3 deletions cgen-lib/src/main/kotlin/generators/kotlin/KotlinFileGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,25 @@ import generators.obj.syntaxParseTree.Keyword
import generators.obj.syntaxParseTree.NamespaceDeclaration
import generators.obj.syntaxParseTree.OutputTree
import generators.obj.syntaxParseTree.VariableName
import generators.obj.syntaxParseTree.FileMetaInformation
import generators.obj.syntaxParseTree.PackageDirectory
import generators.obj.syntaxParseTree.WorkingDirectory
import java.io.File

class KotlinFileGenerator() : CLikeFileGenerator() {
override fun createFile(project: OutputTree, outputFile: String, block: Block): List<FileData> {
override fun createFile(
project: OutputTree,
workingDirectory: String,
packageDirectory: String,
outputFile: String,
block: Block
): List<FileData> {
return listOf(FileDataImpl(outputFile).apply {
setParent2(project)
addSub(FileMetaInformation("").apply {
addSub(WorkingDirectory(workingDirectory))
addSub(PackageDirectory(packageDirectory))
})
addSub(NamespaceDeclaration("").apply {
addSub(Keyword("package"))
addSub(VariableName(block.getParentPath()))
Expand All @@ -25,12 +38,16 @@ class KotlinFileGenerator() : CLikeFileGenerator() {
})
}

override fun getBlockFilePath(block: Block): String {
override fun getBlockFilePath(block: Block): BlockPath {
var fileName = "${block.name}"
if (block.outputFile.isNotEmpty()) {
fileName = "${block.outputFile}"
}
val namespace = block.getParentPath().replace('.', File.separatorChar)
return block.objectBaseFolder + File.separatorChar + namespace + File.separatorChar + fileName
return BlockPath(
baseObjectDirecotry = block.objectBaseFolder,
namespacePath = namespace,
fileName = fileName
)
}
}
14 changes: 13 additions & 1 deletion cgen-lib/src/main/kotlin/generators/kotlin/KotlinWriter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,31 @@ import generators.obj.abstractSyntaxTree.Leaf
import generators.obj.abstractSyntaxTree.Method
import generators.obj.abstractSyntaxTree.Node
import generators.obj.abstractSyntaxTree.findOrNull
import generators.obj.abstractSyntaxTree.findParent
import generators.obj.abstractSyntaxTree.removeSub
import generators.obj.syntaxParseTree.FileData
import generators.obj.syntaxParseTree.ImportLeaf
import generators.obj.syntaxParseTree.NamespaceDeclaration
import generators.obj.syntaxParseTree.OutBlock
import generators.obj.syntaxParseTree.ResultLeaf
import generators.obj.syntaxParseTree.FileMetaInformation
import generators.obj.syntaxParseTree.PackageDirectory
import generators.obj.syntaxParseTree.WorkingDirectory
import java.io.File

class KotlinWriter(codeStyleRepo: CodeStyleRepo, outputFolder: String)
: Writter(codeStyleRepo, outputFolder) {

override fun writeFile(fileData: FileData) {
val outputFile = File(fileData.name + ".kt")
val fileMetaInformation = fileData.findOrNull(FileMetaInformation::class.java) ?:
throw IllegalStateException("No working directory found in fileData ${fileData.name}")
val workingDirectory = fileMetaInformation.findOrNull(WorkingDirectory::class.java)?.name ?:
throw IllegalStateException("No working directory found in fileData ${fileData.name}")
val packageDirectory = fileMetaInformation.findOrNull(PackageDirectory::class.java)?.name ?:
throw IllegalStateException("No working directory found in fileData ${fileData.name}")
val outputFile = File(workingDirectory + File.separator +
packageDirectory + File.separator +
fileData.name + ".kt")
outputFile.parentFile.mkdirs()
println("KotlinWriter writing ${outputFile.absolutePath}")
outputFile.bufferedWriter().use { out ->
Expand Down
8 changes: 6 additions & 2 deletions cgen-lib/src/main/kotlin/generators/obj/CLikeFileGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@ import java.io.File

abstract class CLikeFileGenerator() : FileGenerator() {

override fun getBlockFilePath(block: Block): String {
override fun getBlockFilePath(block: Block): BlockPath {
var fileName = "${block.name}"
if (block.outputFile.isNotEmpty()) {
fileName = "${block.outputFile}"
}
// val namespace = block.namespace.replace('.', File.separatorChar)
return block.objectBaseFolder + File.separatorChar + fileName
return BlockPath(
baseObjectDirecotry = block.objectBaseFolder,
namespacePath = "",
fileName = fileName
)
}
}
Loading
Loading