diff --git a/src/main/java/edu/kit/typicalc/view/main/InfoContent.java b/src/main/java/edu/kit/typicalc/view/main/InfoContent.java index 0568a35..636d7eb 100644 --- a/src/main/java/edu/kit/typicalc/view/main/InfoContent.java +++ b/src/main/java/edu/kit/typicalc/view/main/InfoContent.java @@ -12,23 +12,26 @@ public class InfoContent extends VerticalLayout implements LocaleChangeObserver private final Span termExplanation; private final Paragraph termSyntax; private final Span assExplanation; - private final Paragraph assSyntax; + private final Span typeExplanation; + private final Paragraph typeSyntax; public InfoContent() { termExplanation = new Span(); termSyntax = new Paragraph(); assExplanation = new Span(); - assSyntax = new Paragraph(); + typeExplanation = new Span(); + typeSyntax = new Paragraph(); termSyntax.setId(GRAMMAR_ID); - assSyntax.setId(GRAMMAR_ID); - add(termExplanation, termSyntax, assExplanation, assSyntax); + typeSyntax.setId(GRAMMAR_ID); + add(termExplanation, termSyntax, assExplanation, typeExplanation, typeSyntax); } @Override public void localeChange(LocaleChangeEvent localeChangeEvent) { termExplanation.setText(getTranslation("root.termExplanation")); termSyntax.getElement().setProperty("innerHTML", getTranslation("root.termGrammar")); - assExplanation.setText(getTranslation("root.assExplanation")); - assSyntax.getElement().setProperty("innerHTML", getTranslation("root.assGrammar")); + assExplanation.getElement().setProperty("innerHTML", getTranslation("root.assExplanation")); + typeExplanation.setText(getTranslation("root.typeExplanation")); + typeSyntax.getElement().setProperty("innerHTML", getTranslation("root.typeGrammar")); } } diff --git a/src/main/java/edu/kit/typicalc/view/main/InputBar.java b/src/main/java/edu/kit/typicalc/view/main/InputBar.java index 99564c4..84aeae8 100644 --- a/src/main/java/edu/kit/typicalc/view/main/InputBar.java +++ b/src/main/java/edu/kit/typicalc/view/main/InputBar.java @@ -165,7 +165,7 @@ public class InputBar extends HorizontalLayout implements LocaleChangeObserver { inferTypeButton.setText(getTranslation("root.typeInfer")); infoIcon.getElement().setAttribute("title", getTranslation("root.inputSyntax")); exampleButton.getElement().setAttribute("title", getTranslation("root.exampleTooltip")); - assumptionInputField.setPlaceholder("TODO"); // TODO replace with usefull placeholder + assumptionInputField.setPlaceholder(getTranslation("root.typeInputFieldPlaceholder")); assumptionInputField.setLabel(getTranslation("root.typeAssumptions")); } } diff --git a/src/main/resources/language/general.properties b/src/main/resources/language/general.properties index 83b94d0..35cfc6b 100644 --- a/src/main/resources/language/general.properties +++ b/src/main/resources/language/general.properties @@ -22,11 +22,13 @@ root.termGrammar=\u2329Term\u232A ::= (\u2329Term\u232A) | \u2329App\u232A | \u2 \u2329Var\u232A ::= [a-zA-Z][a-zA-Z0-9]*
\ \u2329Const\u232A ::= [0-9]+ | true | false -root.assGrammar=\u2329Type\u232A ::= (\u2329Type\u232A) | \u2329NamedType\u232A | \u2329VarType\u232A | \ +root.typeGrammar=\u2329Type\u232A ::= \u2329QuantifiedType\u232A | \u2329NormalType\u232A
\ +\u2329QuantifiedType\u232A ::= \u2329VarType\u232A.\u2329NormalType\u232A
\ +\u2329NormalType\u232A ::= (\u2329NormalType\u232A) | \u2329NamedType\u232A | \u2329VarType\u232A | \ \u2329FunctionType\u232A
\ \u2329NamedType\u232A ::= [a-zA-Z][a-zA-Z0-9]*  \\t[0-9]+
\ \u2329VarType\u232A ::= t[0-9]+
\ -\u2329FunctionType\u232A ::= \u2329Type\u232A -> \u2329Type\u232A +\u2329FunctionType\u232A ::= \u2329NormalType\u232A -> \u2329NormalType\u232A root.appLatex=\ \\begin{prooftree}\ diff --git a/src/main/resources/language/translation_de.properties b/src/main/resources/language/translation_de.properties index 2b0e2c6..16f8e8c 100644 --- a/src/main/resources/language/translation_de.properties +++ b/src/main/resources/language/translation_de.properties @@ -14,11 +14,15 @@ root.varRule=Var-Regel root.constRule=Const-Regel root.letRule=Let-Regel root.inputFieldPlaceholder=Term hier eingeben. Ein '\\' wird zu '\u03BB' umgewandelt. +root.typeInputFieldPlaceholder=Typannahmen hier eingeben. Ein '!' wird zu '∀' umgewandelt. root.absRuleLet=Abs-Regel mit Let root.varRuleLet=Var-Regel mit Let root.selectLanguage=Sprache root.termExplanation=Die folgende Grammatik beschreibt den Aufbau eines gültigen Terms: -root.assExplanation=Die folgende Grammatik beschreibt die Syntax eines gültigen Typs: +root.assExplanation=Im Typannahmen-Eingabefeld werden einzelne Typannahmen durch ein Semikolon \ +(;)
voneinander getrennt. Variable und Typ einer Typannahme werden \ +durch einen
Doppelpunkt (:) separiert. +root.typeExplanation=Die folgende Grammatik beschreibt die Syntax eines gültigen Typs: root.typeAssumptions=Typannahmen root.typeAssumptionsHint=Um die Typannahmen auf den Term anzuwenden, muss neu typisiert werden. root.addAssumption=Typannahme hinzufügen @@ -48,9 +52,9 @@ root.helpInputField=In das Eingabefeld können Lambda-Terme mit einer Länge von Das λ-Zeichen kann dabei entweder durch Klicken des λ-Knopfs oder durch Eingabe eines Backslashs \ eingefügt werden. Durch Klicken des Info-Symbols wird die korrekte Syntax eines Terms \ angezeigt. -root.helpTypeAssumptions=Durch Klicken des Typannahmen-Knopfs öffnet sich ein Dialog zur Eingabe von Typannahmen. \ -Durch Klicken des Info-Symbols wird die korrekte Syntax des Typs einer Typannahme angezeigt. Sofern eine Variable in \ -mehreren Typannahmen vorkommt, wird ausschließlich die oberste Typannahme, die diese Variable enthält, \ +root.helpTypeAssumptions=In das Typannahmen-Eingabefeld kann eine beliebige Anzahl an Typannahmen eingegeben werden. \ +Durch Klicken des Info-Symbols wird die korrekte Syntax der Typannahmen angezeigt. Sofern eine Variable in \ +mehreren Typannahmen vorkommt, wird ausschließlich die erste Typannahme, die diese Variable enthält, \ berücksichtigt. Falls der Typ einer Typannahme mit einem 't' beginnt und anschließend nur Ziffern folgen, wird der Typ \ automatisch zu einer Typvariable. root.helpTypeInferButton=Durch Benutzen des Typisieren-Knopfs wird die Berechnung des Typinferenzalgorithmus mit \ diff --git a/src/main/resources/language/translation_en.properties b/src/main/resources/language/translation_en.properties index f56601f..34e853a 100644 --- a/src/main/resources/language/translation_en.properties +++ b/src/main/resources/language/translation_en.properties @@ -16,9 +16,13 @@ root.letRule=Let rule root.absRuleLet=Abs rule with Let root.varRuleLet=Var rule with Let root.inputFieldPlaceholder=Enter term here. A '\\' is converted to '\u03BB'. +root.typeInputFieldPlaceholder=Enter type assumptions here. A '!' is converted to '∀'. root.selectLanguage=Language root.termExplanation=The following grammar specifies the structure of a valid term: -root.assExplanation=The following grammar specifies the syntax of a valid type: +root.assExplanation=In the type assumption input field, type assumptions are separated by a semicolon \ +(;).
The variable and type of a type assumption are separated by a colon \ +(:). +root.typeExplanation=The following grammar specifies the syntax of a valid type: root.typeAssumptions=Type Assumptions root.typeAssumptionsHint=To apply the type assumptions to the current term, you need to press "Type". root.addAssumption=Add Type Assumption @@ -46,9 +50,9 @@ modified. root.helpInputField=The input field allows the user to enter lambda terms with a maximum length of 1000 characters. \ The λ character can be inserted by either clicking the λ button or entering a backslash. \ By clicking on the info icon the grammar defining the valid input syntax is shown. -root.helpTypeAssumptions=Clicking on the type assumptions button opens up a dialog to enter type assumptions. \ -By clicking the icon symbol the grammar defining a valid type of a type assumption is shown. If the same variable \ -is contained in multiple type assumptions, only the uppermost type assumption containing the variable is used for \ +root.helpTypeAssumptions=The type assumption input field allows the user to enter any number of type assumptions. \ +By clicking the icon symbol the grammar defining valid type assumptions is shown. If the same variable \ +is contained in multiple type assumptions, only the first type assumption containing the variable is used for \ the algorithm. If the type of a type assumptions starts with a 't' followed by only digits, the type is automatically \ converted to a type variable. root.helpTypeInferButton=Clicking on the type button starts the type inference algorithm for the current input. \