diff --git a/Emoji-Bedeutung-v2-+-Aufgaben-+-Codebeispiele.md b/Emoji-Bedeutung-v2-+-Aufgaben-+-Codebeispiele.md index 355ba69..d4c5cb3 100644 --- a/Emoji-Bedeutung-v2-+-Aufgaben-+-Codebeispiele.md +++ b/Emoji-Bedeutung-v2-+-Aufgaben-+-Codebeispiele.md @@ -18,8 +18,8 @@ X in Variable speichern. # Ausgabe - πŸ’¬ // Textausgabe -- πŸ”Š / πŸ“’ // Tonausgabe -- πŸ€– πŸ”Š // Text2Speech +- πŸ”Š / πŸ“’ // Tonausgabe - was heißt "Tonausgabe"? +- πŸ€– // Text2Speech - πŸ“‘ // Broadcast: Nachricht an alle senden ## Codebeispiel @@ -28,11 +28,10 @@ X aus Variable auf unterschiedliche Art ausgeben. ``` πŸ—ƒοΈ ➑️ πŸ’¬ πŸ—ƒοΈ ➑️ πŸ”Š -πŸ—ƒοΈ ➑️ πŸ€– πŸ”Š +πŸ—ƒοΈ ➑️ πŸ€– πŸ—ƒοΈ ➑️ πŸ“’ πŸ—ƒοΈ ➑️ πŸ“‘ ``` - # Datenspeicherung Ein Typ von Variable. Keine Unterscheidung zwischen Datentypen & Anzahl der gespeicherten Elemente. @@ -173,4 +172,6 @@ x == string ? if true: loop: { --- Wenn πŸ”€ leer ist, dann hat die Ausgabe ein beispielsweise leeres Blatt Papier. -ABER es gibt eine Ausgabe! \ No newline at end of file +ABER es gibt eine Ausgabe! + + diff --git a/backlog-an-moeglichen-emojis.md b/backlog-an-moeglichen-emojis.md index c38a8a3..259bad6 100644 --- a/backlog-an-moeglichen-emojis.md +++ b/backlog-an-moeglichen-emojis.md @@ -77,4 +77,6 @@ Sorg dafΓΌr, dass du deinem Roboter den Namen eines Klassenkameraden und eine Gr πŸ‘Ž: πŸ”€ ➑️ πŸ’¬ // ("Dieser Name ist nicht in der Klassenliste") -``` \ No newline at end of file +``` + +:loud_sound: \ No newline at end of file diff --git a/emoji-grammar.ohm b/emoji-grammar.ohm new file mode 100644 index 0000000..bd095ad --- /dev/null +++ b/emoji-grammar.ohm @@ -0,0 +1,107 @@ +Emoji { + Functionality = Functionality+ | Input | Output | Condition | Variable | Loop + + /* + * INPUT + */ + Input + = Input_Emoji+ Arrow_Right Variable_Emoji -- No_Type + | (Input_Emoji (Type_Numeric_Emoji | Type_String_Emoji) Type_Required_Emoji ?)+ Arrow_Right Variable_Emoji -- Type_Required + + Input_Emoji = ":memo:" | "πŸ“" | ":microphone:" | "🎀" | ":microphone_studio:" | "πŸŽ™οΈ" | ":camera_with_flash:" | "πŸ“Έ" | ":camera:" | "πŸ“·" | ":framed_picture:" | "πŸ–ΌοΈ" + + /* + * OUTPUT + */ + Output + = Variable_Emoji Arrow_Right Output_Emoji -- From_Variable + | Output_Emoji String -- From_String + + Output_Emoji = ":speech:" | "πŸ’¬" | ":loud_sound:" | "πŸ”Š" | ":megaphone:" | "πŸ“’" | ":robot:" | "πŸ€–" | ":satellite:" | "πŸ“‘" + + /* + * VARIABLE + */ + Variable + = Variable_Emoji Arrow_Left Input_Emoji+ -- Normal + // "Random_String" bislang deaktiviert + | Random_Number Arrow_Right Variable_Emoji -- Right_Side_Add_Random_Value + | Variable_Emoji Arrow_Left Random_Number -- Left_Side_Add_Random_Value + | Variable_Emoji -- Empty + + + Variable_Emoji = ":cardfilebox:" | "πŸ—ƒοΈ" + + /* + * CONDITION + */ + Condition = Compare_Value Compare_Operator_Emoji Compare_Value Condition_Identifier_Emoji (Condition_Flow | end) + Condition_Flow + = (Condition_True_Emoji Functionality Condition_False_Emoji Functionality | Condition_False_Emoji Functionality Condition_True_Emoji Functionality) -- Double_Path + | (Condition_True_Emoji | Condition_False_Emoji) Functionality -- Single_Path + | (Condition_True_Emoji | Condition_False_Emoji) -- Empty_Path + + Condition_Identifier_Emoji = ":question:" | "❓" + Condition_True_Emoji = ":thumbs_up:" | "πŸ‘" + Condition_False_Emoji = ":thumbs_down:" | "πŸ‘Ž" + + Compare_Operator_Emoji + = ":balance_scale:" | "βš–οΈ" + | ":equals:" | "=" + |":chart_with_downwards_trend:" + | "πŸ“‰" | ":chart_with_upwards_trend:" + | "πŸ“ˆ" + + // Begriffe in [] beziehen sich auf Variablen + // Wird ggf. separiert werden mΓΌssen + Compare_Value = Variable_Emoji | Compare_Value_Emoji + + Compare_Value_Emoji + = "[NOT_EMPTY]" | "[EMPTY]" + | "[FIRST]" | "[MIDDLE]" | "[LAST]" + + /* + * LOOP + */ + Loop + = Loop_Emoji Integer Functionality -- Timed_Loop + | Loop_Emoji Condition Condition_Flow -- Condition_Loop + | Loop_Emoji (Integer | Condition) -- Empty_Loop + + Loop_Emoji = ":repeat:" | "πŸ”" + + /* + * HELPERS + */ + Arrow_Right = ":arrow_right:" | "➑️" + Arrow_Left = ":arrow_left:" | "⬅️" + + Random_Number = Random_Emoji Type_Numeric_Emoji Type_Numeric_Emoji ? + // Wie wΓΌrde "Random_String" aussehen? Was wΓΌrde passieren? + Random_String = Random_Emoji Type_String_Emoji + Random_Emoji = ":twisted_rightwards_arrows:" | "πŸ”€" + + /* + * TYPES + */ + Type_Required_Emoji = ":exclamation:" | "❗" + + Type_Numeric_Emoji = ":1234:" | "πŸ”’" + Type_String_Emoji = ":abc:" | "πŸ”€" + + String + = "\"" (alnum | specialCharacters)* "\"" -- Double_Quoutes + | (alnum | specialCharacters)* -- No_Double_Quoutes + + Integer = number+ + + Letters = letter+ + specialCharacters = "!" | "?" | "<" | ">" | "Β§" | "$" | "&" | "/" | "," | ";" | "." | ":" | "_" | "#" | "'" | "~" | "|" | "^" | "β€²" + + ident (an identifier) + = letter alnum* + + number (a number) + = digit* "." digit+ -- fract + | digit+ -- whole +} diff --git a/examples.json b/examples.json new file mode 100644 index 0000000..5ba9959 --- /dev/null +++ b/examples.json @@ -0,0 +1,187 @@ +[ + { + "text": "πŸ“ ➑️ πŸ—ƒοΈ\nπŸ“· ➑️ πŸ—ƒοΈ\n🎀 ➑️ πŸ—ƒοΈ\nπŸŽ™οΈ ➑️ πŸ—ƒοΈ\nπŸ–ΌοΈ ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ”’β—βž‘οΈ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ”€β—βž‘οΈ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ”’β— πŸ“πŸ”’β— ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”€ πŸ”’ ➑️ πŸ—ƒοΈ\n\nπŸ”€ πŸ”’ πŸ”’ ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ—ƒοΈ ➑️ πŸ’¬", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ”’β— πŸ“πŸ”€β— ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ”€β— πŸ“πŸ”€β— ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ”€β— πŸ“πŸ”’β— ➑️ πŸ—ƒοΈ\n", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"Richtig geraten!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘\n πŸ’¬ \"Richtig geraten!\"\n πŸ‘Ž\n πŸ’¬ \"Falsch geraten!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"Richtig geraten\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"123\"\n", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"abc 123\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"123 abc\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"!123 abc!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"123! abc!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ πŸ‘ πŸ’¬ \"Richtig geraten!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘ ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘Ž", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘Ž\n πŸ’¬ \"Falsch geraten!\"\n πŸ‘\n πŸ’¬ \"Richtig geraten!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ”\n πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘Ž \n πŸ’¬ \"Soll funktionieren!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ“πŸ“πŸ“ ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ” 10\n πŸ—ƒοΈ ➑️ πŸ’¬ ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ” 10", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ’¬ \"Gib einen Text ein\"\n\nπŸ“ ➑️ πŸ—ƒοΈ\n\nπŸ” 10\n πŸ—ƒοΈ ➑️ πŸ’¬ ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ \n", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘\n πŸ’¬ \"Richtig geraten!\"", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ \n πŸ‘", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "πŸ—ƒοΈ\n\nπŸ—ƒοΈ βš–οΈ [EMPTY] ❓\n πŸ‘\n πŸ“ ➑️ πŸ—ƒοΈ \n \n[EMPTY] βš–οΈ πŸ—ƒοΈ ❓\n πŸ‘\n πŸ“ ➑️ πŸ—ƒοΈ ", + "startRule": "", + "shouldMatch": true + }, + { + "text": "\nπŸ”€ πŸ”’ πŸ”’ πŸ”’ ➑️ πŸ—ƒοΈ\n", + "startRule": "", + "shouldMatch": false + }, + { + "text": "πŸ”€ πŸ”’ πŸ”€ ➑️ πŸ—ƒοΈ\n", + "startRule": "", + "shouldMatch": false + }, + { + "text": "πŸ”€ πŸ”€ πŸ”’ ➑️ πŸ—ƒοΈ\n", + "startRule": "", + "shouldMatch": false + }, + { + "text": "πŸ”€ πŸ”€ πŸ”€ ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": false + }, + { + "text": "πŸ”€ πŸ”€ ➑️ πŸ—ƒοΈ", + "startRule": "", + "shouldMatch": false + } +] \ No newline at end of file diff --git a/ohm-grammar-testcases.txt b/ohm-grammar-testcases.txt new file mode 100644 index 0000000..d97bb7b --- /dev/null +++ b/ohm-grammar-testcases.txt @@ -0,0 +1,121 @@ +πŸ“ ➑️ πŸ—ƒοΈ + +πŸ“πŸ“πŸ“ ➑️ πŸ—ƒοΈ + +πŸ“· ➑️ πŸ—ƒοΈ +🎀 ➑️ πŸ—ƒοΈ +πŸŽ™οΈ ➑️ πŸ—ƒοΈ +πŸ–ΌοΈ ➑️ πŸ—ƒοΈ + +πŸ—ƒοΈ ➑️ πŸ’¬ +πŸ—ƒοΈ ➑️ πŸ”Š +πŸ—ƒοΈ ➑️ πŸ€– +πŸ—ƒοΈ ➑️ πŸ“’ +πŸ—ƒοΈ ➑️ πŸ“‘ + +πŸ“ ➑️ πŸ—ƒοΈ +πŸ“· ➑️ πŸ—ƒοΈ +🎀 ➑️ πŸ—ƒοΈ +πŸŽ™οΈ ➑️ πŸ—ƒοΈ +πŸ–ΌοΈ ➑️ πŸ—ƒοΈ + +πŸ“πŸ”’β—βž‘οΈ πŸ—ƒοΈ + +πŸ“πŸ”€β—βž‘οΈ πŸ—ƒοΈ + +πŸ“πŸ”’β— πŸ“πŸ”’β— ➑️ πŸ—ƒοΈ + +πŸ“πŸ”€β— πŸ“πŸ”€β— ➑️ πŸ—ƒοΈ + +πŸ“πŸ”’β— πŸ“πŸ”€β— ➑️ πŸ—ƒοΈ + +πŸ“πŸ”€β— πŸ“πŸ”’β— ➑️ πŸ—ƒοΈ + +πŸ”€ πŸ”’ ➑️ πŸ—ƒοΈ + +πŸ—ƒοΈ ➑️ πŸ’¬ + +πŸ”€πŸ”’ ➑️ πŸ—ƒοΈ +πŸ“πŸ”’ ➑️ πŸ—ƒοΈ + +πŸ’¬ Richtig geraten! + +πŸ’¬ "Richtig geraten" + +πŸ’¬ "123" + +πŸ’¬ "abc 123" + +πŸ’¬ "123 abc" + +πŸ’¬ "!123 abc!" + +πŸ’¬ "123! abc!" + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ πŸ‘ πŸ’¬ "Richtig geraten!" + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘ + πŸ’¬ "Richtig geraten!" + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘ + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘Ž + πŸ’¬ "Soll funktionieren!" + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘ + πŸ’¬ "Richtig geraten!" + πŸ‘Ž + πŸ’¬ "Falsch geraten!" + +πŸ” + πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘Ž + πŸ’¬ "Falsch geraten!" + πŸ‘ + πŸ’¬ "Richtig geraten!" + +πŸ“πŸ“πŸ“ ➑️ πŸ—ƒοΈ + +πŸ” 10 + πŸ—ƒοΈ ➑️ πŸ’¬ + +πŸ” 10 + +πŸ’¬ "Gib einen Text ein" +πŸ“ ➑️ πŸ—ƒοΈ + +πŸ” 10 + πŸ—ƒοΈ ➑️ πŸ’¬ + +πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + +πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘ + +πŸ—ƒοΈ βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘ + πŸ’¬ "Richtig geraten!" + +πŸ—ƒοΈ + +πŸ—ƒοΈ + +πŸ—ƒοΈ βš–οΈ [EMPTY] ❓ + πŸ‘ + πŸ“ ➑️ πŸ—ƒοΈ + +[EMPTY] βš–οΈ πŸ—ƒοΈ ❓ + πŸ‘ + πŸ“ ➑️ πŸ—ƒοΈ \ No newline at end of file diff --git a/testaufgaben.md b/testaufgaben.md index 6fc60bc..e6f788d 100644 --- a/testaufgaben.md +++ b/testaufgaben.md @@ -54,7 +54,7 @@ Sortier die Namen nach ZeichenlΓ€nge & gib sie mit Text2Speech aus. πŸ“ ➑️ -πŸ—ƒοΈ ➑️ πŸ€– πŸ”Š +πŸ—ƒοΈ ➑️ πŸ€– ``` a. @@ -69,10 +69,6 @@ b. πŸ“ πŸ“ˆ πŸ“ ➑️ πŸ—ƒοΈ ``` -c. -``` -πŸ—ƒοΈ πŸ” πŸ“ πŸ“ˆ πŸ“ ➑️ πŸ—ƒοΈ -``` ### Alternativ @@ -80,7 +76,7 @@ c. πŸ“"Erster Name" πŸ“"Zweiter Name" πŸ“"Dritter Name" ➑️ πŸ—ƒοΈ πŸ” 10 - πŸ—ƒοΈ ➑️ πŸ€– πŸ”Š + πŸ—ƒοΈ ➑️ πŸ€– ``` ## 3. @@ -91,7 +87,7 @@ Falls ja, schreib deinen Namen darein. ``` πŸ—ƒοΈ -πŸ—ƒοΈ βš–οΈ [leer] ❓ +πŸ—ƒοΈ βš–οΈ [EMPTY] ❓ πŸ‘ πŸ“ ➑️ πŸ—ƒοΈ ``` @@ -198,7 +194,7 @@ ZufΓ€lligen Wert aus Variable ausgeben? ZufΓ€lligen Wert, der zwischen Werten der Variable liegt, ausgeben? ``` - πŸ”€ ➑️ πŸ’¬ +πŸ”€ ➑️ πŸ’¬ πŸ—ƒοΈ[#1] πŸ—ƒοΈ[#2] ```