Skip to content
This repository was archived by the owner on Nov 29, 2024. It is now read-only.

Commit ea2c528

Browse files
committed
work on Opposite[], DetectPose[], ComparePose[]
1 parent 1c70fee commit ea2c528

File tree

7 files changed

+394
-202
lines changed

7 files changed

+394
-202
lines changed

visionscript/error_handling.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from spellchecker import SpellChecker
2+
3+
from visionscript.usage import (
4+
language_grammar_reference,
5+
lowercase_language_grammar_reference,
6+
)
7+
8+
spell = SpellChecker()
9+
10+
11+
def handle_unexpected_characters(e, code, interactive=False):
12+
# if line doesn't end with ], add it
13+
if not code.strip().endswith("]"):
14+
code += "]"
15+
16+
return
17+
18+
# if space between statement and [, remove it
19+
# get position of [
20+
position = code.find("[")
21+
22+
if code[position - 1] == " ":
23+
code = code[: position - 1] + code[position:]
24+
25+
return
26+
27+
# replace all “ with "
28+
code = code.replace("“", '"')
29+
code = code.replace("”", '"')
30+
31+
# raise error if character not in grammar
32+
if e.char not in ["[", "]", "'", '"', ",", " ", '"', '"', "\n", "\t", "\r"]:
33+
print(f"Syntax error on line {e.line}, column {e.column}.")
34+
print(f"Unexpected character: {e.char!r}")
35+
exit(1)
36+
37+
# raise error if class doesn't exist
38+
line = e.line
39+
column = e.column
40+
41+
# check if function name in grammar
42+
function_name = code.strip().split("\n")[line - 1].split("[")[0].strip()
43+
44+
language_grammar_reference_keys = language_grammar_reference.keys()
45+
46+
if function_name in language_grammar_reference_keys:
47+
print(f"Syntax error on line {line}, column {column}.")
48+
print(f"Unexpected character: {e.char!r}")
49+
exit(1)
50+
51+
spell.known(lowercase_language_grammar_reference)
52+
spell.word_frequency.load_words(lowercase_language_grammar_reference)
53+
54+
alternatives = spell.candidates(function_name)
55+
56+
if len(alternatives) == 0:
57+
print(f"Function {function_name} does not exist.")
58+
exit(1)
59+
60+
print(f"Function '{function_name}' does not exist. Did you mean one of these?")
61+
print("-" * 10)
62+
63+
for item in list(alternatives):
64+
if item.lower() in lowercase_language_grammar_reference:
65+
print(
66+
list(language_grammar_reference.keys())[
67+
lowercase_language_grammar_reference.index(item.lower())
68+
]
69+
)
70+
71+
if interactive is False:
72+
exit(1)
73+
74+
75+
def handle_unexpected_token(e, interactive=False):
76+
line = e.line
77+
column = e.column
78+
79+
print(f"Syntax error on line {line}, column {column}.")
80+
print(f"Unexpected token: {e.token!r}")
81+
if interactive is False:
82+
exit(1)

visionscript/grammar.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
grammar = """
22
start: (expr | EOL)*
33
4-
expr: (set | var | make | in | if | train | label | detect | countinregion | help | get | exit | read | compare | count | cutout | show | size | caption | say | save | load | use | replace | var | classify | segment | comment | contains | if | else | end | run | isita | find | describe | import | rotate | getcolours | getcolors | get_text | greyscale | select | paste | pasterandom | resize | blur | literal | setbrightness | search | similarity | readqr | reset | negate | BOOL | INT | equality | not_equality | input | deploy | getedges | setconfidence | setregion | filterbyclass | crop | shuffle | grid | run | camera | showtext | getfps | gt | lt | expr | increment | decrement | track | getdistinctscenes | getuniqueappearances | usecamera | breakpoint | profile | math | first | last | is | merge | remove | web | wait | associative_array | list | STRING | EOL)
4+
expr: (set | var | make | in | if | train | label | detect | countinregion | help | get | exit | read | compare | count | cutout | show | size | caption | say | save | load | use | replace | var | classify | segment | comment | contains | if | else | end | run | isita | find | describe | import | rotate | getcolours | getcolors | get_text | greyscale | select | paste | pasterandom | resize | blur | literal | setbrightness | search | similarity | readqr | reset | negate | BOOL | INT | equality | not_equality | input | deploy | getedges | setconfidence | setregion | filterbyclass | crop | shuffle | grid | run | camera | showtext | getfps | gt | lt | expr | increment | decrement | track | getdistinctscenes | getuniqueappearances | usecamera | breakpoint | profile | math | first | last | is | merge | remove | web | wait | opposite | detectpose | comparepose | associative_array | list | STRING | EOL)
55
classify: "Classify" "[" STRING ("," STRING)* "]"
66
merge: "Merge" "[" (variable | list | associative_array) ("," (variable | list | associative_array))* "]"
77
var: variable "=" (expr | STRING | INT)
@@ -17,6 +17,9 @@
1717
get_text: "GetText[]"
1818
camera: "Camera[]"
1919
greyscale: "Greyscale" "[]"
20+
opposite: "Opposite" "[" (BOOL | expr) "]"
21+
detectpose: "DetectPose[]"
22+
comparepose: "ComparePose" "[" (expr) "," (expr) "]" | "ComparePose[]"
2023
showtext: "ShowText[]" | "ShowText" "[" (expr | STRING) "]"
2124
search: "Search" "[" STRING "]"
2225
deploy: "Deploy" "[" STRING "]"

0 commit comments

Comments
 (0)