Если "input1" содержит только один символ из "neterminal", тогда в список рядом с правилом указывается тип правила "type1" (например, Z --> abc type1, A --> b type1), если "input2" содержит только один символ "neteminal", тогда это правило типа "type2" (например, A --> abcD type2) (формальные языки и грамматики).
var terminal = ['a', 'b', 'c'];
var term=document.getElementById('terminal').innerHTML = terminal;
var neterminal = ['D', 'A', 'Z', 'L'];
var neterm = document.getElementById('neterminal').innerHTML = neterminal;
var changeStringFromRules = [];
var changeStringToRules = [];
function pushRules(list){
var rules = "";
var w1 = document.getElementById('inputw1').value;
changeStringFromRules.push(w1);
var w2 = document.getElementById('inputw2').value;
changeStringToRules.push(w2);
var w = w1+'-->'+w2;
var li = document.createElement("li");
var rule = document.createTextNode(w);
li.appendChild(rule);
document.getElementById("list").appendChild(li);
}
<form>
<label>w1:</label><input id="inputw1" type="text"><label> --> w2:</label><input id="inputw2" type="text">
<input type="button" value="Add" onclick="pushRules()">
</form>
<h3>Rules:</h3>
<div class="container_rules">
<ui id="list"></ui>
</div>
// Проверка на единственное вхождение в строку str любого элемента массива|строки dict.
// Возвращает индекс элемента, или false (если вхождений нет, либо больше одного).
function singleOcrIdx(str, dict, caseSensitive = false) {
if (!str.length)
return false;
if (typeof dict === 'string')
dict = dict.split('');
if (!(dict instanceof Array) || !dict.length)
return false;
let flags = caseSensitive ? 'g' : 'gi',
idx = -1,
count, result;
result = !dict.some(function(v, i) {
count = (str.match(new RegExp(v + '', flags)) || []).length;
return ((count === 1) && (idx < 0)) ? (idx = i, false) :
(!count ? false : true);
});
return (result && (idx > -1)) ? idx : false;
}
// -----------------------------------------------
var terminal = ['a', 'b', 'c'],
neterminal = ['D', 'A', 'Z', 'L'],
changeStringFromRules = [],
changeStringToRules = [];
document.getElementById('terminal').textContent = terminal;
document.getElementById('neterminal').textContent = neterminal;
function pushRules(thisBtn) {
let frm = thisBtn.parentElement,
w1 = frm.inputw1.value,
w2 = frm.inputw2.value,
i1 = singleOcrIdx(w1, neterminal, true),
i2 = singleOcrIdx(w2, neterminal, true)
rt = (i2 !== false) ? 'type2' : ((i1 !== false) ? 'type1' : '');
changeStringFromRules.push(w1);
changeStringToRules.push(w2);
let li = document.createElement('li');
li.textContent = `${w1} --> ${w2} ${rt}`;
document.getElementById('list').appendChild(li);
}
body,
input {
font: 16px monospace;
}
input {
width: 100px;
}
#terminal,
#neterminal {
display: inline-block;
padding: 4px 8px;
margin: 16px 8px; margin-top: 0;
border: 1px dashed #ccc;
}
<span id="terminal"></span>
<span id="neterminal"></span>
<form>
<label>w1:</label><input name="inputw1" type="text"><label> --> w2:</label><input name="inputw2" type="text">
<input type="button" value="Add" onclick="pushRules(this)">
</form>
<hr>
<h3>Rules:</h3>
<div class="container_rules">
<ui id="list"></ui>
</div>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго дняЕсть таблица где каждая ячейка представленна отдельным компонентом
Как отправить данные на почту в вордрессе? По клику на странице выскакивает вот такое окно, после нажатия кнопки "Купить", не отправляет на почту...
Как сформировать массив из функции? Получаю данные ajax запросом и вывожу их в виде html: