Compiler / Transpiler Engineer (Mid-Level)
Team: Language Tools / Legacy Modernization About the project We are building a transpiler that converts UniBasic (a legacy BASIC dialect) into Java. The codebase we are modernizing is large: on the order of 14,000 source programs: so the transpiler is not a one-off script but a real compiler frontend:
What you will do
- Implement and extend parsers for UniBasic statements and expressions (control flow, file/OS I/O, dynamic-array and multivalue operations, CALL dispatch), each producing well-defined AST nodes.
- Build and refine semantic-analysis passes: name resolution, parameter-direction inference (input / output / in-out), and type binding/propagation across call sites.
- Implement AST-to-AST transformations that lower UniBasic constructs to a Java AST, and help keep the emitter a pure printer.
- Handle the hard, real-world edge cases legacy code is full of: ambiguous syntax, context sensitive tokenization, inconsistent formatting, and dialect quirks.
- Write thorough tests for every parser, pass, and transformation: including golden-file tests that transpile real UniBasic and compile the generated Java.
- Diagnose failures across the whole chain (a wrong .java output traced back to a lexer, parser, or transformer bug) and fix the root cause.
- Contribute to design discussions on pipeline architecture, AST shape, and how new language features flow from parse → SEMA → transform → emit.
Must-have qualifications Compiler / language-tool fundamentals
- 3–5yearsofsoftware engineering experience, including hands-on work on a compiler, tran spiler, interpreter, static analyzer, linter, or similar language tooling.
- Solid working knowledge of the frontend pipeline: lexing/tokenization, parsing (recursive descent / Pratt / precedence handling), AST design, and at least one of semantic analysis or code generation.
- Comfortable reasoning about grammars, precedence/associativity, and context sensitive parsing: and about why a construct produces the AST node it does.
Engineering craft
- Strong Java (Java 17+) and comfort with a typed, Object-oriented codebase.
- Disciplined about testing: you write tests for the code you change and treat a failing corpus file as a bug to root-cause, not skip.
- Practical experience with refactoring and clean-code. 1
- Clear written communication; able to justify a parsing/lowering decision and document edge cases