diff --git a/src/compiler/R5-Lexer.ref b/src/compiler/R5-Lexer.ref index 2138fd65..f2781fb9 100644 --- a/src/compiler/R5-Lexer.ref +++ b/src/compiler/R5-Lexer.ref @@ -95,46 +95,16 @@ IncCol { DoScan { t.Pos = (TkEOF t.Pos); - t.Pos () e.Lines = e.Lines>; - t.Pos (' ' e.Line) e.Lines = (e.Line) e.Lines>; t.Pos ('\t' e.Line) e.Lines = (e.Line) e.Lines>; t.Pos ('\r' e.Line) e.Lines = (e.Line) e.Lines>; - t.Pos ('$' e.Line) e.Lines = ; - - t.Pos (s.Digit e.Line) e.Lines - , : 'D0' s.Digit - = ; + t.Pos () e.Lines = e.Lines>; t.Pos (s.Var '.' e.Line) e.Lines , : True = ; - t.Pos ('/*' e.Line) e.Lines = ; - - (RowCol s.Line 1) ('*$CLASSIC') e.Lines - = (TkRefal5Mode (RowCol s.Line 1) Classic) - 1) e.Lines>; - - (RowCol s.Line 1) ('*$EXTENDED') e.Lines - = (TkRefal5Mode (RowCol s.Line 1) Extended) - 1) e.Lines>; - - (RowCol s.Line 1) ('*$CLASSIC;') e.Lines - = (TkRefal5Mode (RowCol s.Line 1) Classic) - 1) e.Lines>; - - (RowCol s.Line 1) ('*$EXTENDED;') e.Lines - = (TkRefal5Mode (RowCol s.Line 1) Extended) - 1) e.Lines>; - - (RowCol s.Line 1) ('*' e.Comment) e.Lines - = 1) e.Lines>; - - (RowCol s.Line 1) ('%%') e.Lines - = 1) e.Lines>; - t.Pos (s.StartIdent e.Line) e.Lines , : True = ; @@ -144,6 +114,9 @@ DoScan { = (s.TokType t.Pos) (e.Line) e.Lines>; + (RowCol s.Line 1) ('*' e.Comment) e.Lines + = 1) e.Lines>; + /* Предложение не избыточно, поскольку иначе в вызове «s» будет восприниматься как идентификатор, а точка за ним вызовет ошибку. @@ -157,15 +130,15 @@ DoScan { , : True = ; - t.Pos ('<' s.SugarName e.Line) e.Lines - , ('+Add') ('-Sub') ('*Mul') ('/Div') ('%Mod') ('?Residue') - : e.SugarNames-B (s.SugarName e.RealName) e.SugarNames-E - = (TkOpenCall t.Pos e.RealName) - (e.Line) e.Lines>; + t.Pos ('$' e.Line) e.Lines = ; - t.Pos ('<' e.Line) e.Lines - = (TkOpenCall t.Pos /* empty */) - (e.Line) e.Lines>; + t.Pos ('\'' e.Line) e.Lines + = (e.Line) e.Lines>; + + t.Pos ('/*' e.Line) e.Lines = ; + + t.Pos ('\"' e.Line) e.Lines + = () (e.Line) e.Lines>; t.Pos ('[' s.StartIdent e.Line) e.Lines , : 'L' s.Case s.StartIdent @@ -176,11 +149,38 @@ DoScan { (TkError t.Pos 'Expected function name after \'[\'') (e.Line) e.Lines>; - t.Pos ('\'' e.Line) e.Lines - = (e.Line) e.Lines>; + t.Pos (s.Digit e.Line) e.Lines + , : 'D0' s.Digit + = ; - t.Pos ('\"' e.Line) e.Lines - = () (e.Line) e.Lines>; + (RowCol s.Line 1) ('*$CLASSIC') e.Lines + = (TkRefal5Mode (RowCol s.Line 1) Classic) + 1) e.Lines>; + + (RowCol s.Line 1) ('*$EXTENDED') e.Lines + = (TkRefal5Mode (RowCol s.Line 1) Extended) + 1) e.Lines>; + + (RowCol s.Line 1) ('*$CLASSIC;') e.Lines + = (TkRefal5Mode (RowCol s.Line 1) Classic) + 1) e.Lines>; + + (RowCol s.Line 1) ('*$EXTENDED;') e.Lines + = (TkRefal5Mode (RowCol s.Line 1) Extended) + 1) e.Lines>; + + (RowCol s.Line 1) ('%%') e.Lines + = 1) e.Lines>; + + t.Pos ('<' s.SugarName e.Line) e.Lines + , ('+Add') ('-Sub') ('*Mul') ('/Div') ('%Mod') ('?Residue') + : e.SugarNames-B (s.SugarName e.RealName) e.SugarNames-E + = (TkOpenCall t.Pos e.RealName) + (e.Line) e.Lines>; + + t.Pos ('<' e.Line) e.Lines + = (TkOpenCall t.Pos /* empty */) + (e.Line) e.Lines>; t.Pos ('\\' e.LineWithEscapes) e.Lines , @@ -205,10 +205,10 @@ IsVarType { IsPunctuation { s.Punct , ('(' TkOpenBracket) (')' TkCloseBracket) + (';' TkSemicolon) ('=' TkAssign) ('>' TkCloseCall) ('{' TkOpenBlock) ('}' TkCloseBlock) - ('>' TkCloseCall) (']' TkCloseADT) - ('&' TkAmpersand) ('^' TkRedefinition) - (',' TkComma) (':' TkColon) ('=' TkAssign) (';' TkSemicolon) + (',' TkComma) (':' TkColon) ('^' TkRedefinition) + (']' TkCloseADT) ('&' TkAmpersand) : e.Types-B (s.Punct s.TokType) e.Types-E = s.TokType; @@ -293,8 +293,8 @@ IsIdentTail { s.Other , : { - 'D0' s.Other = True; - 'L' s.Case s.Other = True; + 'D0' s.Other^ = True; + 'L' s.Case s.Other^ = True; e.OtherType = False; }