Skip to content

Commit 299dd97

Browse files
committed
Fix final details
1 parent b13dd3a commit 299dd97

7 files changed

Lines changed: 53 additions & 49 deletions

File tree

.idea/workspace.xml

Lines changed: 22 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/ko/carbonel/Utils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,8 @@ static <T, S> List<S> getRepeated(List<T> list, Function<T, S> grouper) {
198198
private static <T extends AttributeEntry> T getAttributeByName(String name, List<T> list) {
199199
return list.stream().filter(it->it.name.lexeme().equals(name)).findFirst().orElseThrow(()->new RuntimeException("This should not happen, Variable not found"));
200200
}
201+
202+
public static String getVersion() {
203+
return "1.0.0-SNAPSHOT-3";
204+
}
201205
}

src/main/java/ko/carbonel/compiler/config/ArgumentName.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ public enum ArgumentName {
1313
SYNTAX_DEBUG,
1414
OP,
1515
ALL_OPTIONS,
16-
TARGET
16+
IDE_OFFSET_FIX, TARGET
1717
}

src/main/java/ko/carbonel/compiler/config/Config.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,20 @@ public class Config {
3939
static {
4040
arguments = new HashMap<>();
4141
// FIXME: Set good defaults.
42-
addArgument(new Flag(ArgumentName.FANCY_TABLES, "Use fancy table format", true));
43-
addArgument(new Flag(ArgumentName.FORCE_ASCII, "Force ASCII output", false));
44-
addArgument(new Flag(ArgumentName.DO_COLOR_OUTPUT, "Use colors", true));
42+
addArgument(new Flag(ArgumentName.FANCY_TABLES, "Use fancy table format", false));
43+
addArgument(new Flag(ArgumentName.FORCE_ASCII, "Force ASCII output", true));
44+
addArgument(new Flag(ArgumentName.DO_COLOR_OUTPUT, "Use colors", false));
4545
addArgument(new Flag(ArgumentName.TABLE_ALIGN_LEFT, "Align tables to the left", false));
4646
addArgument(new Flag(ArgumentName.OUTPUT_LEXER_EXCEPTIONS_TESTS, "Output lexer exceptions during tests", false));
4747
addArgument(new Flag(ArgumentName.SYNTAX_DEBUG, "Output extra syntax debug info (very verbose)", false));
4848
addArgument(new Flag(ArgumentName.ALL_OPTIONS, "Output all options during syntax error", false));
49+
addArgument(new Flag(ArgumentName.IDE_OFFSET_FIX, "Add 1 to error line and column for IDE direct link", false));
4950
addArgument(new Param(ArgumentName.INPUT_FILE, "Input file", ""));
5051
addArgument(new Param(ArgumentName.OUTPUT_FILE, "Output file", ""));
51-
addArgument(new EnumArg<>(ArgumentName.LANG, "Language for some parts of the compiler", Language.Values.ENGLISH));
52+
addArgument(new EnumArg<>(ArgumentName.LANG, "Language for some parts of the compiler", Language.Values.TEACHER));
5253
addArgument(new EnumArg<>(ArgumentName.SORT_FUN, "Sort function for grammar rules", SortFun.START_AWARE_SORT));
5354
addArgument(new EnumArg<>(ArgumentName.OP, "Operation to run", Operation.PARSE));
54-
addArgument(new EnumArg<>(ArgumentName.TARGET, "Which grammar to use", Target.TINY_RUST));
55+
addArgument(new EnumArg<>(ArgumentName.TARGET, "Which grammar to use", Target.ATTR_TINY_RUST));
5556
}
5657

5758
public static void addArgument(Argument<?> argument) {
@@ -70,6 +71,7 @@ public static void main(String[] args) {
7071
case GEN -> runGenerator();
7172
case TEST -> {
7273
} // Do nothing
74+
case VERSION -> Logger.output("Version: " + Utils.getVersion());
7375
case HELP -> printHelpAdvanced();
7476
// FIXME: Add version
7577
default -> printHelp();
@@ -78,7 +80,6 @@ public static void main(String[] args) {
7880

7981
private static void printHelpAdvanced() {
8082
printHelp();
81-
String argName = get(ArgumentName.INPUT_FILE).getStringValue(); // FIXME: Complete this
8283
}
8384

8485
private static void runParser() {

src/main/java/ko/carbonel/compiler/exception/CompilerError.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,25 @@ private static Stream<? extends Serializable> generateLocation(FileLocation star
4343
return Stream.of(
4444
start.filename() == null ? "<internal>" : start.filename(),
4545
":",
46-
start.row() + 1,
46+
start.row() + ideFix(),
4747
":",
48-
start.column() + 1,
48+
start.column() + ideFix(),
4949
" (",
5050
start.filename() == null ? "<internal>" : new File(start.filename()).getName(),
5151
":",
52-
start.row() + 1,
52+
start.row() + ideFix(),
5353
")@",
54-
start.column() + 1,
54+
start.column() + ideFix(),
5555
" ",
5656
message,
5757
"\n"
5858
);
5959
}
6060

61+
private static int ideFix() {
62+
return Config.getBool(ArgumentName.IDE_OFFSET_FIX) ? 1 : 0;
63+
}
64+
6165
private static String buildMessage(FileLocation start, FileLocation end, String message) {
6266
if (end == null) return buildMessage(start, message);
6367
String out = generateLocation(start, message)

src/main/java/ko/carbonel/compiler/runner/STParserRunner.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ko.carbonel.compiler.runner;
22

3+
import ko.carbonel.Utils;
34
import ko.carbonel.compiler.AttributeParser;
45
import ko.carbonel.compiler.ParserAssistant;
56
import ko.carbonel.compiler.config.ArgumentName;
@@ -25,27 +26,24 @@ public STParserRunner(Function<SourceFileReader, Lexer<T, TT>> lexerSupplier, Fu
2526

2627
public STParserRunner(Function<SourceFileReader, Lexer<T, TT>> lexerSupplier, Function<Lexer<T, TT>, P> parserSupplier, boolean doAlphabetCheck, Function<S, String> compactRenderer) {
2728
super(lexerSupplier, parserSupplier, doAlphabetCheck);
29+
this.compactRenderer = compactRenderer;
30+
}
31+
32+
@Override
33+
protected void afterParse(P parser) {
34+
System.out.println(Config.lang().semanticDeclOK() + "\n");
35+
parser.getSymbolTable().consolidate();
2836
if (Config.getString(ArgumentName.OUTPUT_FILE).isBlank()) {
29-
inputFileName = Config.get(ArgumentName.INPUT_FILE).getStringValue();
3037
File file = new File(inputFileName);
3138
String name = file.getName();
3239
int i = name.lastIndexOf('.');
33-
if (i > 0) {
34-
name = name.substring(0, i);
35-
}
40+
if (i > 0) name = name.substring(0, i);
3641
name += ".json";
3742
File parentFile = file.getParentFile();
3843
String newFileName = parentFile.getAbsolutePath() + "/" + name;
39-
Config.setString(ArgumentName.OUTPUT_FILE, newFileName);
44+
Utils.writeFile(newFileName, new PrettyJsonSerializer().serialize(parser.getSymbolTable()));
4045
}
41-
this.compactRenderer = compactRenderer;
42-
}
43-
44-
@Override
45-
protected void afterParse(P parser) {
46-
super.afterParse(parser);
47-
parser.getSymbolTable().consolidate();
48-
output(new PrettyJsonSerializer().serialize(parser.getSymbolTable()));
4946
System.out.println(compactRenderer.apply(parser.getSymbolTable()));
5047
}
48+
5149
}

src/test/java/ko/carbonel/compiler/config/ConfigTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ void setup() {
1414

1515
@Test
1616
void config00() {
17-
Assertions.assertEquals("true", Config.get(ArgumentName.FANCY_TABLES).getStringValue());
1817
Config.main(new String[]{"+FANCY_TABLES"});
1918
Assertions.assertEquals("true", Config.get(ArgumentName.FANCY_TABLES).getStringValue());
2019
Config.main(new String[]{"-FANCY_TABLES"});
@@ -36,7 +35,6 @@ void config01() {
3635

3736
@Test
3837
void config02() {
39-
Assertions.assertEquals("ENGLISH", Config.get(ArgumentName.LANG).getStringValue());
4038
Config.main(new String[]{"+LANG=TEACHER"});
4139
Assertions.assertEquals("TEACHER", Config.get(ArgumentName.LANG).getStringValue());
4240
Assertions.assertEquals(Language.Values.TEACHER, Config.get(ArgumentName.LANG).getValue());

0 commit comments

Comments
 (0)