Skip to content

Commit

Permalink
『関数』から始まる変数が定義できない問題を修正 #341
Browse files Browse the repository at this point in the history
  • Loading branch information
kujirahand committed Jan 5, 2019
1 parent 4458bb6 commit 87eb4c3
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/nako_lex_rules.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@ module.exports = {
{name: 'string', pattern: /^'/, cbParser: src => cbString('\'', '\'', src)},
{name: '」', pattern: /^/}, // error
{name: '』', pattern: /^/}, // error
{name: 'func', pattern: /^\{\}/},
{name: '{', pattern: /^\{/},
{name: '}', pattern: /^\}/, readJosi: true},
{name: ':', pattern: /^:/},
{name: '_eol', pattern: /^_\s*\n/},
{name: 'func', pattern: /^()/},
// 絵文字変数 = (絵文字)英数字*
{name: 'word', pattern: /^[\uD800-\uDBFF][\uDC00-\uDFFF][_a-zA-Z0-9]*/, readJosi: true},
{name: 'word', pattern: /^[\u1F60-\u1F6F][_a-zA-Z0-9]*/, readJosi: true}, // 絵文字
Expand Down
4 changes: 0 additions & 4 deletions src/nako_lexer.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,10 +247,6 @@ class NakoLexer {
src = src.substr(m[0].length)
continue
}
// 『関数(』の『関数』のtypeを『def_func』に書き換え
if (rule.name === '(' && 0 < this.result.length && this.result[this.result.length - 1].type === 'func')
this.result[this.result.length - 1].type = 'def_func'

// 特別なパーサを通すか?
if (rule.cbParser) {
const rp = rule.cbParser(src)
Expand Down
1 change: 1 addition & 0 deletions src/nako_reserved_words.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ module.exports = {
'エラー': 'エラー',
'それ': 'word',
'そう': 'word', // 「それ」のエイリアス
'関数': 'def_func' // 無名関数の定義用
}
25 changes: 14 additions & 11 deletions test/func_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@ const NakoCompiler = require('../src/nako3')

describe('func_test', () => {
const nako = new NakoCompiler()
// nako.debug = true
nako.debug = false
nako.debugLexer = false
const cmp = (code, res) => {
if (nako.debug) {
console.log('code=' + code)
}
if (nako.debug) console.log('code=' + code)
assert.equal(nako.runReset(code).log, res)
}
// --- test ---

it('簡単な関数定義', () => {
cmp('●HOGE()\n「あ」と表示\nここまで\nHOGE。', 'あ')
cmp('関数 HOGE()\n「あ」と表示\nここまで\nHOGE。', 'あ')
})
it('引数付き関数定義', () => {
cmp('●(Sの)表示処理とは\nSを表示\nここまで\n「殿」の表示処理。', '殿')
Expand All @@ -26,6 +27,7 @@ describe('func_test', () => {
})
it('三つの引数', () => {
cmp('●踊る(AとBがCを)\n「{A}:{B}:{C}」と表示\nここまで\n「姫」と「殿」が「タンゴ」を踊る。', '姫:殿:タンゴ')
cmp('●踊る(AとBとCが)\n「{A}:{B}:{C}」と表示\nここまで\n「姫」と「殿」と「息子」が踊る。', '姫:殿:息子')
})
it('戻るのテスト', () => {
cmp('●加算(AにBを)\n(A+B)で戻る\nここまで\n2に3を加算して表示。', '5')
Expand Down Expand Up @@ -88,21 +90,21 @@ describe('func_test', () => {
'加算処理(20,10)を表示。\n', '30\n30')
})
it('関数の参照渡し', () => {
cmp('●(関数fで)演算処理とは\n' +
cmp('●({関数}fで)演算処理とは\n' +
' それは、f()\n' +
'ここまで\n' +
'●二倍処理とは\n' +
' それは2\n' +
'ここまで\n' +
'二倍処理で演算処理して表示。', '2')
cmp('●(関数fでaを)演算処理とは\n' +
cmp('●({関数}fでaを)演算処理とは\n' +
' それは、f(a)\n' +
'ここまで\n' +
'●(aを)二倍処理とは\n' +
' それはa*2\n' +
'ここまで\n' +
'二倍処理で2を演算処理して表示。', '4')
cmp('●(関数fでaとbを)演算処理とは\n' +
cmp('●({関数}fでaとbを)演算処理とは\n' +
' それは、f(a,b)\n' +
'ここまで\n' +
'●(aとbを)二倍処理とは\n' +
Expand All @@ -117,6 +119,8 @@ describe('func_test', () => {
'F(3,5)を表示。\n', '8')
cmp('(関数(a,b)それは(a+b);ここまで)をFに代入。\n' +
'F(1,2)を表示。\n', '3')
cmp('(●(a,b)それは(a+b);ここまで)をFに代入。\n' +
'F(1,2)を表示。\n', '3')
})
it('暗黙的な無名関数「には」', () => {
cmp('●(Fを)処理した時\nF()を表示\nここまで\n' +
Expand All @@ -127,9 +131,8 @@ describe('func_test', () => {
it('暗黙的な無名関数「は〜」', () => {
cmp('●(Fを)処理した時\nF()を表示\nここまで\n' +
'処理した時は〜\nそれは「OK」\nここまで。', 'OK')
/*
cmp('●(fでaを)演算処理とは\nf(a)を表示\nここまで\n' +
'2を演算処理は~(a)\nそれはa*2\nここまで\n', '4')
*/
cmp('●(fでaを)演算処理とは\nf(a)を表示\nここまで\n' +
'2を演算処理は~(a)\nそれはa*2\nここまで\n', '4')
})

})
4 changes: 2 additions & 2 deletions test/plugin_system_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ describe('plugin_system_test', () => {
const nako = new NakoCompiler()
// nako.debug = true;
const cmp = (code, res) => {
if (nako.debug) {
if (nako.debug)
console.log('code=' + code)
}
assert.equal(nako.runReset(code).log, res)
}
const cmd = (code) => {
Expand Down

0 comments on commit 87eb4c3

Please sign in to comment.