rustlr 0.3.96

LR Parser Generator with Advanced Options
Documentation
//CsLex file generated from grammar todd
#pragma warning disable 0414
using System;
using System.Text;

public class toddlexer<ET> : AbstractLexer<ET>  {
  Yylex lexer;
  ET shared_state;
  public toddlexer(string n) { lexer = new Yylex(new System.IO.StringReader(n)); }
  public toddlexer(System.IO.FileStream f) { lexer=new Yylex(f); }
  public RawToken next_lt() => lexer.yylex();
  public void set_shared(ET shared) {shared_state=shared;}
}//lexer class

%%
%namespace Fussless
%type RawToken
%eofval{
  return new RawToken("EOF","EOF",yyline,yychar);
%eofval}  
%{
private static int comment_count = 0;
private static int line_char = 0;
%}
%line
%char
%state COMMENT

ALPHA=[A-Za-z]
DIGIT=[0-9]
DIGITS=[0-9]+
FLOATS = [0-9]*\.[0-9]+([eE]([+-]?){DIGITS})?
HEXDIGITS=(0x)[0-9A-Fa-f]*
NEWLINE=((\r\n)|\n)
NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012]
WHITE_SPACE_CHAR=[{NEWLINE}\ \t\b\012]
STRING_TEXT=(\\\"|[^{NEWLINE}\"]|{WHITE_SPACE_CHAR}+)*
COMMENT_TEXT=([^*/\r\n]|[^*\r\n]"/"[^*\r\n]|[^/\r\n]"*"[^/\r\n]|"*"[^/\r\n]|"/"[^*\r\n])*
ALPHANUM=[A-Za-z_][A-Za-z0-9_]*

%% 
<YYINITIAL> {NEWLINE}+ { line_char = yychar+yytext().Length; return null; }
<YYINITIAL> {NONNEWLINE_WHITE_SPACE_CHAR}+ { return null; }
<YYINITIAL> "[" { return new RawToken("[",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "~" { return new RawToken("~",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "," { return new RawToken(",",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "]" { return new RawToken("]",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "print" { return new RawToken("print",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> ";" { return new RawToken(";",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> ">=" { return new RawToken(">=",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> ":" { return new RawToken(":",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "or" { return new RawToken("or",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> ")" { return new RawToken(")",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "}" { return new RawToken("}",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "do" { return new RawToken("do",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "and" { return new RawToken("and",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "-" { return new RawToken("-",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "+" { return new RawToken("+",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "void" { return new RawToken("void",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "eq" { return new RawToken("eq",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "in" { return new RawToken("in",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "%" { return new RawToken("%",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "^" { return new RawToken("^",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "/" { return new RawToken("/",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "(" { return new RawToken("(",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "while" { return new RawToken("while",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "define" { return new RawToken("define",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "{" { return new RawToken("{",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "if" { return new RawToken("if",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "string" { return new RawToken("string",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "lambda" { return new RawToken("lambda",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> ">" { return new RawToken(">",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "not" { return new RawToken("not",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "int" { return new RawToken("int",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "*" { return new RawToken("*",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "<" { return new RawToken("<",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "<=" { return new RawToken("<=",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "neq" { return new RawToken("neq",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "else" { return new RawToken("else",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "." { return new RawToken(".",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "float" { return new RawToken("float",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "then" { return new RawToken("then",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "let" { return new RawToken("let",yytext(),yyline,yychar-line_char,yychar); }
<YYINITIAL> "=" { return new RawToken("=",yytext(),yyline,yychar-line_char,yychar); }

<YYINITIAL> "//".*\n { line_char=yychar+yytext().Length; return null; }
<YYINITIAL,COMMENT> [(\r\n?|\n)] { line_char=yychar+yytext().Length; return null; }

<YYINITIAL> "/*" { yybegin(COMMENT); comment_count = comment_count + 1; return null;
}
<COMMENT> "/*" { comment_count = comment_count + 1; return null; }
<COMMENT> "*/" { 
	comment_count = comment_count - 1;
	if (comment_count == 0) {
            yybegin(YYINITIAL);
        }
        return null;
}

<COMMENT> {COMMENT_TEXT} { return null; }

<YYINITIAL> \"{STRING_TEXT}\" {
        return new RawToken("StrLit",yytext(),yyline,yychar-line_char,yychar);
}
<YYINITIAL> \"{STRING_TEXT} {
	String str =  yytext().Substring(1,yytext().Length);
	Utility.error(Utility.E_UNCLOSEDSTR);
        return new RawToken("Unclosed String",str,yyline,yychar-line_char,yychar);
}

<YYINITIAL> {DIGIT}+ { 
  return new RawToken("Num",yytext(),yyline,yychar-line_char,yychar);
}
<YYINITIAL> {HEXDIGITS} { 
return new RawToken("Hexnum",yytext(),yyline,yychar-line_char,yychar);  
}
<YYINITIAL> {FLOATS} { 
  return new RawToken("Float",yytext(),yyline,yychar-line_char,yychar);
}	
<YYINITIAL> ({ALPHA}|_)({ALPHA}|{DIGIT}|_)* {
        return new RawToken("Alphanum",yytext(),yyline,yychar-line_char,yychar);
}	
<YYINITIAL,COMMENT> . {
	StringBuilder sb = new StringBuilder("Illegal character: <");
	String s = yytext();
	for (int i = 0; i < s.Length; i++)
	  if (s[i] >= 32)
	    sb.Append(s[i]);
	  else
	    {
	    sb.Append("^");
	    sb.Append(Convert.ToChar(s[i]+'A'-1));
	    }
        sb.Append(">");
	Console.WriteLine(sb.ToString());	
	Utility.error(Utility.E_UNMATCHED);
        return null;
}