Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Frontend optimization #21

Draft
wants to merge 14 commits into
base: master
Choose a base branch
from
238 changes: 238 additions & 0 deletions -15 export issue
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@

Copy link
Member

Choose a reason for hiding this comment

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

What is this file and why is it pushed?

SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS

Commands marked with * may be preceded by a number, _N.
Notes in parentheses indicate the behavior if _N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.

h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------

MMOOVVIINNGG

e ^E j ^N CR * Forward one line (or _N lines).
y ^Y k ^K ^P * Backward one line (or _N lines).
f ^F ^V SPACE * Forward one window (or _N lines).
b ^B ESC-v * Backward one window (or _N lines).
z * Forward one window (and set window to _N).
w * Backward one window (and set window to _N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
d ^D * Forward one half-window (and set half-window to _N).
u ^U * Backward one half-window (and set half-window to _N).
ESC-) RightArrow * Right one half screen width (or _N positions).
ESC-( LeftArrow * Left one half screen width (or _N positions).
ESC-} ^RightArrow Right to last column displayed.
ESC-{ ^LeftArrow Left to first column.
F Forward forever; like "tail -f".
ESC-F Like F but stop when search pattern is found.
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------

SSEEAARRCCHHIINNGG

/_p_a_t_t_e_r_n * Search forward for (_N-th) matching line.
?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line.
n * Repeat previous search (for _N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&_p_a_t_t_e_r_n * Display only matching lines
---------------------------------------------------
A search pattern may be preceded by one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
---------------------------------------------------------------------------

JJUUMMPPIINNGG

g < ESC-< * Go to first line in file (or line _N).
G > ESC-> * Go to last line in file (or line _N).
p % * Go to beginning of file (or _N percent into file).
t * Go to the (_N-th) next tag.
T * Go to the (_N-th) previous tag.
{ ( [ * Find close bracket } ) ].
} ) ] * Find open bracket { ( [.
ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>.
ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>
---------------------------------------------------
Each "find close bracket" command goes forward to the close bracket
matching the (_N-th) open bracket in the top line.
Each "find open bracket" command goes backward to the open bracket
matching the (_N-th) close bracket in the bottom line.

m_<_l_e_t_t_e_r_> Mark the current top line with <letter>.
M_<_l_e_t_t_e_r_> Mark the current bottom line with <letter>.
'_<_l_e_t_t_e_r_> Go to a previously marked position.
'' Go to the previous position.
^X^X Same as '.
ESC-M_<_l_e_t_t_e_r_> Clear a mark.
---------------------------------------------------
A mark is any upper-case or lower-case letter.
Certain marks are predefined:
^ means beginning of the file
$ means end of the file
---------------------------------------------------------------------------

CCHHAANNGGIINNGG FFIILLEESS

:e [_f_i_l_e] Examine a new file.
^X^V Same as :e.
:n * Examine the (_N-th) next file from the command line.
:p * Examine the (_N-th) previous file from the command line.
:x * Examine the first (or _N-th) file from the command line.
:d Delete the current file from the command line list.
= ^G :f Print current file name.
---------------------------------------------------------------------------

MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS

-_<_f_l_a_g_> Toggle a command line option [see OPTIONS below].
--_<_n_a_m_e_> Toggle a command line option, by name.
__<_f_l_a_g_> Display the setting of a command line option.
___<_n_a_m_e_> Display the setting of an option, by name.
+_c_m_d Execute the less cmd each time a new file is examined.

!_c_o_m_m_a_n_d Execute the shell command with $SHELL.
|XX_c_o_m_m_a_n_d Pipe file between current pos & mark XX to shell command.
s _f_i_l_e Save input to a file.
v Edit the current file with $VISUAL or $EDITOR.
V Print version number of "less".
---------------------------------------------------------------------------

OOPPTTIIOONNSS

Most options may be changed either on the command line,
or from within less by using the - or -- command.
Options may be given in one of two forms: either a single
character preceded by a -, or a name preceded by --.

-? ........ --help
Display help (from command line).
-a ........ --search-skip-screen
Search skips current screen.
-A ........ --SEARCH-SKIP-SCREEN
Search starts just after target line.
-b [_N] .... --buffers=[_N]
Number of buffers.
-B ........ --auto-buffers
Don't automatically allocate buffers for pipes.
-c ........ --clear-screen
Repaint by clearing rather than scrolling.
-d ........ --dumb
Dumb terminal.
-D [_x_n_._n] . --color=_x_n_._n
Set screen colors. (MS-DOS only)
-e -E .... --quit-at-eof --QUIT-AT-EOF
Quit at end of file.
-f ........ --force
Force open non-regular files.
-F ........ --quit-if-one-screen
Quit if entire file fits on first screen.
-g ........ --hilite-search
Highlight only last match for searches.
-G ........ --HILITE-SEARCH
Don't highlight any matches for searches.
-h [_N] .... --max-back-scroll=[_N]
Backward scroll limit.
-i ........ --ignore-case
Ignore case in searches that do not contain uppercase.
-I ........ --IGNORE-CASE
Ignore case in all searches.
-j [_N] .... --jump-target=[_N]
Screen position of target lines.
-J ........ --status-column
Display a status column at left edge of screen.
-k [_f_i_l_e] . --lesskey-file=[_f_i_l_e]
Use a lesskey file.
-K --quit-on-intr
Exit less in response to ctrl-C.
-L ........ --no-lessopen
Ignore the LESSOPEN environment variable.
-m -M .... --long-prompt --LONG-PROMPT
Set prompt style.
-n -N .... --line-numbers --LINE-NUMBERS
Don't use line numbers.
-o [_f_i_l_e] . --log-file=[_f_i_l_e]
Copy to log file (standard input only).
-O [_f_i_l_e] . --LOG-FILE=[_f_i_l_e]
Copy to log file (unconditionally overwrite).
-p [_p_a_t_t_e_r_n] --pattern=[_p_a_t_t_e_r_n]
Start at pattern (from command line).
-P [_p_r_o_m_p_t] --prompt=[_p_r_o_m_p_t]
Define new prompt.
-q -Q .... --quiet --QUIET --silent --SILENT
Quiet the terminal bell.
-r -R .... --raw-control-chars --RAW-CONTROL-CHARS
Output "raw" control characters.
-s ........ --squeeze-blank-lines
Squeeze multiple blank lines.
-S ........ --chop-long-lines
Chop (truncate) long lines rather than wrapping.
-t [_t_a_g] .. --tag=[_t_a_g]
Find a tag.
-T [_t_a_g_s_f_i_l_e] --tag-file=[_t_a_g_s_f_i_l_e]
Use an alternate tags file.
-u -U .... --underline-special --UNDERLINE-SPECIAL
Change handling of backspaces.
-V ........ --version
Display the version number of "less".
-w ........ --hilite-unread
Highlight first new line after forward-screen.
-W ........ --HILITE-UNREAD
Highlight first new line after any forward movement.
-x [_N[,...]] --tabs=[_N[,...]]
Set tab stops.
-X ........ --no-init
Don't use termcap init/deinit strings.
-y [_N] .... --max-forw-scroll=[_N]
Forward scroll limit.
-z [_N] .... --window=[_N]
Set size of window.
-" [_c[_c]] . --quotes=[_c[_c]]
Set shell quote characters.
-~ ........ --tilde
Don't display tildes after end of file.
-# [_N] .... --shift=[_N]
Horizontal scroll amount (0 = one half screen width)
........ --no-keypad
Don't send termcap keypad init/deinit strings.
........ --follow-name
The F command changes files if the input file is renamed.
........ --use-backslash
Subsequent options use backslash as escape char.


---------------------------------------------------------------------------

LLIINNEE EEDDIITTIINNGG

These keys can be used to edit text being entered
on the "command line" at the bottom of the screen.

RightArrow ..................... ESC-l ... Move cursor right one character.
LeftArrow ...................... ESC-h ... Move cursor left one character.
ctrl-RightArrow ESC-RightArrow ESC-w ... Move cursor right one word.
ctrl-LeftArrow ESC-LeftArrow ESC-b ... Move cursor left one word.
HOME ........................... ESC-0 ... Move cursor to start of line.
END ............................ ESC-$ ... Move cursor to end of line.
BACKSPACE ................................ Delete char to left of cursor.
DELETE ......................... ESC-x ... Delete char under cursor.
ctrl-BACKSPACE ESC-BACKSPACE ........... Delete word to left of cursor.
ctrl-DELETE .... ESC-DELETE .... ESC-X ... Delete word under cursor.
ctrl-U ......... ESC (MS-DOS only) ....... Delete entire line.
UpArrow ........................ ESC-k ... Retrieve previous command line.
DownArrow ...................... ESC-j ... Retrieve next command line.
TAB ...................................... Complete filename & cycle.
SHIFT-TAB ...................... ESC-TAB Complete filename & reverse cycle.
ctrl-L ................................... Complete filename, list all.


2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ plugins {
}

group 'cafe'
version '0.4.1'
version '0.4.2'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/compiler/ir/DeclarativeAssignmentStatement.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ public SymbolReference getSymbolReference() {
return symbolReference;
}

@Override
public String getName(){
return symbolReference.getName();
}
@Override
public List<CafeElement<?>> children() {
return Collections.singletonList(expressionStatement);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/compiler/ir/ExpressionStatement.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,7 @@ public static ExpressionStatement<?> of(Object expr) {

throw cantConvert("ExpressionStatement", expr);
}
public String getName(){
return null;
}
}
2 changes: 1 addition & 1 deletion src/main/java/compiler/ir/FunctionInvocation.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public ExpressionStatement<?> getReference() {
return ref;
}

public static FunctionInvocation create(Object ref, List<Object> args) {
public static FunctionInvocation create(Object ref, List<ExpressionStatement<?>> args) {
List<CafeElement<?>> arguments = new LinkedList<>();
for (Object arg : args) {
if (arg instanceof CafeElement<?>) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/compiler/ir/MethodInvocation.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ private MethodInvocation(ExpressionStatement<?> invokedUpon, List<CafeElement<?>
this.arguments = arguments;
}

public static MethodInvocation create(Object invokedOn, List<Object> args) {
public static MethodInvocation create(Object invokedOn, List<ExpressionStatement<?>> args) {
List<CafeElement<?>> arguments = new LinkedList<>();
for (Object arg : args) {
if (arg instanceof CafeElement) {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/compiler/ir/OperatorType.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public enum OperatorType {
TIMES("*"),
DIVIDE("/"),
MODULO("%"),
TILDE("~"),

POW("**"),
FLOOR("//"),
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/compiler/ir/PropertyAccess.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,16 @@

package compiler.ir;

import compiler.parser.Tokens;
import compiler.util.Position;

public class PropertyAccess extends ExpressionStatement<PropertyAccess> {
private String name;
private Tokens.Token firstToken;

public void setFirstToken(Tokens.Token firstToken) {
this.firstToken = firstToken;
}

private PropertyAccess(String name) {
this.name = name;
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/compiler/ir/ReferenceLookup.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,17 @@

package compiler.ir;

import compiler.parser.Tokens;
import compiler.util.Position;

public class ReferenceLookup extends ExpressionStatement<ReferenceLookup> {

private final String name;
private Tokens.Token firstToken;

public void setFirstToken(Tokens.Token firstToken) {
this.firstToken = firstToken;
}
public ReferenceLookup(String name) {
this.name = name;
}
Expand Down
21 changes: 10 additions & 11 deletions src/main/java/compiler/main/CafeCompiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@

import compiler.analyzer.SemanticsChecker;
import compiler.ast.Node;
import compiler.ast.Node.ProgramNode;
import compiler.gen.ASTToCafeIrVisitor;
import compiler.gen.ClosureReferenceVisitor;
import compiler.gen.JVMByteCodeGenVisitor;
import compiler.gen.SymbolReferenceAssignmentVisitor;
Expand Down Expand Up @@ -86,8 +84,8 @@ public CafeCompiler(String sourceFile) {
enum Phase {
INIT,
PARSE,
ANALYZE,
IR,
// ANALYZE,
GEN
}

Expand Down Expand Up @@ -115,16 +113,17 @@ public CompilerResult compile() {
fileManager.setSourceFile(sourceFile);
break;
case PARSE:
parser = parserFactory.newParser(ParserType.MAINPARSER, fileManager.asCharList());
programNode = parser.parse();
break;
case ANALYZE:
// System.out.println((char) 27 + "[33m" + "\nPrettyPrint");
// new PrettyPrinter().prettyPrint(programNode);
analyzer.visitProgram((ProgramNode) programNode);
parser = parserFactory.newParser(ParserType.IRParser, fileManager.asCharList());
module = parser.parse(moduleName);
System.out.println("Success " + module);
break;
// case ANALYZE:
//// System.out.println((char) 27 + "[33m" + "\nPrettyPrint");
//// new PrettyPrinter().prettyPrint(programNode);
//// analyzer.visitProgram((ProgramNode) programNode);
// break;
case IR:
module = new ASTToCafeIrVisitor().transform((ProgramNode) programNode, moduleName);
// module = new ASTToCafeIrVisitor().transform((ProgramNode) programNode, moduleName);
module.accept(new ClosureReferenceVisitor());
module.accept(new SymbolReferenceAssignmentVisitor());
break;
Expand Down
Loading