MCPcopy Create free account
hub / github.com/WheretIB/nullc / ParseNumber

Function ParseNumber

NULLC/Parser.cpp:55–106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53}
54
55bool ParseNumber(Lexeme** str)
56{
57 Lexeme *number = *str;
58
59 if(!ParseLexem(str, lex_number))
60 return false;
61
62 const char *start = number->pos;
63
64 if(/*start[0] == '0' && */start[1] == 'x') // hexadecimal
65 {
66 if(number->length == 2)
67 ThrowError(start+2, "ERROR: '0x' must be followed by number");
68 AddHexInteger(number->pos, number->pos+number->length);
69 return true;
70 }
71
72 bool isFP = false;
73 for(unsigned int i = 0; i < number->length; i++)
74 if(number->pos[i] == '.' || number->pos[i] == 'e')
75 isFP = true;
76
77 if(!isFP)
78 {
79 if((*str)->pos[0] == 'b')
80 {
81 (*str)++;
82 AddBinInteger(number->pos, number->pos+number->length);
83 return true;
84 }else if((*str)->pos[0] == 'l'){
85 (*str)++;
86 AddNumberNodeLong(number->pos, number->pos+number->length);
87 return true;
88 }else if(number->pos[0] == '0' && isDigit(number->pos[1])){
89 AddOctInteger(number->pos, number->pos+number->length);
90 return true;
91 }else{
92 AddNumberNodeInt(number->pos);
93 return true;
94 }
95 }else{
96 if((*str)->pos[0] == 'f')
97 {
98 (*str)++;
99 AddNumberNodeFloat(number->pos);
100 return true;
101 }else{
102 AddNumberNodeDouble(number->pos);
103 return true;
104 }
105 }
106}
107
108bool ParseArrayDefinition(Lexeme** str)
109{

Callers 1

ParseTerminalFunction · 0.85

Calls 10

ParseLexemFunction · 0.85
ThrowErrorFunction · 0.85
AddHexIntegerFunction · 0.85
AddBinIntegerFunction · 0.85
AddNumberNodeLongFunction · 0.85
AddOctIntegerFunction · 0.85
AddNumberNodeIntFunction · 0.85
AddNumberNodeFloatFunction · 0.85
AddNumberNodeDoubleFunction · 0.85
isDigitFunction · 0.70

Tested by

no test coverage detected