mirror of
https://github.com/BorysLevytskyi/BitwiseCmd.git
synced 2026-01-19 18:32:36 +01:00
Implemented support of hex mode for expression parser
This commit is contained in:
@@ -1,32 +1,47 @@
|
||||
app.set('expression', function() {
|
||||
"use strict";
|
||||
var decNumber = "\d+";
|
||||
var hexNumber = "(?:\d|a|b|c|d|e|f)";
|
||||
|
||||
var twoOperandsRegex = /^(\d+)\s*(<<|>>|\||\&|\^)\s*(\d+)$/;
|
||||
var numbersList = /^((\d*)+\s?)+$/;
|
||||
var modes = {
|
||||
'dec': {
|
||||
expr: /^(\d+)\s*(<<|>>|\||\&|\^)\s*(\d+)$/,
|
||||
list: /^((\d*)+\s?)+$/
|
||||
},
|
||||
'hex': {
|
||||
expr: /^([\d,a-f]+)\s*(<<|>>|\||\&|\^)\s*([\d,a-f]+)$/,
|
||||
list: /^(([\d,a-f]*)+\s?)+$/
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
canParse: function(string) {
|
||||
return twoOperandsRegex.test(string) || numbersList.test(string);
|
||||
canParse: function(string, mode) {
|
||||
var regex = modes[mode || 'dec'];
|
||||
return regex.expr.test(string) || regex.list.test(string);
|
||||
},
|
||||
parse: function(string) {
|
||||
parse: function(string, mode) {
|
||||
mode = (mode || 'dec');
|
||||
|
||||
var trimmed = string.replace(/^\s+|\s+$/, '');
|
||||
var matches = twoOperandsRegex.exec(trimmed);
|
||||
var regex = modes[mode];
|
||||
var base = getBase(mode);
|
||||
var matches = regex.expr.exec(trimmed);
|
||||
|
||||
if(matches != null) {
|
||||
return createCalculableExpression(matches);
|
||||
return createCalculableExpression(matches, base);
|
||||
}
|
||||
|
||||
matches = numbersList.exec(string);
|
||||
matches = regex.list.exec(string);
|
||||
if(matches != null) {
|
||||
return createListOfNumbersExpression(string)
|
||||
return createListOfNumbersExpression(string, base)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function createCalculableExpression(matches) {
|
||||
function createCalculableExpression(matches, base) {
|
||||
|
||||
var o1 = parseInt(matches[1], 10);
|
||||
var o2 = parseInt(matches[3], 10);
|
||||
var o1 = parseInt(matches[1], base);
|
||||
var o2 = parseInt(matches[3], base);
|
||||
|
||||
var m = new app.models.BitwiseOperation();
|
||||
m.operand1 = o1;
|
||||
@@ -38,15 +53,23 @@ app.set('expression', function() {
|
||||
return m;
|
||||
}
|
||||
|
||||
function createListOfNumbersExpression(input) {
|
||||
function createListOfNumbersExpression(input, base) {
|
||||
var numbers = [];
|
||||
input.split(' ').forEach(function(n){
|
||||
if(n.trim().length > 0) {
|
||||
numbers.push(parseInt(n));
|
||||
numbers.push(parseInt(n, base));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return new app.models.BitwiseNumbers(numbers);
|
||||
}
|
||||
|
||||
function getBase(mode) {
|
||||
switch (mode){
|
||||
case 'bin': return 2;
|
||||
case 'hex': return 16;
|
||||
case 'dec': return 10;
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user