Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Scanner
- {
- class MyScanner
- {
- static public String Scan(String input)
- {
- MyScanner scanner = new MyScanner();
- foreach (var character in input)
- scanner.step(character);
- scanner.step((char)0);
- return scanner.result();
- }
- private enum state
- {
- space = 0,
- num = 1,
- var = 2,
- add = 3,
- sub = 4,
- div = 5,
- mul = 6,
- bro = 7, // BROOOOOO!!!!!!
- brc = 8,
- end = 999
- }
- private state currentState;
- private String res;
- private String buffer;
- private MyScanner()
- {
- currentState = state.space;
- res = "";
- buffer = "";
- }
- private string result()
- {
- return res;
- }
- private void step(char character)
- {
- state nextState = calculateState(character);
- // no more {var|num} condition
- if (((currentState == state.var) && (nextState != state.var)) || ((currentState == state.num) && (nextState != state.num)))
- res += String.Format("{0} - ({1})\n", (int)currentState, buffer);
- switch (nextState)
- {
- case state.add:
- case state.sub:
- case state.div:
- case state.mul:
- case state.bro:
- case state.brc:
- res += String.Format("{0}\n", (int)nextState);
- break;
- case state.num:
- case state.var:
- if (currentState != nextState)
- buffer = character.ToString();
- else
- buffer += character;
- break;
- }
- currentState = nextState;
- }
- private state calculateState(char character)
- {
- if (Char.IsLetter(character))
- return state.var;
- if (Char.IsDigit(character))
- return (currentState == state.var) ? state.var : state.num;
- switch (character)
- {
- case '+': return state.add;
- case '-': return state.sub;
- case '*': return state.mul;
- case '/': return state.div;
- case '(': return state.bro;
- case ')': return state.brc;
- case ' ': case '\t': case '\n': return state.space;
- case (char)0: return state.end;
- }
- return state.end;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment