質問編集履歴
3
hh
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
Parsletライブラリを使用してPEGを記述しparserを作っていたのですが、Parslet::Parsefaildというraiseエラーが起きてしまいます。
|
2
2
|
どなたか、ご教示いただけると、嬉しいです。
|
3
|
+
|
4
|
+
> 追記、解決しました。@asmさん、ありがとうございます。
|
3
5
|
```Error
|
4
6
|
Traceback (most recent call last):
|
5
7
|
2: from parser.rb:66:in `<main>'
|
@@ -8,6 +10,14 @@
|
|
8
10
|
' at line 1 char 1.
|
9
11
|
```
|
10
12
|
|
13
|
+
以下、新しいエラーです。
|
14
|
+
```
|
15
|
+
Traceback (most recent call last):
|
16
|
+
2: from temp.rb:64:in `<main>'
|
17
|
+
1: from /Library/Ruby/Gems/2.6.0/gems/parslet-1.8.2/lib/parslet/atoms/base.rb:49:in `parse'
|
18
|
+
/Library/Ruby/Gems/2.6.0/gems/parslet-1.8.2/lib/parslet/cause.rb:70:in `raise': Extra input after last repetition at line 2 char 1. (Parslet::ParseFailed)
|
19
|
+
```
|
20
|
+
|
11
21
|
```parser.rb
|
12
22
|
require 'parslet'
|
13
23
|
class NumericParser < Parslet::Parser
|
@@ -31,7 +41,7 @@
|
|
31
41
|
}
|
32
42
|
|
33
43
|
rule(:integer) {
|
34
|
-
match("[0-9]")
|
44
|
+
match("[0-9]").repeat(1)
|
35
45
|
}
|
36
46
|
|
37
47
|
rule(:code) {
|
@@ -43,7 +53,7 @@
|
|
43
53
|
}
|
44
54
|
|
45
55
|
rule(:func) {
|
46
|
-
|
56
|
+
idens.map{|f| str(f)}.inject(:|) >> block
|
47
57
|
}
|
48
58
|
|
49
59
|
rule(:block){
|
2
追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
rule(:returns){ return_mark.repeat(1) }
|
21
21
|
rule(:return?){ returns.maybe }
|
22
22
|
rule(:sprt?){ (return_mark | space).repeat(0)}
|
23
|
-
rule(:chars){ str("
|
23
|
+
rule(:chars){ str("a") | str("b") | str("c") | str("d") | str("e") | str("f") | str("g") | str("h") | str("i") | str("j") | str("k") | str("l") | str("m") | str("n") | str("o") | str("p") | str("q") | str("r") | str("s") | str("t") | str("u") | str("v") | str("w") | str("x") | str("y") | str("z") | str("A") | str("B") | str("C") | str("D") | str("E") | str("F") | str("G") | str("H") | str("I") | str("J") | str("K") | str("L") | str("M") | str("N") | str("O") | str("P") | str("Q") | str("R") | str("S") | str("T") | str("U") | str("V") | str("W") | str("X") | str("Y") | str("Z") | str("0") | str("1") | str("2") | str("3") | str("4") | str("5") | str("6") | str("7") | str("8") | str("9") | str(" ") | str("!") | str("\\"") | str("#") | str("$") | str("%") | str("&") | str("\'") | str("(") | str(")") | str("-") | str("^") | str("@") | str("[") | str(";") | str(":") | str("]") | str(",") | str(".") | str("/") | str("\\") | str("=") | str("~") | str("|") | str("`") | str("{") | str("+") | str("*") | str("}") | str("<") | str(">") | str("?") | str("_") | str("\n") | str("\s") | str("\t") }
|
24
24
|
|
25
25
|
rule(:string) {
|
26
26
|
str("\"") >> chars.repeat >> str("\"")
|
@@ -43,7 +43,7 @@
|
|
43
43
|
}
|
44
44
|
|
45
45
|
rule(:func) {
|
46
|
-
match("#{idens.join("|")}") >> block
|
46
|
+
match("#{idens.join(" | ")}") >> block
|
47
47
|
}
|
48
48
|
|
49
49
|
rule(:block){
|
@@ -72,5 +72,24 @@
|
|
72
72
|
code.push(line)
|
73
73
|
end
|
74
74
|
f.close
|
75
|
-
NumericParser.new.parse(code.join("\n"))
|
75
|
+
NumericParser.new.parse(code.join("\n")+"\n")
|
76
|
+
```
|
77
|
+
|
78
|
+
テストデータです。
|
79
|
+
```
|
80
|
+
123
|
81
|
+
```
|
82
|
+
|
83
|
+
```
|
84
|
+
print(123)
|
85
|
+
```
|
86
|
+
|
87
|
+
```
|
88
|
+
print("aiueo")
|
89
|
+
```
|
90
|
+
|
91
|
+
```
|
92
|
+
print{
|
93
|
+
print("aiueo")
|
94
|
+
}
|
76
95
|
```
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
}
|
40
40
|
|
41
41
|
rule(:line) {
|
42
|
-
func | assign | value
|
42
|
+
func | assign | value | sprt?
|
43
43
|
}
|
44
44
|
|
45
45
|
rule(:func) {
|