Published
Edited
Jul 5, 2020
Insert cell
Insert cell
Insert cell
{
let element = document.getElementById("sheet1")
temp["sheet1"] = {}
element.innerHTML= ""
let mysheet = cdg({...{parentNode: element}, ...{'style': sheet_style}, ...sheet_settings}); //flatten(csettings, "")
mysheet.style.height = '100%';
mysheet.style.width = '100%';
mysheet.addEventListener('datachanged', function (e) {
//console.log(e.data)
for (let i in e.data) {
for (let j in e.data[i]) {
//console.log(i,j,String.fromCharCode(65+parseInt(j)) +(1+parseInt(i)), e.data[i][j])
let res
try {
res = taylor_js.call(e.data[i][j].slice(1, e.data[i][j].length), temp["sheet1"])
} catch(f) {
res = e.data[i][j]
}
temp["sheet1"][ String.fromCharCode(65+parseInt(j)) +(1+parseInt(i))] = res
}
}
})
mysheet.data = [["Expression","JS Result","EVM Result","","","","","","","","","","","","",""],
["(add 4 5)","=(add 4 5)", "$(add 4 5)"]
//,["x = 7 / 2","=x = 7 / 2"]
,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]
]
mysheet.addEventListener('afterrendercell', async function (e) {
//console.log(e.cell.value)
if (e.cell.value && e.cell.value[0] === "=") {
let res = taylor_js.call(e.cell.value.slice(1,e.cell.value.length), temp["sheet1"])
let loc = e.cell
loc.innerHTML = '<div style="border-top:6px solid #0aa;width:0px;height:0px;border-right:6px solid transparent;top:0px;right:0px" /><div style="font: 16px Roboto Condensed, sans-serif;margin-left:6px;top:-3px;">'
+ res
+ '</div>';
taylor_web3.call(e.cell.value.slice(1,e.cell.value.length), temp["sheet1"]).then(x=>{
console.log("x",x, res, x == res)
loc.innerHTML = '<div style="border-top:6px solid #af0;width:0px;height:0px;border-right:6px solid transparent;top:0px;right:0px" /><div style="font: 16px Roboto Condensed, sans-serif;margin-left:6px;top:-3px;">'
+ res
+ '</div>';
})
}
if (e.cell.value && e.cell.value[0] === "$") {
//let self = e.cell
let res = taylor_js.call(e.cell.value.slice(1,e.cell.value.length), temp["sheet1"]) // taylor_web3.call(e.cell.value.slice(1,e.cell.value.length), temp["sheet1"])
console.log(res)
e.cell.innerHTML = '<div style="border-top:6px solid #af0;width:0px;height:0px;border-right:6px solid transparent;top:0px; right:0px; position:relative;" /><div style="font: 16px Roboto Condensed, sans-serif;margin-left:6px;top:-3px;">'
+ res
+ '</div>';
// taylor_web3.call(e.cell.value.slice(1,e.cell.value.length), temp["sheet1"]).then((x) => {
// self.innerHTML = '<div style="border-top:6px solid #aa0;width:0px;height:0px;border-right:6px solid transparent;top:0px;right:0px" /><div style="font: 16px Roboto Condensed, sans-serif;margin-left:6px;top:-3px;">'
// + x
// + '</div>';
// //self.draw()
//console.log(331133, e.cell.value.slice(1,e.cell.value.length), await taylor_web3.call(e.cell.value.slice(1,e.cell.value.length), temp["sheet1"]))
// })
//console.log(3333)
}
});
mysheet.addEventListener('endedit', function (e) { // datachanged
//console.log(e, e.cell.data)
temp["sheet1"][e.cell.header.title+(e.cell.rowIndex + 1)] = e.value
});
}
Insert cell
function id(x) { return x[0]; }
Insert cell
Insert cell
temp = ({})
Insert cell
code = '(add 11 (add 13 12))'
Insert cell
parser.feed("add (12 , 12)").results[0].v
Insert cell
parse3(`add
"5"
add
12
3
`.split("\n"),0," ")
Insert cell
function parse3(astr, level, slevel = " ", paran = ""){
let ans = ""
if (!Array.isArray(astr)){
return astr
}
if (astr.length == 1) {
return astr[0] + paran
}
let s2level = slevel.repeat(level)
console.log(astr, s2level)
let here = astr[0][s2level.length]
console.log("here", here, here.search(/[1-9]/g) === 0)
if ( here == "\"" || here.search(/[1-9]/g) === 0) {
console.log(astr[0], "=")
ans = "\n"+astr[0]
level =level-1
//return ans
} else {
if (astr[0].search(s2level) === 0) { // && astr[0][s2level.length] != slevel
ans = "\n"+s2level+ "("+ astr[0].substr(s2level.length)
paran = paran +")"
} else {
while (level > 0) {
if (astr[0].search(s2level) === 0) { // && astr[0][s2level.length] != slevel
ans = "\n"+ans + "("+ astr[0].substr(s2level.length)
}
level = level - 1
paran = paran.substr(1)
s2level = slevel.repeat(level)
}
}
}

ans = ans + parse3(astr.slice(1, astr.length), level+1, slevel, paran)
return ans
}
Insert cell
function show2(scode, level) {
let ans = ""
let ast = taylor.malBackend.READ(scode,{})
function fromAst(ast, level, str = "") {
if (Array.isArray(ast)) {
str = "\n" + " ".repeat(level)+ast[0].value
for (let i=1; i<ast.length; i++) {
console.log(ast[i])
str = str + fromAst(ast[i], level+1, str)
}
} else {
str = "\n" + " ".repeat(level)+ast
}
return str
}
console.log(ast)
return fromAst(ast, level)
}
Insert cell
show2(code, 0)
Insert cell
parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar), { keepHistory: false });
Insert cell
function evaluate(lang, code) {
let ans = ""
switch (lang) {
case "evm":
ans = taylor_web3.call(code)
case "js":
ans = taylor_js.call(code)
}
}
Insert cell
taylor_js.call(code)
Insert cell
console.log(taylor_web3.call(code).then((x)=>{console.log(x);}))
Insert cell
taylor_js = taylor.malBackend.getBackend()
Insert cell
Insert cell
Insert cell
taylor_web3 = await getTaylorWeb3(provider.provider, provider.signer)
Insert cell
provider = getProvider()
Insert cell
async function getProvider() {
await connect();
if (window.web3 && window.web3.currentProvider) {
// eslint-disable-next-line
const provider = new ethers.providers.Web3Provider(web3.currentProvider);
// const provider = new ethers.providers.JsonRpcProvider('HTTP://192.168.1.140:8545');
const signer = provider.getSigner(0);
return { provider, signer };
}
return {};
}
Insert cell
async function connect() {
if (window.ethereum) {
try {
// eslint-disable-next-line
await ethereum.enable();
} catch (error) {
console.log('User rejected dApp connection');
}
}
};
Insert cell
Insert cell
async function getTaylorWeb3 (provider, signer) {
const network = await provider.getNetwork()
return taylor.getTaylor(provider, signer)(DEPLOYMENTS[network.chainId].contract1)
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
nearley = require('https://bundle.run/nearley@2.19.4')
Insert cell
html`
<link href="https://fonts.googleapis.com/css?family=Roboto+Condensed&display=swap" rel="stylesheet">
`
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more