Skip to content
Open
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
41 changes: 41 additions & 0 deletions homework/62374/java2html/CommonTypes.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#pragma once
#include <string>
#include <vector>
#include <unordered_map>
#include <memory>
#include <stack>
#include <cassert>

template<typename T>
using IPLVector = std::vector<T>;
using IPLString = std::string;

template<typename T, typename K>
using IPLPair = std::pair<T, K>;

template <typename T>
using IPLStack = std::stack<T>;

template <typename Key, typename T>
using IPLUnorderedMap = std::unordered_map<Key, T>;

template <typename T>
using IPLSharedPtr = std::shared_ptr<T>;

template <typename T, class... Args>
inline IPLSharedPtr<T> IPLMakeSharePtr(Args&&... args) {
return std::make_shared<T, Args...>(args...);
};

template< typename T>
using IPLEnableShared = std::enable_shared_from_this<T>;

struct IPLError
{
unsigned Row;
unsigned Column;
IPLString File;
IPLString What;
};

#define NOT_IMPLEMENTED assert(0 && "not-implemented")
154 changes: 154 additions & 0 deletions homework/62374/java2html/Lexer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
#pragma once

#include "CommonTypes.h"

enum class TokenType
{
// Single-character tokens.
LeftParen,
RightParen,
LeftBrace,
RightBrace,
Comma,
Dot,
Minus,
Plus,
Semicolon,
Star,
Division,
Modulo,
BitwiseNot,
BitwiseAnd,
BitwiseXor,
BitwiseOr,
QuestionMark,
Colon,
LeftSquareBracket,
RightSquareBracket,

// One or two character tokens
Bang,
BangEqual,
Equal,
EqualEqual,
StrictEqual,
StrictNotEqual,
Greater,
GreaterEqual,
Less,
LessEqual,
MinusMinus,
PlusPlus,
LeftShift,
RightShift,
LogicalAnd,
LogicalOr,
StarEqual,
DivideEqual,
ModuloEqual,
PlusEqual,
MinusEqual,
LeftShiftEqual,
RightShiftEqual,
BitwiseAndEqual,
BitwiseXorEqual,
BitwiseOrEqual,
Backslash,

Identifier,
String,
Number,

// Keywords. ECMAScript 2015
Abstract,
Package,
Synchronize,
Boolean,
Comment on lines +62 to +66

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would have been better to extend the JSImpl to allow different languages, than duplicating the JavaScript implementation

Private,
Double,
Implements,
Protected,
Byte,
Public,
Throws,
Transient,
Int,
Short,
Char,
Final,
Interface,
Static,
Long,
Float,
Break,
Case,
Catch,
Class,
Const,
Continue,
Debugger,
Default,
Delete,
Do,
Else,
Export,
Extends,
Finally,
For,
Function,
If,
Import,
In,
Instanceof,
New,
Return,
Super,
Switch,
This,
Throw,
Try,
Typeof,
Var,
Let,
Void,
While,
With,
Yield,
Null,
Undefined,
True,
False,

Whitespace,
Tab,
NewLine,
Comment,

Eof,
Invalid
};

struct Token
{
TokenType Type;
unsigned Line;
unsigned Column;
IPLString Lexeme;
double Number;
};

struct LexerResult
{
bool IsSuccessful;
IPLError Error;
IPLVector<Token> tokens;
};

struct LexerSettings
{
bool CreateWhitespaceTokens;
bool CreateCommentTokens;
};

LexerResult Tokenize(const char* code, const LexerSettings& settings);
LexerResult Tokenize(const char* code);
11 changes: 11 additions & 0 deletions homework/62374/java2html/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
public class Main {

public static void main(String[] args) {
// This is a comment;

int a = 5;

System.out.println("Hello World");
}

}
Loading