From b2aa457603b7c98cd2052c762b63811602151c92 Mon Sep 17 00:00:00 2001 From: unknown <user@mil8a-202a-05.mmcs.sfedu.ru> Date: Mon, 5 Sep 2022 13:36:49 +0300 Subject: [PATCH] first try --- Module1/Lexer.cs | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/Module1/Lexer.cs b/Module1/Lexer.cs index 4b11463..ce470f0 100644 --- a/Module1/Lexer.cs +++ b/Module1/Lexer.cs @@ -68,13 +68,18 @@ namespace Lexer public override bool Parse() { NextCh(); + int res = 0; // тут будем собирать число + int sign = 1; // знак числа if (currentCh == '+' || currentCh == '-') { + if (currentCh == '-') + sign = -1; NextCh(); } if (char.IsDigit(currentCh)) { + res = currentCh - '0'; NextCh(); } else @@ -84,6 +89,7 @@ namespace Lexer while (char.IsDigit(currentCh)) { + res = res * 10 + currentCh - '0'; NextCh(); } @@ -93,6 +99,8 @@ namespace Lexer Error(); } + this.parseResult = res * sign; + return true; } @@ -113,10 +121,40 @@ namespace Lexer builder = new StringBuilder(); } - public override bool Parse() - { - throw new NotImplementedException(); - } + public override bool Parse() + { + NextCh(); + + if (currentCharValue != -1) + { + Error(); + } + + var builder1 = new StringBuilder(); + + if (char.IsLetter(currentCh) || currentCh == '_') + { + builder1.Append(currentCh); + NextCh(); + } + else + Error(); + + while (char.IsDigit(currentCh) || char.IsLetter(currentCh) || currentCh == '_') + { + builder1.Append(currentCh); + NextCh(); + } + + if (currentCharValue != -1) + { + Error(); + } + + parseResult = builder1.ToString(); + + return true; + } } -- GitLab