Граматика израза
Белешка
Microsoft Power Fx је ново име за језик формула за апликације са подлогом. Ови чланци су у изради док издвајамо језик из апликација на платну, интегришемо га са другим Microsoft Power Platform производима и чинимо га доступним у виду отвореног кода. Почните са Microsoft Power Fx прегледом за увод у језик.
Microsoft Power Fx заснива се на формулама које везују име за израз. Баш као у Excel радним листовима, како се долазне зависности од израза мењају, израз се прерачунава и вредност имена се мења, могуће прерачунавање у друге формуле.
Ова граматика покрива део израза формуле. Везивање са називом ради креирања формуле зависи од начина интеграције језика Power Fx. У радним листовима синтакса везивања није изложена, подразумева се локацијом на којој је израз написан – на пример унос =B1
у ћелију А1. У неким случајевима, уопште није потребно повезивање и Power Fx се користи као процењивач израза, на пример у подршци израчунатих колона табеле базе података. За Power Apps, повезивање се подразумева при раду у услузи Power Apps Studio са форматом сериализације заснованом на YAML за употребу ван услуге Power Apps Studio.
Граматичке конвенције
Лексичка и синтаксичка граматика представљене су употребом граматичких продукција. Свака граматичка продукција дефинише нетерминални симбол и могућа проширења тог нетерминалног симбола у секвенце нетерминалних или терминалних симбола. У граматичким продукцијама, нетерминални симболи се приказују курзивом, а терминални симболи се приказују фонтом фиксне ширине.
Прва линија граматичке продукције је име нетерминалног симбола који се дефинише, а иза њега стоји двотачка. Свака узастопна увучена линија садржи могуће проширење нетерминалног симбола датог као низ нетерминалних или терминалних симбола. На пример, продукција:
ГлобалИдентификатор:
[@
Идентификатор]
дефинише да се GlobalIdentifier састоји од токена [@
праћеног знаком Identifier, након чега следи токен ]
.
Када постоји више од једног могућег проширења нетерминалног симбола, алтернативе су наведене у засебним редовима. Индекс „opt“ се користи за означавање опционалног симбола. На пример, продукција:
ФунцтионЦалл:
ФунцтионИдентифиер(
ФунцтионАргументсопт)
је скраћеница за:
ФунцтионЦалл:
ФункцијаИдентификатор(
)
ФунцтионИдентифиер(
ФунцтионАргументс)
Алтернативе су обично наведене у одвојеним редовима, мада у случајевима када постоји много алтернатива, фраза „један од“ може претходити листи проширења датих у једном реду. Ово је једноставно скраћеница за навођење сваке од алтернатива у одвојеним редовима.
На пример, продукција:
ДецималДигит : један од
0
1
2
3
4
5
6
7
8
9
је скраћеница за:
ДецималДигит:
0
1
2
3
4
5
6
7
8
9
Лексичка анализа
Продукција лексичке јединице дефинише лексичку граматику за Power Fx израз. Сваки важећи Power Fx израз је у складу са овом граматиком.
ЕкпрессионУнит:
ЕкпрессиЕлементсопт
ЕкпрессионЕлементс:
Ексхибиционист
ИзразЕлементИзразиЕлементиопт
ЕкпрессионЕлемент:
Размаке
Коментар
На лексичком нивоу, Power Fx израз се састоји од тока елемената Whitespace, Comment и Token. Свака од ових продукција обрађена је у следећим одељцима. Само Токен елементи су значајни у синтаксичкој граматици.
Белина
Размак се користи за раздвајање коментара и токена унутар Power Apps документа.
Размак:
било који сепаратор Уникод простора (класа Zs)
било који сепаратор Уникод линије (класа Zl)
било који сепаратор Уникод пасуса (класа Zp)
Знак за хоризонталну табулацију (U+0009)
Знак за крај реда (U+000A)
Знак за вертикалну табулацију (U+000B)
Знак за крај пасуса (U+000C)
Знак за прелазак у нови ред (U+000D)
Знак за следећи ред (U+0085)
Коментари
Подржана су два облика коментара:
- Коментари у једном реду који почињу знаковима
//
и протежу се до краја изворне линије. - Разграничени коментари који почињу са знаковима
/*
а завршавају се знаковима*/
. Разграничени коментари могу да се протежу у више редова.
Напомена:
РаздвојенКоментар
СинглеЛинеКоментар
СинглеЛинеЦоммент:
//
СинглеЛинеЦомментЦхарацтерсопт
СинглеЛинеЦомментЦхарацтерс:
СинглеЛинеЦомментЦхарацтер
СинглеЛинеЦомментЦхарацтерСинглеЛинеЦомментЦхарацтерсопт
СинглеЛинеЦомментЦхарацтер:
било који Уникод знак осим NewLineCharacter
ДелимитедЦоммент:
/*
ДелимитедЦомментЦхарацтерсопт*/
ДелимитедЦомментЦхарацтерс:
РаздвојенКоментарЛикиНеЗвездица РаздвојенаКоментарКарактери се одлучују
*
ДелимитедЦомментАфтерАстерискЦхарацтерс
ДелимитедЦомментАфтерАстерискЦхарацтерс:
ДелимитедЦомментНеСласхЗвездицаКарактер РазграниченКоментарКарактери се одлучују
*
ДелимитедЦомментАфтерАстерискЦхарацтерс
ДелимитедЦомментЦхарацтерсНоАстериск:
било који Уникод знак осим * (звездица)
ДелимитедЦомментНоСласхАстерискЦхарацтер:
било који Уникод знак осим / (коса црта) или * (звездица)
Коментари нису угнежђени. Секвенце знакова /*
и */
немају посебно значење унутар коментара у једном реду, а секвенце знакова //
и /*
немају посебно значење унутар разграниченог коментара.
Коментари се не обрађују унутар ниски текст-литерал.
Следећи пример укључује два разграничена коментара:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Следећи примери укључују три коментара у једном реду:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Литерали
Литерал је представљање изворног кода неке вредности.
Буквално:
ЛогичкиБуквално
БројБуквалан
TextLiteral
Логички литерали
Логички литерал користи се за записивање вредности тачно и нетачно и стварање логичке вредности.
ЛогицалЛитерал : један од
true
false
Нумерички литерали
Бројчани литерал користи се за писање нумеричке вредности и стварање вредности броја.
НумберЛитерал:
ДецималДигитсекспонентДеоопт
ДецималДигитсДецималСепараторДецималДигитсоптЕxпонентПартопт
ДецималСепараторДецималДигитсЕxпонентПартопт
ДецималДигитс:
ДецималДигит
ДецималДигитсДецималДигит
ДецималДигит : један од
0
1
2
3
4
5
6
7
8
9
ЕкспонентПарт:
ЕкпонентИндицаторЗнакоптДецималДигитс
ЕкспонентИндицатор : један од
e
E
Текстуални литерали
Текстуални литерал користи се за писање низа Unicode знакова и стварање текстуалне вредности. Текстуални литерали су затворени у двоструким наводницима. Да бисте у текстуалну вредност укључили двоструке наводнике, поновите двоструке наводнике, као што је приказано у следећем примеру:
"The ""quoted"" text" // The "quoted" text
ТеxтЛитерал:
"
ТектЛитералЦхарацтерсопт"
ТеxтЛитералЦхарацтерс:
ТеxтЛитералЦхарацтерТеxтЛитералЦхарацтерсопт
ТеxтЛитералЦхарацтер:
ТеxтЦхарацтерНоДоублеQуоте
ДоублеQуотеЕсцапеСеqуенце
ТеxтЦхарацтерНоДоублеQуоте:
било која Уникод кодна тачка, осим двоструких наводника
ДоублеQуотеЕсцапеСеqуенце:
"
"
Идентификатори
Идентификатор је назив који се користи за упућивање на вредност. Идентификатори могу бити регуларни идентификатори или идентификатори са једноструким наводницима.
Идентификатор:
ИдентифиерНаме али не и оператор или ЦонтеxтКеywорд
ИдентифиерНаме:
ИдентифиерСтартЦхарацтерИдентифиерЦонтинуеЦхарацтерсопт
'
SingleQuotedIdentifier'
ИдентифиерСтартЦхарацтер:
ЛеттерЦхарацтер
_
ИдентифиерЦонтинуеЦхарацтер:
ИдентифиерСтартЦхарацтер
ДецималДигитЦхарацтер
Повезивање карактера
КомбиновањеКарактер
ФорматтингЦхарацтер
ИдентифиерЦонтинуеЦхарацтерс:
ИдентифиерЦонтинуеЦхарацтерИдентифиерЦонтинуеЦхарацтерсопт
ЛеттерЦхарацтер:
било који Уникод знак класе велико слово (Lu) или мало слово (Ll)
било који Уникод знак класе слово за наслов (Lt)
било који Уникод знак класе Модификатор слова (Lm) или Друго слово (Lo)
било који Уникод знак класе знак за број (Nl)
КомбиновањеКарактер:
било који Уникод знак класе Преклапајући знак (Mn) или Ознака комбиновања размака (Mc)
ДецималДигитЦхарацтер:
било који Уникод знак класе Децимална цифра (Nd)
Повезивањекарактер:
било који Уникод знак класе Интерпункцијски конектор (Pc)
ФорматтингЦхарацтер:
било који Уникод знак класе Формат (Cf)
Идентификатори са појединачним наводницима
Идентификатор једноструког наводника може садржати било који низ Уникод знакова који ће се користити као идентификатор, укључујући кључне речи, размаке, коментаре и операторе. Знакови са једноструким наводницима подржани су у излазном низу од два појединачна наводника.
СинглеQуотедИдентифиер:
СинглеQуотедИдентифиерЦхарацтерс
СинглеQуотедИдентифиерЦхарацтерс:
СинглеQуотедИдентифиерЦхарацтерСинглеQуотедИдентифиерЦхарацтерсопт
СинглеQуотедИдентифиерЦхарацтер:
ТекстЛиковиНеСинглЦитат
СинглеQуотеЕсцапеСеqуенце
ТеxтЦхарацтерсНоСинглеЦитат:
било који Уникод знак осим ' (U+0027)
СинглеQуотеЕсцапеСеqуенце:
'
'
Нејасан идентификатор
ДисамбигуатедИдентифиер:
ТаблеЦолумнИдентифиер
ГлобалИдентификатор
ТаблеЦолумнИдентифиер:
Идентификатор Идентификатор[@
...]
ГлобалИдентификатор:
[@
Идентификатор]
Контекстне кључне речи
КонтекстКључна реч:
Parent
Self
ThisItem
ThisRecord
Разликовање великих и малих слова
Power Apps идентификатори разликују велика и мала слова. Алат за креирање ће их аутоматски променити у правилну величину слова када се пише формула.
Знакови за раздвајање
ДецималСепаратор:
.
(тачка ) за језике који користе тачку као сепаратор за децималне бројеве, на пример 1.23
,
(зарез ) за језике који користе зарез као сепаратор за децималне бројеве, на пример 1,23
ЛистСепаратор:
,
(зарез ) ако је ДецималСепаратор ( .
тачка)
;
(тачка -зарез) ако је ДецималСепаратор ( ,
зарез)
ЦхаинингСепаратор:
;
(тачка -зарез ) ако је ДецималСепаратор ( .
тачка)
;;
(двострука тачка-зарез) ако је ДецималСепаратор ( ,
зарез)
Оператори
Оператори се користе у формулама за описивање операција које укључују један или више операнада. На пример, израз a + b
користи оператор +
да дода два операнда a
и b
.
Оператор:
Бинарни оператор
БинарyОператорРеqуиресWхитеспаце
ПрефиксОператор
ПрефикОператорРеqуиресБеоспаце
PostfixOperator
БинарниОператор : један од
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
БинарyОператорРеqуиресWхитеспаце:
And
Размак
Or
Размак
ПрефикОператорРекуиресВхитеспаце:
Not
Размак
Референтни оператер
РеференцеОператор: један од
.
!
Референца објекта
Референца:
БасеРеференце
БасеРеференце РеференцеОператор РеференцеЛист
БасеРеференце:
Идентификатор
ДисамбигуатедИдентифиер
ЦонтектКеиворд
РеференцеЛист:
Идентификатор
Идентификатор РеференцеОператор РеференцеЛист
Уграђени запис
Инлине Рецорд:
{
ИнлинеРецордЛист опт}
ИнлинеРецордЛист:
Идентификатор:
Израз
Идентификатор<а2>Израз<а3>ЛистСепаратор<а4>ИнлинеРецордЛист:
.........
Уграђена табела
ИнлинеТабле:
[
ИнлинеТаблеЛист<а9>опт]
ИнлинеТаблеЛист:
Израз
Израз<а16>ЛистСепаратор<а17>ИнлинеТаблеЛист......
Expression
Израз:
Буквално
Референце
ИнлинеРецорд
ИнлинеТабле
ФунцтионЦалл
(
Израз)
ПрефиксОператор<а34>Израз...
Екпрессион<а37>ПостфикОператор...
Израз<а40>БинариОператор<а41>Израз......
Уланчани изрази
ЦхаинедЕкпрессион:
Израз
Екпрессион<а4>ЦхаинингСепаратор<а5>ЦхаинедЕкпрессион<а6>опт......
Позив функције
ФунцтионЦалл:
ФунцтионИдентифиер<а11>ФунцтионАргументс<а12>опт(
...)
ФунцтионИдентифиер:
Идентификатор
Идентификатор<а19>Идентификатор функције.
...
Аргументи функције:
ЦхаинедЕкпрессион
ЦхаинедЕкпрессион<а26>ЛистСепаратор<а27>ФунцтионАргументс......