Skip to content
This repository has been archived by the owner on May 11, 2021. It is now read-only.

Commit

Permalink
better bnf and flex rules
Browse files Browse the repository at this point in the history
  • Loading branch information
hsz committed Jan 20, 2015
1 parent d20036a commit 0008402
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 104 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ com_crashlytics_export_strings.xml
### idea-latex

# Release package
idea-gitignore.jar
idea-latex.jar
resources/templates.list
build/
build.properties
Expand Down
3 changes: 2 additions & 1 deletion resources/bnf/Latex.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,11 @@ latexFile ::= item_ *
private item_ ::= !<<eof>> expr *

private expr ::= text_expr
| group_expr
| group_expr +
| argument_expr
| instruction_expr
| special_expr
| TEXT
private expr_inside ::= argument_expr
| group_expr +
| instruction_expr
Expand Down
58 changes: 26 additions & 32 deletions src/mobi/hsz/idea/latex/lexer/Latex.flex
Original file line number Diff line number Diff line change
Expand Up @@ -28,43 +28,37 @@ LINE_WS = [\ \t\f]
WHITE_SPACE = ({LINE_WS}|{EOL})+

INSTRUCTION = \\[a-zA-Z]+
ARGUMENT = [^\ \n\r\t\f]+
//ARGUMENT = [^\ \n\r\t\f]+
COMMENT = %.*
SPECIAL = [\S]
CRLF = [\s\r\n]+
ARGUMENT = [^\(\)\{\}\[\]\\,]
TEXT = [^\(\)\{\}\[\]\\\%\ \t\f\r\n]|"\\\%"|("\\"{SPECIAL})
SPECIAL = "$"|"&"|"#"|"_"|"~"|"^"|"\\"

%state IN_GROUP
%state IN_ARGUMENT

%%
<YYINITIAL> {
{WHITE_SPACE}+ { return WHITE_SPACE; }

"{" { yypushback(1); yybegin(IN_GROUP); }
"[" { yypushback(1); yybegin(IN_GROUP); }
"(" { yypushback(1); yybegin(IN_GROUP); }
// brackets
<YYINITIAL> "(" { yybegin(IN_ARGUMENT); return LPAREN; }
<YYINITIAL> ")" { return RPAREN; }
<YYINITIAL> "[" { yybegin(IN_ARGUMENT); return LBRACKET; }
<YYINITIAL> "]" { return RBRACKET; }
<YYINITIAL> "{" { yybegin(IN_ARGUMENT); return LBRACE; }
<YYINITIAL> "}" { return RBRACE; }

"," { return COMMA; }
":" { return COLON; }
"*" { return ASTERISK; }
"\\\\" { return LINE_BREAK; }

{INSTRUCTION} { return INSTRUCTION; }
{COMMENT} { return COMMENT; }
{SPECIAL} { return SPECIAL; }
{CRLF} { return CRLF; }

[^] { yybegin(YYINITIAL); return BAD_CHARACTER; }
} // <YYINITIAL>

<IN_GROUP> {
{WHITE_SPACE}+ { yybegin(YYINITIAL); return CRLF; }
<IN_ARGUMENT> {
{ARGUMENT}+ { return ARGUMENT; }
"," { return COMMA; }
. { yypushback(1); yybegin(YYINITIAL); }
}

"{" { return LBRACE; }
"[" { return LBRACKET; }
"(" { return LPAREN; }
"}" { return RBRACE; }
"]" { return RBRACKET; }
")" { return RPAREN; }
// special characters
<YYINITIAL> ":" { return COLON; }
<YYINITIAL> "*" { return ASTERISK; }
<YYINITIAL> "\\\\" { return LINE_BREAK; }
<YYINITIAL> {SPECIAL} { return SPECIAL; }

{ARGUMENT} { return ARGUMENT; }
}
<YYINITIAL> {WHITE_SPACE}+ { return WHITE_SPACE; }
<YYINITIAL> {INSTRUCTION} { return INSTRUCTION; }
<YYINITIAL> {COMMENT} { return COMMENT; }
<YYINITIAL> {TEXT}+ { return TEXT; }
133 changes: 63 additions & 70 deletions src/mobi/hsz/idea/latex/lexer/LatexLexer.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0008402

Please sign in to comment.