bcdice 3.0.0.pre.alpha.2 → 3.0.0.pre.rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
- data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
- data/i18n/MagicaLogia/ko_kr.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +37 -1
- data/i18n/StratoShout/ja_jp.yml +4 -4
- data/i18n/StratoShout/ko_kr.yml +4 -4
- data/lib/bcdice.rb +2 -1
- data/lib/bcdice/arithmetic.rb +22 -0
- data/lib/bcdice/arithmetic/node.rb +112 -43
- data/lib/bcdice/arithmetic/parser.rb +240 -0
- data/lib/bcdice/arithmetic_evaluator.rb +5 -156
- data/lib/bcdice/base.rb +8 -1
- data/lib/bcdice/command/lexer.rb +57 -0
- data/lib/bcdice/command/parsed.rb +65 -0
- data/lib/bcdice/command/parser.rb +489 -0
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/add_dice/node.rb +142 -69
- data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
- data/lib/bcdice/common_command/barabara_dice/node.rb +7 -1
- data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
- data/lib/bcdice/common_command/calc/node.rb +10 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/d66_dice.rb +3 -1
- data/lib/bcdice/common_command/lexer.rb +2 -1
- data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
- data/lib/bcdice/common_command/version.rb +1 -1
- data/lib/bcdice/deprecated/checker.rb +6 -6
- data/lib/bcdice/dice_table.rb +1 -0
- data/lib/bcdice/dice_table/d66_parity_table.rb +34 -0
- data/lib/bcdice/game_system.rb +3 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/AlchemiaStruggle.rb +312 -0
- data/lib/bcdice/game_system/Alshard.rb +0 -1
- data/lib/bcdice/game_system/Amadeus.rb +1 -1
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
- data/lib/bcdice/game_system/BadLife.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -10
- data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
- data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
- data/lib/bcdice/game_system/BlindMythos.rb +12 -9
- data/lib/bcdice/game_system/BloodCrusade.rb +12 -38
- data/lib/bcdice/game_system/BloodMoon.rb +2 -2
- data/lib/bcdice/game_system/CardRanker.rb +23 -63
- data/lib/bcdice/game_system/ChaosFlare.rb +3 -3
- data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
- data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th.rb +2 -2
- data/lib/bcdice/game_system/CthulhuTech.rb +0 -1
- data/lib/bcdice/game_system/DarkBlaze.rb +4 -4
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +60 -93
- data/lib/bcdice/game_system/EmbryoMachine.rb +5 -5
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +0 -1
- data/lib/bcdice/game_system/FilledWith.rb +3 -3
- data/lib/bcdice/game_system/FullMetalPanic.rb +0 -1
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/Garako.rb +3 -2
- data/lib/bcdice/game_system/GardenOrder.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +3 -3
- data/lib/bcdice/game_system/Gundog.rb +1 -1
- data/lib/bcdice/game_system/GundogRevised.rb +3 -3
- data/lib/bcdice/game_system/GundogZero.rb +2 -2
- data/lib/bcdice/game_system/GurpsFW.rb +2 -5
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
- data/lib/bcdice/game_system/JuinKansen.rb +251 -0
- data/lib/bcdice/game_system/KanColle.rb +17 -166
- data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
- data/lib/bcdice/game_system/LogHorizon.rb +8 -8
- data/lib/bcdice/game_system/LostRoyal.rb +1 -3
- data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
- data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +1 -1
- data/lib/bcdice/game_system/MeikyuKingdom.rb +1 -1
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +4 -4
- data/lib/bcdice/game_system/MetallicGuardian.rb +0 -1
- data/lib/bcdice/game_system/MonotoneMuseum.rb +3 -2
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
- data/lib/bcdice/game_system/NSSQ.rb +2 -2
- data/lib/bcdice/game_system/Nechronica.rb +3 -3
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
- data/lib/bcdice/game_system/NinjaSlayer.rb +26 -28
- data/lib/bcdice/game_system/OracleEngine.rb +13 -17
- data/lib/bcdice/game_system/Paradiso.rb +2 -2
- data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
- data/lib/bcdice/game_system/Raisondetre.rb +1 -1
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +2 -3
- data/lib/bcdice/game_system/RokumonSekai2.rb +2 -2
- data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +0 -5
- data/lib/bcdice/game_system/SamsaraBallad.rb +4 -3
- data/lib/bcdice/game_system/Satasupe.rb +22 -14
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
- data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
- data/lib/bcdice/game_system/StellarKnights.rb +1 -3
- data/lib/bcdice/game_system/SterileLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- data/lib/bcdice/game_system/StratoShout.rb +10 -36
- data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
- data/lib/bcdice/game_system/SwordWorld.rb +5 -5
- data/lib/bcdice/game_system/SwordWorld2_5.rb +1 -1
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +4 -7
- data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +6 -6
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +1 -1
- data/lib/bcdice/game_system/Warhammer.rb +6 -6
- data/lib/bcdice/game_system/Warhammer4.rb +9 -12
- data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
- data/lib/bcdice/normalize.rb +1 -1
- data/lib/bcdice/preprocessor.rb +12 -8
- data/lib/bcdice/randomizer.rb +12 -0
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +2 -0
- data/lib/bcdice/user_defined_dice_table.rb +26 -15
- data/lib/bcdice/version.rb +1 -1
- metadata +14 -25
- data/.editorconfig +0 -21
- data/.github/.codecov.yaml +0 -10
- data/.github/workflows/coverage.yaml +0 -21
- data/.github/workflows/lint.yaml +0 -13
- data/.github/workflows/test.yml +0 -20
- data/.gitignore +0 -14
- data/.rubocop.yml +0 -108
- data/.rubocop_todo.yml +0 -114
- data/Gemfile +0 -14
- data/ROADMAP.md +0 -30
- data/Rakefile +0 -152
- data/bcdice.gemspec +0 -29
- data/bin/repl.rb +0 -21
- data/docs/README.txt +0 -2028
- data/docs/dicebot_sort_key.md +0 -72
- data/docs/how_to_make_dicebot.md +0 -453
- data/lib/bcdice/command_parser.rb +0 -242
- data/lib/bcdice/common_command/add_dice/parser.y +0 -153
- data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
- data/lib/bcdice/common_command/calc/parser.y +0 -79
- data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
- data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
|
@@ -522,4 +522,40 @@ ja_jp:
|
|
|
522
522
|
- |-
|
|
523
523
|
【炎上】
|
|
524
524
|
館が炎上をはじめる。ここに留まっていれば、問答無用で死ぬことになるだろう。
|
|
525
|
-
|
|
525
|
+
OT3:
|
|
526
|
+
name: 兆候表ver3.0
|
|
527
|
+
type: 2D6
|
|
528
|
+
items:
|
|
529
|
+
- |-
|
|
530
|
+
【暴走衝動】
|
|
531
|
+
心の奥から抗いがたい衝動が湧き上がってくる。目の前の生命を引き裂きたい――あなたの意に反して、その腕が振り上げられた。 至近距離にいるキャラクターすべてに、即座に〈縫〉2D6点のダメージを与える。 戦闘中でない場合、どこまでを至近距離とするかはGMが判断すること。ダメージを与える対象がいない場合、この演目中あなたの行動値を+1する。
|
|
532
|
+
- |-
|
|
533
|
+
【ひび割れ】
|
|
534
|
+
激痛が走り、あなたの肌が音を立ててひび割れた。あなたは [2D6+演者レベル]の【HP】を失う。
|
|
535
|
+
- |-
|
|
536
|
+
【漆黒の羽】
|
|
537
|
+
あなたの背に怖気立つ痒みが走り、漆黒の羽が芽吹きはじめた。この演目中、あなたはマイナーアクションで剥離値を1点上昇させることで飛行状態となる(解除にはマイナーアクションを使用)。
|
|
538
|
+
- |-
|
|
539
|
+
【信念の喪失】
|
|
540
|
+
あなたが何者であったのか、暖かな過去が、辛い記憶が虚無の彼方へと消えていく。あなたは[出自]を喪失する。特徴は失われない。
|
|
541
|
+
- |-
|
|
542
|
+
【色褪せる体躯】
|
|
543
|
+
あなたの髪が目が、色あせ虚ろに染まっていく。その身が虚無へと近づいている証だ……。この演目中、あなたの【縫製】判定の達成値に+1する。
|
|
544
|
+
- |-
|
|
545
|
+
【現在の喪失】
|
|
546
|
+
あなたの心からかけがえのない“誰か”の存在が、あるいはその人物に抱いていた大切な想いが消えていく。あなたはパートナーをひとつ喪失する。
|
|
547
|
+
- |-
|
|
548
|
+
【影なし】
|
|
549
|
+
あなたの足元から影が喪われていく。透明化だ……。誰かに気づかれたら最後、異形と糾弾されるだろう。この演目中、あなたの【社会】判定の達成値に-1する。
|
|
550
|
+
- |-
|
|
551
|
+
【心喰らい】
|
|
552
|
+
あなたの心にぽっかりと空虚が開いた。失われたのは感情か信念か……いずれにせよ、消え去ったそれが何であったかを思い出すことはできないだろう。あなたは2D6点の【MP】を失う。
|
|
553
|
+
- |-
|
|
554
|
+
【獣のごとき】
|
|
555
|
+
漆黒の獣毛や曇白の鱗があなたの手足を浸食していく。周囲に隠し通さねば、化け物と追われることは避けられないだろう。この演目中、あなたの【社会】判定の達成値に-2する。
|
|
556
|
+
- |-
|
|
557
|
+
【理由の喪失】
|
|
558
|
+
あなたの人生を変えた大切な記憶が喪われていく。なぜ紡ぎ手となったのか、その理由を失ってなお、あなたはこの場に立ち続けている……。あなたは[境遇]を消失する。特徴は失われない。
|
|
559
|
+
- |-
|
|
560
|
+
【虚無のしたたり】
|
|
561
|
+
あなたの身体から漆黒の汗や曇白の霧がにじみ出る。この演目中、「対象:自身」を除くあなたが行なう特技の対象すべてに、本来の効果に加え邪毒1を与える。
|
data/i18n/StratoShout/ja_jp.yml
CHANGED
|
@@ -2,16 +2,16 @@ ja_jp:
|
|
|
2
2
|
StratoShout:
|
|
3
3
|
critical: スペシャル! (【コンディション】+2)
|
|
4
4
|
fumble: "ファンブル! (ドラマフェイズ: 【ディスコード】+2 / ライブフェイズ: 【コンディション】-2)"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
table:
|
|
5
|
+
RTT:
|
|
6
|
+
items:
|
|
8
7
|
- ['主義', ['過去', '恋人', '仲間', '家族', '自分', '今', '理由', '夢', '世界', '幸せ', '未来']]
|
|
9
8
|
- ['身体', ['頭', '目', '耳', '口', '胸', '心臓', '血', '背中', '手', 'XXX', '足']]
|
|
10
9
|
- ['モチーフ', ['闇', '武器', '魔法', '獣', '町', '歌', '食べ物', '花', '空', '季節', '光']]
|
|
11
10
|
- ['エモーション', ['悲しい', '怒り', '不安', '恐怖', '驚き', '高鳴り', '情熱', '確信', '期待', '楽しい', '喜び']]
|
|
12
11
|
- ['行動', ['泣く', '忘れる', '消す', '壊す', '叫ぶ', '歌う', '踊る', '走る', '鳴らす', '呼ぶ', '笑う']]
|
|
13
12
|
- ['逆境', ['死', '喪失', '暴力', '孤独', '後悔', '実力', '退屈', '本性', '富', '恋愛', '生']]
|
|
14
|
-
|
|
13
|
+
rtt_format: '特技リスト > [%<category_dice>d,%<row_dice>d] > %<text>s'
|
|
14
|
+
rttn_format: '特技リスト(%<category_name>s分野) > [%<row_dice>d] > %<text>s'
|
|
15
15
|
table:
|
|
16
16
|
VOT:
|
|
17
17
|
name: ボーカルトラブル表(P167)
|
data/i18n/StratoShout/ko_kr.yml
CHANGED
|
@@ -2,16 +2,16 @@ ko_kr:
|
|
|
2
2
|
StratoShout:
|
|
3
3
|
critical: 스페셜! (【컨디션】+2)
|
|
4
4
|
fumble: "펌블! (드라마페이즈: 【디스코드】+2 / 라이브페이즈: 【컨디션】-2)"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
table:
|
|
5
|
+
RTT:
|
|
6
|
+
items:
|
|
8
7
|
- ['주의', ['과거', '연인', '동료', '가족', '자신', '지금', '이유', '꿈', '세계', '행복', '미래']]
|
|
9
8
|
- ['신체', ['머리', '눈', '귀', '입', '가슴', '심장', '피', '등', '손', 'XXX', '발']]
|
|
10
9
|
- ['모티브', ['어둠', '무기', '짐승', '기계', '거리', '노래', '창', '꽃', '하늘', '계절', '빛']]
|
|
11
10
|
- ['정서', ['슬픔', '분노', '불안', '공포', '놀라움', '설렘', '정열', '확신', '기대', '즐거움', '기쁨']]
|
|
12
11
|
- ['행동', ['우는', '잊는', '지우는', '부수는', '외치는', '노래하는', '춤추는', '달리는', '만나는', '부르는', '웃는']]
|
|
13
12
|
- ['역경', ['죽음', '상실', '폭력', '고독', '후회', '실력', '싫증', '본성', '부', '연애', '삶']]
|
|
14
|
-
|
|
13
|
+
rtt_format: '특기 리스트 > [%<category_dice>d,%<row_dice>d] > %<text>s'
|
|
14
|
+
rttn_format: '특기 리스트(%<category_name>s분야) > [%<row_dice>d] > %<text>s'
|
|
15
15
|
table:
|
|
16
16
|
VOT:
|
|
17
17
|
name: 보컬 트러블표(P167)
|
data/lib/bcdice.rb
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/arithmetic/node"
|
|
4
|
+
require "bcdice/arithmetic/parser"
|
|
5
|
+
|
|
6
|
+
module BCDice
|
|
7
|
+
module Arithmetic
|
|
8
|
+
class << self
|
|
9
|
+
# 四則演算を評価する
|
|
10
|
+
#
|
|
11
|
+
# @param source [String]
|
|
12
|
+
# @param round_type [Symbol]
|
|
13
|
+
# @return [Integer, nil] パースできない式やゼロ除算が発生した場合にはnilを返す
|
|
14
|
+
def eval(source, round_type)
|
|
15
|
+
node = Parser.parse(source)
|
|
16
|
+
node&.eval(round_type)
|
|
17
|
+
rescue ZeroDivisionError
|
|
18
|
+
nil
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module BCDice
|
|
2
4
|
module Arithmetic
|
|
3
5
|
module Node
|
|
@@ -9,34 +11,69 @@ module BCDice
|
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
def eval(round_type)
|
|
12
|
-
l = lhs.eval(round_type)
|
|
13
|
-
r = rhs.eval(round_type)
|
|
14
|
-
l.send(op, r)
|
|
14
|
+
l = @lhs.eval(round_type)
|
|
15
|
+
r = @rhs.eval(round_type)
|
|
16
|
+
l.send(@op, r)
|
|
15
17
|
end
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
# @return [String] メッセージへの出力
|
|
20
|
+
def output
|
|
21
|
+
"#{@lhs.output}#{@op}#{@rhs.output}"
|
|
19
22
|
end
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
# @return [String] ノードのS式
|
|
25
|
+
def s_exp
|
|
26
|
+
"(#{op_for_s_exp} #{@lhs.s_exp} #{@rhs.s_exp})"
|
|
27
|
+
end
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
# @return [String] S式で使う演算子の表現
|
|
30
|
+
def op_for_s_exp
|
|
31
|
+
@op
|
|
32
|
+
end
|
|
24
33
|
end
|
|
25
34
|
|
|
26
35
|
# 除算ノードの基底クラス
|
|
36
|
+
#
|
|
37
|
+
# 定数 +ROUNDING_METHOD+ で端数処理方法を示す記号
|
|
38
|
+
# ( +'U'+, +'R'+, +''+ ) を定義すること。
|
|
39
|
+
# また、除算および端数処理を行う +divide_and_round+ メソッドを実装すること。
|
|
27
40
|
class DivideBase < BinaryOp
|
|
41
|
+
# ノードを初期化する
|
|
42
|
+
# @param [Object] lhs 左のオペランドのノード
|
|
43
|
+
# @param [Object] rhs 右のオペランドのノード
|
|
28
44
|
def initialize(lhs, rhs)
|
|
29
45
|
super(lhs, :/, rhs)
|
|
30
46
|
end
|
|
31
47
|
|
|
32
48
|
def eval(round_type)
|
|
33
|
-
l = lhs.eval(round_type)
|
|
34
|
-
r = rhs.eval(round_type)
|
|
49
|
+
l = @lhs.eval(round_type)
|
|
50
|
+
r = @rhs.eval(round_type)
|
|
35
51
|
divide_and_round(l, r, round_type)
|
|
36
52
|
end
|
|
37
53
|
|
|
54
|
+
# メッセージへの出力を返す
|
|
55
|
+
#
|
|
56
|
+
# 通常の結果の末尾に、端数処理方法を示す記号を付加する。
|
|
57
|
+
#
|
|
58
|
+
# @return [String]
|
|
59
|
+
def output
|
|
60
|
+
"#{super}#{rounding_method}"
|
|
61
|
+
end
|
|
62
|
+
|
|
38
63
|
private
|
|
39
64
|
|
|
65
|
+
# 端数処理方法を示す記号を返す
|
|
66
|
+
# @return [String]
|
|
67
|
+
def rounding_method
|
|
68
|
+
self.class::ROUNDING_METHOD
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# S式で使う演算子の表現を返す
|
|
72
|
+
# @return [String]
|
|
73
|
+
def op_for_s_exp
|
|
74
|
+
"#{@op}#{rounding_method}"
|
|
75
|
+
end
|
|
76
|
+
|
|
40
77
|
# 除算および端数処理を行う
|
|
41
78
|
# @param [Integer] _dividend 被除数
|
|
42
79
|
# @param [Integer] _divisor 除数(0以外)
|
|
@@ -47,13 +84,36 @@ module BCDice
|
|
|
47
84
|
end
|
|
48
85
|
end
|
|
49
86
|
|
|
50
|
-
#
|
|
51
|
-
class
|
|
87
|
+
# 除算(端数処理はゲームシステム依存)のノード
|
|
88
|
+
class DivideWithGameSystemDefault < DivideBase
|
|
89
|
+
# 端数処理方法を示す記号
|
|
90
|
+
ROUNDING_METHOD = ""
|
|
91
|
+
|
|
52
92
|
private
|
|
53
93
|
|
|
54
|
-
|
|
55
|
-
|
|
94
|
+
# 除算および端数処理を行う
|
|
95
|
+
# @param [Integer] dividend 被除数
|
|
96
|
+
# @param [Integer] divisor 除数(0以外)
|
|
97
|
+
# @param [Symbol] round_type ゲームシステムの端数処理設定
|
|
98
|
+
# @return [Integer]
|
|
99
|
+
def divide_and_round(dividend, divisor, round_type)
|
|
100
|
+
case round_type
|
|
101
|
+
when RoundType::CEIL
|
|
102
|
+
(dividend.to_f / divisor).ceil
|
|
103
|
+
when RoundType::ROUND
|
|
104
|
+
(dividend.to_f / divisor).round
|
|
105
|
+
else # RoundType::FLOOR
|
|
106
|
+
dividend / divisor
|
|
107
|
+
end
|
|
56
108
|
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# 除算(切り上げ)のノード
|
|
112
|
+
class DivideWithCeil < DivideBase
|
|
113
|
+
# 端数処理方法を示す記号
|
|
114
|
+
ROUNDING_METHOD = "C"
|
|
115
|
+
|
|
116
|
+
private
|
|
57
117
|
|
|
58
118
|
# 除算および端数処理を行う
|
|
59
119
|
# @param [Integer] dividend 被除数
|
|
@@ -67,11 +127,10 @@ module BCDice
|
|
|
67
127
|
|
|
68
128
|
# 除算(四捨五入)のノード
|
|
69
129
|
class DivideWithRound < DivideBase
|
|
70
|
-
|
|
130
|
+
# 端数処理方法を示す記号
|
|
131
|
+
ROUNDING_METHOD = "R"
|
|
71
132
|
|
|
72
|
-
|
|
73
|
-
"/R"
|
|
74
|
-
end
|
|
133
|
+
private
|
|
75
134
|
|
|
76
135
|
# 除算および端数処理を行う
|
|
77
136
|
# @param [Integer] dividend 被除数
|
|
@@ -85,11 +144,10 @@ module BCDice
|
|
|
85
144
|
|
|
86
145
|
# 除算(切り捨て)のノード
|
|
87
146
|
class DivideWithFloor < DivideBase
|
|
88
|
-
|
|
147
|
+
# 端数処理方法を示す記号
|
|
148
|
+
ROUNDING_METHOD = "F"
|
|
89
149
|
|
|
90
|
-
|
|
91
|
-
"/F"
|
|
92
|
-
end
|
|
150
|
+
private
|
|
93
151
|
|
|
94
152
|
# 除算および端数処理を行う
|
|
95
153
|
# @param [Integer] dividend 被除数
|
|
@@ -101,27 +159,6 @@ module BCDice
|
|
|
101
159
|
end
|
|
102
160
|
end
|
|
103
161
|
|
|
104
|
-
# 除算(端数処理はゲームシステム依存)のノード
|
|
105
|
-
class DivideWithGameSystemDefault < DivideBase
|
|
106
|
-
private
|
|
107
|
-
|
|
108
|
-
# 除算および端数処理を行う
|
|
109
|
-
# @param [Integer] dividend 被除数
|
|
110
|
-
# @param [Integer] divisor 除数(0以外)
|
|
111
|
-
# @param [Symbol] round_type ゲームシステムの端数処理設定
|
|
112
|
-
# @return [Integer]
|
|
113
|
-
def divide_and_round(dividend, divisor, round_type)
|
|
114
|
-
case round_type
|
|
115
|
-
when RoundType::CEIL
|
|
116
|
-
(dividend.to_f / divisor).ceil
|
|
117
|
-
when RoundType::ROUND
|
|
118
|
-
(dividend.to_f / divisor).round
|
|
119
|
-
else # RoundType::FLOOR
|
|
120
|
-
dividend / divisor
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
162
|
class Negative
|
|
126
163
|
def initialize(body)
|
|
127
164
|
@body = body
|
|
@@ -131,11 +168,40 @@ module BCDice
|
|
|
131
168
|
-@body.eval(round_type)
|
|
132
169
|
end
|
|
133
170
|
|
|
171
|
+
# @return [String] メッセージへの出力
|
|
172
|
+
def output
|
|
173
|
+
"-#{@body.output}"
|
|
174
|
+
end
|
|
175
|
+
|
|
134
176
|
def s_exp
|
|
135
177
|
"(- #{@body.s_exp})"
|
|
136
178
|
end
|
|
137
179
|
end
|
|
138
180
|
|
|
181
|
+
# カッコで式をまとめるノード
|
|
182
|
+
class Parenthesis
|
|
183
|
+
# @param expr [Object] カッコ内のノード
|
|
184
|
+
def initialize(expr)
|
|
185
|
+
@expr = expr
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# @param round_type [Symbol] 端数処理方法
|
|
189
|
+
# @return [Integer] 評価結果
|
|
190
|
+
def eval(round_type)
|
|
191
|
+
@expr.eval(round_type)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# @return [String] メッセージへの出力
|
|
195
|
+
def output
|
|
196
|
+
"(#{@expr.output})"
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# @return [String] S式
|
|
200
|
+
def s_exp
|
|
201
|
+
"(Parenthesis #{@expr.s_exp})"
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
139
205
|
class Number
|
|
140
206
|
def initialize(value)
|
|
141
207
|
@value = value
|
|
@@ -145,9 +211,12 @@ module BCDice
|
|
|
145
211
|
@value
|
|
146
212
|
end
|
|
147
213
|
|
|
148
|
-
|
|
214
|
+
# @return [String] メッセージへの出力
|
|
215
|
+
def output
|
|
149
216
|
@value.to_s
|
|
150
217
|
end
|
|
218
|
+
|
|
219
|
+
alias s_exp output
|
|
151
220
|
end
|
|
152
221
|
end
|
|
153
222
|
end
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#
|
|
2
|
+
# DO NOT MODIFY!!!!
|
|
3
|
+
# This file is automatically generated by Racc 1.5.1
|
|
4
|
+
# from Racc grammar file "".
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
require 'racc/parser.rb'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require "bcdice/common_command/lexer"
|
|
11
|
+
require "bcdice/arithmetic/node"
|
|
12
|
+
|
|
13
|
+
module BCDice
|
|
14
|
+
module Arithmetic
|
|
15
|
+
class Parser < Racc::Parser
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def self.parse(source)
|
|
19
|
+
new.parse(source)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def parse(source)
|
|
23
|
+
@lexer = BCDice::CommonCommand::Lexer.new(source)
|
|
24
|
+
do_parse()
|
|
25
|
+
rescue ParseError
|
|
26
|
+
nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def next_token
|
|
32
|
+
@lexer.next_token
|
|
33
|
+
end
|
|
34
|
+
##### State transition tables begin ###
|
|
35
|
+
|
|
36
|
+
racc_action_table = [
|
|
37
|
+
8, 17, 8, 12, 13, 4, 5, 4, 5, 7,
|
|
38
|
+
8, 7, 8, 12, 13, 4, 5, 4, 5, 7,
|
|
39
|
+
8, 7, 8, 12, 13, 4, 5, 4, 5, 7,
|
|
40
|
+
8, 7, 8, nil, nil, 4, 5, 4, 5, 7,
|
|
41
|
+
9, 7, nil, nil, 10, 11, nil, 10, 11, 22,
|
|
42
|
+
26, 24, 25, 27 ]
|
|
43
|
+
|
|
44
|
+
racc_action_check = [
|
|
45
|
+
0, 9, 4, 2, 2, 0, 0, 4, 4, 0,
|
|
46
|
+
5, 4, 7, 18, 18, 5, 5, 7, 7, 5,
|
|
47
|
+
10, 7, 11, 19, 19, 10, 10, 11, 11, 10,
|
|
48
|
+
12, 11, 13, nil, nil, 12, 12, 13, 13, 12,
|
|
49
|
+
1, 13, nil, nil, 16, 16, nil, 1, 1, 16,
|
|
50
|
+
21, 21, 21, 21 ]
|
|
51
|
+
|
|
52
|
+
racc_action_pointer = [
|
|
53
|
+
-2, 40, -6, nil, 0, 8, nil, 10, nil, 1,
|
|
54
|
+
18, 20, 28, 30, nil, nil, 37, nil, 4, 14,
|
|
55
|
+
nil, 47, nil, nil, nil, nil, nil, nil ]
|
|
56
|
+
|
|
57
|
+
racc_action_default = [
|
|
58
|
+
-17, -17, -3, -6, -17, -17, -14, -17, -16, -17,
|
|
59
|
+
-17, -17, -17, -17, -12, -13, -17, 28, -1, -2,
|
|
60
|
+
-4, -7, -15, -5, -8, -9, -10, -11 ]
|
|
61
|
+
|
|
62
|
+
racc_goto_table = [
|
|
63
|
+
14, 15, 23, 1, 18, 19, nil, nil, 20, 21,
|
|
64
|
+
16 ]
|
|
65
|
+
|
|
66
|
+
racc_goto_check = [
|
|
67
|
+
3, 3, 4, 1, 2, 2, nil, nil, 3, 3,
|
|
68
|
+
1 ]
|
|
69
|
+
|
|
70
|
+
racc_goto_pointer = [
|
|
71
|
+
nil, 3, -6, -4, -19, nil ]
|
|
72
|
+
|
|
73
|
+
racc_goto_default = [
|
|
74
|
+
nil, nil, 2, 3, nil, 6 ]
|
|
75
|
+
|
|
76
|
+
racc_reduce_table = [
|
|
77
|
+
0, 0, :racc_error,
|
|
78
|
+
3, 14, :_reduce_1,
|
|
79
|
+
3, 14, :_reduce_2,
|
|
80
|
+
1, 14, :_reduce_none,
|
|
81
|
+
3, 15, :_reduce_4,
|
|
82
|
+
4, 15, :_reduce_5,
|
|
83
|
+
1, 15, :_reduce_none,
|
|
84
|
+
0, 17, :_reduce_7,
|
|
85
|
+
1, 17, :_reduce_8,
|
|
86
|
+
1, 17, :_reduce_9,
|
|
87
|
+
1, 17, :_reduce_10,
|
|
88
|
+
1, 17, :_reduce_11,
|
|
89
|
+
2, 16, :_reduce_12,
|
|
90
|
+
2, 16, :_reduce_13,
|
|
91
|
+
1, 16, :_reduce_none,
|
|
92
|
+
3, 18, :_reduce_15,
|
|
93
|
+
1, 18, :_reduce_16 ]
|
|
94
|
+
|
|
95
|
+
racc_reduce_n = 17
|
|
96
|
+
|
|
97
|
+
racc_shift_n = 28
|
|
98
|
+
|
|
99
|
+
racc_token_table = {
|
|
100
|
+
false => 0,
|
|
101
|
+
:error => 1,
|
|
102
|
+
:NUMBER => 2,
|
|
103
|
+
:R => 3,
|
|
104
|
+
:U => 4,
|
|
105
|
+
:C => 5,
|
|
106
|
+
:F => 6,
|
|
107
|
+
:PLUS => 7,
|
|
108
|
+
:MINUS => 8,
|
|
109
|
+
:ASTERISK => 9,
|
|
110
|
+
:SLASH => 10,
|
|
111
|
+
:PARENL => 11,
|
|
112
|
+
:PARENR => 12 }
|
|
113
|
+
|
|
114
|
+
racc_nt_base = 13
|
|
115
|
+
|
|
116
|
+
racc_use_result_var = true
|
|
117
|
+
|
|
118
|
+
Racc_arg = [
|
|
119
|
+
racc_action_table,
|
|
120
|
+
racc_action_check,
|
|
121
|
+
racc_action_default,
|
|
122
|
+
racc_action_pointer,
|
|
123
|
+
racc_goto_table,
|
|
124
|
+
racc_goto_check,
|
|
125
|
+
racc_goto_default,
|
|
126
|
+
racc_goto_pointer,
|
|
127
|
+
racc_nt_base,
|
|
128
|
+
racc_reduce_table,
|
|
129
|
+
racc_token_table,
|
|
130
|
+
racc_shift_n,
|
|
131
|
+
racc_reduce_n,
|
|
132
|
+
racc_use_result_var ]
|
|
133
|
+
|
|
134
|
+
Racc_token_to_s_table = [
|
|
135
|
+
"$end",
|
|
136
|
+
"error",
|
|
137
|
+
"NUMBER",
|
|
138
|
+
"R",
|
|
139
|
+
"U",
|
|
140
|
+
"C",
|
|
141
|
+
"F",
|
|
142
|
+
"PLUS",
|
|
143
|
+
"MINUS",
|
|
144
|
+
"ASTERISK",
|
|
145
|
+
"SLASH",
|
|
146
|
+
"PARENL",
|
|
147
|
+
"PARENR",
|
|
148
|
+
"$start",
|
|
149
|
+
"add",
|
|
150
|
+
"mul",
|
|
151
|
+
"unary",
|
|
152
|
+
"round_type",
|
|
153
|
+
"term" ]
|
|
154
|
+
|
|
155
|
+
Racc_debug_parser = false
|
|
156
|
+
|
|
157
|
+
##### State transition tables end #####
|
|
158
|
+
|
|
159
|
+
# reduce 0 omitted
|
|
160
|
+
|
|
161
|
+
def _reduce_1(val, _values, result)
|
|
162
|
+
result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
|
|
163
|
+
result
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def _reduce_2(val, _values, result)
|
|
167
|
+
result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
|
|
168
|
+
result
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# reduce 3 omitted
|
|
172
|
+
|
|
173
|
+
def _reduce_4(val, _values, result)
|
|
174
|
+
result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2])
|
|
175
|
+
result
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def _reduce_5(val, _values, result)
|
|
179
|
+
divied_class = val[3]
|
|
180
|
+
result = divied_class.new(val[0], val[2])
|
|
181
|
+
|
|
182
|
+
result
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# reduce 6 omitted
|
|
186
|
+
|
|
187
|
+
def _reduce_7(val, _values, result)
|
|
188
|
+
result = Arithmetic::Node::DivideWithGameSystemDefault
|
|
189
|
+
result
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def _reduce_8(val, _values, result)
|
|
193
|
+
result = Arithmetic::Node::DivideWithCeil
|
|
194
|
+
result
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def _reduce_9(val, _values, result)
|
|
198
|
+
result = Arithmetic::Node::DivideWithCeil
|
|
199
|
+
result
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def _reduce_10(val, _values, result)
|
|
203
|
+
result = Arithmetic::Node::DivideWithRound
|
|
204
|
+
result
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def _reduce_11(val, _values, result)
|
|
208
|
+
result = Arithmetic::Node::DivideWithFloor
|
|
209
|
+
result
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def _reduce_12(val, _values, result)
|
|
213
|
+
result = val[1]
|
|
214
|
+
result
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def _reduce_13(val, _values, result)
|
|
218
|
+
result = Arithmetic::Node::Negative.new(val[1])
|
|
219
|
+
result
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# reduce 14 omitted
|
|
223
|
+
|
|
224
|
+
def _reduce_15(val, _values, result)
|
|
225
|
+
result = val[1]
|
|
226
|
+
result
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def _reduce_16(val, _values, result)
|
|
230
|
+
result = Arithmetic::Node::Number.new(val[0])
|
|
231
|
+
result
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def _reduce_none(val, _values, result)
|
|
235
|
+
val[0]
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
end # class Parser
|
|
239
|
+
end # module Arithmetic
|
|
240
|
+
end # module BCDice
|