// -*- mode: js; indent-tabs-mode: nil; js-basic-offset: 4 -*- // // This file is part of Genie // // Copyright 2019-2020 The Board of Trustees of the Leland Stanford Junior University // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Author: Giovanni Campagna import * as $runtime from "../sentence-generator/runtime"; import type $SentenceGenerator from "../sentence-generator/generator"; import * as $SentenceGeneratorTypes from "../sentence-generator/types"; import * as $I18n from "../i18n/index"; import assert from 'assert'; import { Ast, Type } from 'thingtalk'; import * as C from './ast_manip'; import ThingpediaLoader from './load-thingpedia'; export const at_time : $SentenceGeneratorTypes.NonTerminal = "at_time"; export const constant_Time : $SentenceGeneratorTypes.NonTerminal = "constant_Time"; export const constant_Number : $SentenceGeneratorTypes.NonTerminal = "constant_Number"; export const constant_date_point : $SentenceGeneratorTypes.NonTerminal = "constant_date_point"; export const constant_date_range : $SentenceGeneratorTypes.NonTerminal<[Ast.Value, Ast.Value]> = "constant_date_range"; export const constant_day_of_week : $SentenceGeneratorTypes.NonTerminal = "constant_day_of_week"; export const constant_Date : $SentenceGeneratorTypes.NonTerminal = "constant_Date"; export const constant_Measure_ms : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_ms"; export const unit_Measure_ms : $SentenceGeneratorTypes.NonTerminal<'ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year'> = "unit_Measure_ms"; export const constant_Measure_byte : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_byte"; export const constant_Measure_kg : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_kg"; export const constant_Measure_C : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_C"; export const constant_Measure_m : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_m"; export const constant_Measure_m2 : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_m2"; export const constant_Measure_m3 : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_m3"; export const constant_Measure_mps : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_mps"; export const constant_Measure_W : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_W"; export const constant_Measure_lx : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_lx"; export const constant_Measure_lm : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_lm"; export const constant_Measure_dB : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_dB"; export const constant_Measure_dBm : $SentenceGeneratorTypes.NonTerminal = "constant_Measure_dBm"; export const constant_Location : $SentenceGeneratorTypes.NonTerminal = "constant_Location"; export const constant_pairs : $SentenceGeneratorTypes.NonTerminal<[Ast.Value, Ast.Value]> = "constant_pairs"; export const constant_or_pairs : $SentenceGeneratorTypes.NonTerminal<[Ast.Value, Ast.Value]> = "constant_or_pairs"; export const constant_nor_pairs : $SentenceGeneratorTypes.NonTerminal<[Ast.Value, Ast.Value]> = "constant_nor_pairs"; export const constant_String_ContextRef : $SentenceGeneratorTypes.NonTerminal = "constant_String_ContextRef"; /** * Load the templates in this file. * * This is an autogenerated method that will be called by the {@link SentenceGenerator} * when the templates are imported. */ export async function $load($options : $SentenceGeneratorTypes.GrammarOptions, $locale : $I18n.LanguagePack, $grammar : $SentenceGenerator, $loader : ThingpediaLoader) : Promise { const TIME_MORNING = new Ast.Value.Time(new Ast.Time.Relative("morning")); const TIME_NOON = new Ast.Value.Time(new Ast.Time.Absolute(12, 0, 0)); const TIME_EVENING = new Ast.Value.Time(new Ast.Time.Relative("evening")); const TIME_MIDNIGHT = new Ast.Value.Time(new Ast.Time.Absolute(0, 0, 0)); $grammar.declareSymbol("at_time"); $grammar.addRule("at_time", [new $runtime.NonTerminal("constant_Time", "time", undefined)], $locale._("{at|when it is} ${time}"), ((time : Ast.Value) : (Ast.Value)|null => time), C.valueKeyFn, { }); $grammar.addRule("at_time", [], $locale._("in the middle of the day"), (() : (Ast.Value)|null => TIME_NOON), C.valueKeyFn, { }); $grammar.addRule("at_time", [], $locale._("{{in|during} the morning|{when|after} {getting|waking|i {get|wake}} up}"), (() : (Ast.Value)|null => TIME_MORNING), C.valueKeyFn, { }); $grammar.addRule("at_time", [], $locale._("{{in|during} the {evening|night}|{when|before} {going to {sleep|bed}|i go to {sleep|bed}}|at bedtime}"), (() : (Ast.Value)|null => TIME_EVENING), C.valueKeyFn, { }); $grammar.declareSymbol("constant_Time"); $grammar.addRule("constant_Time", [], $locale._("noon"), (() : (Ast.Value)|null => TIME_NOON), C.valueKeyFn, { }); $grammar.addRule("constant_Time", [], $locale._("midday"), (() : (Ast.Value)|null => TIME_NOON), C.valueKeyFn, { }); $grammar.addRule("constant_Time", [], $locale._("midnight"), (() : (Ast.Value)|null => TIME_MIDNIGHT), C.valueKeyFn, { }); $grammar.declareSymbol("constant_Number"); if (!$options.flags.inference) { if (!$options.flags.turking) { $grammar.addRule("constant_Number", [], $locale._("zero"), (() : (Ast.NumberValue)|null => new Ast.Value.Number(0)), C.entityOrNumberValueKeyFn, { }); $grammar.addRule("constant_Number", [], $locale._("one"), (() : (Ast.NumberValue)|null => new Ast.Value.Number(1)), C.entityOrNumberValueKeyFn, { }); } } $grammar.declareSymbol("constant_date_point"); $grammar.addRule("constant_date_point", [], $locale._("now"), (() : (Ast.Value)|null => C.makeDate(null, '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_date_point", [], $locale._("today"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('start_of', 'day'), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_date_point", [], $locale._("yesterday"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('start_of', 'day'), '-', new Ast.Value.Measure(1, 'day'))), C.valueKeyFn, { }); if (!$options.flags.turking) { $grammar.addRule("constant_date_point", [], $locale._("tomorrow"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('end_of', 'day'), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_date_point", [], $locale._("the end of the day"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('end_of', 'day'), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_date_point", [], $locale._("the end of the week"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('end_of', 'week'), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_date_point", [], $locale._("the end of the month"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('end_of', 'mon'), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_date_point", [], $locale._("the end of the year"), (() : (Ast.Value)|null => C.makeDate(new Ast.DateEdge('end_of', 'year'), '+', null)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_date_range"); $grammar.addRule("constant_date_range", [], $locale._("this week"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('start_of', 'week'), '+', null), C.makeDate(new Ast.DateEdge('end_of', 'week'), '+', null)]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("this month"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('start_of', 'mon'), '+', null), C.makeDate(new Ast.DateEdge('end_of', 'mon'), '+', null)]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("this year"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('start_of', 'year'), '+', null), C.makeDate(new Ast.DateEdge('end_of', 'year'), '+', null)]), C.valueArrayKeyFn, { }); if (!$options.flags.turking) { $grammar.addRule("constant_date_range", [], $locale._("last week"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('start_of', 'week'), '-', new Ast.Value.Measure(1, 'week'))!, C.makeDate(new Ast.DateEdge('start_of', 'week'), '+', null)]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("last month"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('start_of', 'mon'), '-', new Ast.Value.Measure(1, 'mon'))!, C.makeDate(new Ast.DateEdge('start_of', 'mon'), '+', null)]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("last year"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('start_of', 'year'), '-', new Ast.Value.Measure(1, 'year'))!, C.makeDate(new Ast.DateEdge('start_of', 'year'), '+', null)]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("next week"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('end_of', 'week'), '+', null), C.makeDate(new Ast.DateEdge('end_of', 'week'), '+', new Ast.Value.Measure(1, 'week'))!]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("next month"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('end_of', 'mon'), '+', null), C.makeDate(new Ast.DateEdge('end_of', 'mon'), '+', new Ast.Value.Measure(1, 'mon'))!]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("next year"), (() : ([Ast.Value, Ast.Value])|null => [C.makeDate(new Ast.DateEdge('end_of', 'year'), '+', null), C.makeDate(new Ast.DateEdge('end_of', 'year'), '+', new Ast.Value.Measure(1, 'year'))!]), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], "${year}", ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => { if (year.value <= 0) return null; return [ C.makeDate(C.makeJSDate(C.fixTwoYearNumber(year.value), 1, $loader), '+', null), C.makeDate(C.makeJSDate(C.fixTwoYearNumber(year.value), 1, $loader), '+', new Ast.Value.Measure(1, 'year'))! ]; }), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("${year} s"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => { if (year.value <= 0) return null; return [ C.makeDate(C.makeJSDate(C.fixTwoYearNumber(year.value), 1, $loader), '+', null), C.makeDate(C.makeJSDate(C.fixTwoYearNumber(year.value), 1, $loader), '+', new Ast.Value.Measure(10, 'year'))! ]; }), C.valueArrayKeyFn, { }); } $grammar.addRule("constant_date_range", [], $locale._("jan"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 1, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("january"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 1, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{jan|january} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 1, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("feb"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 2, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("february"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 2, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{feb|february} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 2, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("mar"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 3, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("march"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 3, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{mar|march} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 3, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("apr"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 4, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("april"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 4, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{apr|april} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 4, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("may"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 5, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("may of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 5, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("jun"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 6, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("june"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 6, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{jun|june} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 6, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("jul"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 7, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("july"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 7, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{jul|july} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 7, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("aug"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 8, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("august"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 8, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{aug|august} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 8, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("sep"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 9, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("sept"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 9, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("september"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 9, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{sep|sept|september} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 9, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("oct"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 10, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("october"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 10, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{oct|october} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 10, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("nov"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 11, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("november"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 11, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{nov|november} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 11, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("dec"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 12, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [], $locale._("december"), (() : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(null, 12, $loader)), C.valueArrayKeyFn, { }); $grammar.addRule("constant_date_range", [new $runtime.NonTerminal("constant_Number", "year", undefined)], $locale._("{dec|december} of ${year}"), ((year : Ast.NumberValue) : ([Ast.Value, Ast.Value])|null => C.makeMonthDateRange(year.value, 12, $loader)), C.valueArrayKeyFn, { }); $grammar.declareSymbol("constant_day_of_week"); $grammar.addRule("constant_day_of_week", [], $locale._("mon"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('monday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("monday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('monday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {mon|monday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('monday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {mon|monday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('monday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("tue"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('tuesday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("tuesday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('tuesday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {tue|tuesday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('tuesday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {tue|tuesday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('tuesday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("wed"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('wednesday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("wednesday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('wednesday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {wed|wednesday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('wednesday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {wed|wednesday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('wednesday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("thu"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('thursday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("thursday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('thursday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {thu|thursday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('thursday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {thu|thursday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('thursday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("fri"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('friday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("friday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('friday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {fri|friday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('friday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {fri|friday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('friday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("sat"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('saturday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("saturday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('saturday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {sat|saturday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('saturday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {sat|saturday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('saturday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("sun"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('sunday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("sunday"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('sunday', null), '+', null)), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("last {sun|sunday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('sunday', null), '-', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.addRule("constant_day_of_week", [], $locale._("next {sun|sunday}"), (() : (Ast.Value)|null => C.makeDate(new Ast.WeekDayDate('sunday', null), '+', new Ast.Value.Measure(1, 'week'))), C.valueKeyFn, { }); $grammar.declareSymbol("constant_Date"); if (!$options.flags.inference) { $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_date_point", undefined, undefined)], "${constant_date_point}", (($0 : Ast.Value) : (Ast.Value)|null => { return $0; }), C.valueKeyFn, { identity: (true) }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_day_of_week", undefined, undefined)], "${constant_day_of_week}", (($0 : Ast.Value) : (Ast.Value)|null => { return $0; }), C.valueKeyFn, { identity: (true) }); if (!$options.flags.turking) { $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_Measure_ms", "duration", undefined)], $locale._("${duration} ago"), ((duration : Ast.Value) : (Ast.Value)|null => C.makeDate(null, '-', duration)), C.valueKeyFn, { }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_Measure_ms", "duration", undefined), new $runtime.NonTerminal("constant_date_point", "pt", undefined)], $locale._("${duration} before ${pt}"), ((duration : Ast.Value, pt : Ast.Value) : (Ast.Value)|null => C.makeDate(pt, '-', duration)), C.valueKeyFn, { }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_Measure_ms", "duration", undefined)], $locale._("{${duration} from now|in ${duration}}"), ((duration : Ast.Value) : (Ast.Value)|null => C.makeDate(null, '+', duration)), C.valueKeyFn, { }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_Measure_ms", "duration", undefined), new $runtime.NonTerminal("constant_date_point", "pt", undefined)], $locale._("${duration} after ${pt}"), ((duration : Ast.Value, pt : Ast.Value) : (Ast.Value)|null => C.makeDate(pt, '+', duration)), C.valueKeyFn, { }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_Time", "time", undefined), new $runtime.NonTerminal("constant_date_point", "date", undefined)], $locale._("${time} on ${date}"), ((time : Ast.Value, date : Ast.Value) : (Ast.Value)|null => C.makeDateWithDateTime(date, time)), C.valueKeyFn, { }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("at_time", "time", undefined), new $runtime.NonTerminal("constant_date_point", "date", undefined)], $locale._("${date} ${time}"), ((time : Ast.Value, date : Ast.Value) : (Ast.Value)|null => C.makeDateWithDateTime(date, time)), C.valueKeyFn, { }); $grammar.addRule("constant_Date", [new $runtime.NonTerminal("constant_Time", "time", undefined)], "${time}", ((time : Ast.Value) : (Ast.Value)|null => C.makeDateWithDateTime(null, time)), C.valueKeyFn, { }); } } $grammar.declareSymbol("constant_Measure_ms"); if (!$options.flags.inference) { if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} ms"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ms', num)), C.valueKeyFn, { }); } if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} milliseconds"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ms', num)), C.valueKeyFn, { }); } if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} s"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('s', num)), C.valueKeyFn, { }); } if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} seconds"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('s', num)), C.valueKeyFn, { }); } $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} min"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('min', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} minutes"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('min', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} h"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('h', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} hours"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('h', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} days"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('day', num)), C.valueKeyFn, { }); if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} weeks"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('week', num)), C.valueKeyFn, { }); } if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} months"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('mon', num)), C.valueKeyFn, { }); } if (!$options.flags.turking) { $grammar.addRule("constant_Measure_ms", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} years"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('year', num)), C.valueKeyFn, { }); } } $grammar.declareSymbol("unit_Measure_ms"); $grammar.addRule("unit_Measure_ms", [], $locale._("minute"), (() : ('ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year')|null => 'min'), undefined, { }); $grammar.addRule("unit_Measure_ms", [], $locale._("hour"), (() : ('ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year')|null => 'h'), undefined, { }); $grammar.addRule("unit_Measure_ms", [], $locale._("day"), (() : ('ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year')|null => 'day'), undefined, { }); $grammar.addRule("unit_Measure_ms", [], $locale._("week"), (() : ('ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year')|null => 'week'), undefined, { }); $grammar.addRule("unit_Measure_ms", [], $locale._("month"), (() : ('ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year')|null => 'mon'), undefined, { }); $grammar.addRule("unit_Measure_ms", [], $locale._("year"), (() : ('ms'|'s'|'min'|'h'|'day'|'week'|'mon'|'year')|null => 'year'), undefined, { }); $grammar.declareSymbol("constant_Measure_byte"); if (!$options.flags.inference) { if (!$options.flags.turking) { $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} byte"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('byte', num)), C.valueKeyFn, { }); } $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kb"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('KB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} mb"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('MB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} gb"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('GB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} tb"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('TB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kilobytes"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('KB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} megabytes"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('MB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} gigabytes"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('GB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_byte", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} terabytes"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('TB', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_kg"); if (!$options.flags.inference) { if (!$options.flags.turking) { $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} grams"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('g', num)), C.valueKeyFn, { }); } $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kilograms"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('kg', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kg"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('kg', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} pounds"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('lb', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} lbs"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('lb', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} ounces"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('oz', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_kg", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} oz"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('oz', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_C"); if (!$options.flags.inference) { if (!$options.flags.turking) { $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} c"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('C', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} centigrade"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('C', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} celsius"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('C', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} degrees celsius"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('C', num)), C.valueKeyFn, { }); } $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} f"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('F', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} fahrenheit"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('F', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} degrees fahrenheit"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('F', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_C", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} degrees"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('defaultTemperature', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_m"); if (!$options.flags.inference) { if (!$options.flags.turking) { $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} m"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('m', num)), C.valueKeyFn, { }); } $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} meters"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('m', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} km"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('km', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kilometers"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('km', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} mi"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('mi', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} miles"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('mi', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} ft"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ft', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} in"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('in', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} inches"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('in', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cm"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('cm', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_m2"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_m2", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} square meters"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('m2', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m2", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} square km"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('km2', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m2", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} square kilometers"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('km2', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m2", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} square ft"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ft2', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m2", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} square feet"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ft2', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_m3"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cubic meters"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('m3', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cubic km"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('km3', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cubic kilometers"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('km3', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cubic ft"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ft3', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cubic feet"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ft3', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} liter"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('l', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} l"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('l', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cl"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('cl', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} hl"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('hl', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} ml"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('ml', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} floz"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('floz', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} gallon"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('gal', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} quart"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('qt', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} pint"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('pint', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} cup"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('cup', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} teaspoon"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('tsp', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_m3", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} tablespoon"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('tbsp', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_mps"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_mps", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} mph"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('mph', num)), C.valueKeyFn, { }); if (!$options.flags.turking) { $grammar.addRule("constant_Measure_mps", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} m/s"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('mps', num)), C.valueKeyFn, { }); } $grammar.addRule("constant_Measure_mps", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kph"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('kmph', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_mps", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} miles per hour"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('mph', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_mps", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kilometers per hour"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('kmph', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_mps", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} km/h"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('kmph', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_W"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_W", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} w"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('W', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_W", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} watt"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('W', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_W", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kw"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('kW', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_W", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} kilowatt"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('W', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_lx"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_lx", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} lx"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('lx', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_lm"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_lm", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} lm"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('lm', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_dB"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_dB", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} db"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('dB', num)), C.valueKeyFn, { }); $grammar.addRule("constant_Measure_dB", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} decibels"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('dB', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Measure_dBm"); if (!$options.flags.inference) { $grammar.addRule("constant_Measure_dBm", [new $runtime.NonTerminal("constant_Number", "num", undefined)], $locale._("${num} dbm"), ((num : Ast.NumberValue) : (Ast.Value)|null => C.addUnit('dBm', num)), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_Location"); if (!$options.flags.inference) { $grammar.addRule("constant_Location", [], $locale._("here"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('current_location'))), C.valueKeyFn, { }); if (!$options.flags.turking) { $grammar.addRule("constant_Location", [], $locale._("where i am now"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('current_location'))), C.valueKeyFn, { }); } $grammar.addRule("constant_Location", [], $locale._("the area"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('current_location'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("the city"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('current_location'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("home"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('home'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("my home"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('home'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("my neighborhood"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('home'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("work"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('work'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("my office"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('work'))), C.valueKeyFn, { }); $grammar.addRule("constant_Location", [], $locale._("my workplace"), (() : (Ast.LocationValue)|null => new Ast.Value.Location(new Ast.Location.Relative('work'))), C.valueKeyFn, { }); } $grammar.declareSymbol("constant_pairs"); $grammar.addRule("constant_pairs", [new $runtime.NonTerminal("constant_Any", "c1", undefined), new $runtime.NonTerminal("constant_Any", "c2", ["type" as ("type" extends keyof ReturnType ? string : void), 0, "type" as ("type" extends keyof ReturnType ? string : void)])], $locale._("${c1} and ${c2}"), ((c1 : Ast.Value, c2 : Ast.Value) : ([Ast.Value, Ast.Value])|null => { assert(c1.getType().equals(c2.getType())); if (c1.equals(c2)) return null; return [c1, c2]; }), C.valueArrayKeyFn, { }); $grammar.declareSymbol("constant_or_pairs"); $grammar.addRule("constant_or_pairs", [new $runtime.NonTerminal("constant_Any", "c1", undefined), new $runtime.NonTerminal("constant_Any", "c2", ["type" as ("type" extends keyof ReturnType ? string : void), 0, "type" as ("type" extends keyof ReturnType ? string : void)])], $locale._("${c1} or ${c2}"), ((c1 : Ast.Value, c2 : Ast.Value) : ([Ast.Value, Ast.Value])|null => { assert(c1.getType().equals(c2.getType())); if (c1.equals(c2)) return null; return [c1, c2]; }), C.valueArrayKeyFn, { }); $grammar.declareSymbol("constant_nor_pairs"); $grammar.addRule("constant_nor_pairs", [new $runtime.NonTerminal("constant_Any", "c1", undefined), new $runtime.NonTerminal("constant_Any", "c2", ["type" as ("type" extends keyof ReturnType ? string : void), 0, "type" as ("type" extends keyof ReturnType ? string : void)])], $locale._("${c1} nor ${c2}"), ((c1 : Ast.Value, c2 : Ast.Value) : ([Ast.Value, Ast.Value])|null => { assert(c1.getType().equals(c2.getType())); if (c1.equals(c2)) return null; return [c1, c2]; }), C.valueArrayKeyFn, { }); $grammar.declareSymbol("constant_String_ContextRef"); if ($options.flags.screen_selection) { $grammar.addRule("constant_String_ContextRef", [], $locale._("this"), (() : (Ast.ContextRefValue)|null => new Ast.Value.ContextRef('selection', Type.String)), C.valueKeyFn, { }); } if ($options.flags.screen_selection) { $grammar.addRule("constant_String_ContextRef", [], $locale._("the selection on the screen"), (() : (Ast.ContextRefValue)|null => new Ast.Value.ContextRef('selection', Type.String)), C.valueKeyFn, { }); } };