📄 stdgram.gdm
字号:
<GDML>
<!--
************************************************
************** STANDARD GRAMMAR ****************
************************************************
This grammar defines a set of standard syntatic
elements such as strings with escape codes,
several number formats, delimiters, etc.
-->
<GRAMMAR name=stdgram>
<!-- the symbol numeric ids start with 5000
===============================================-->
<TABLE idbase=5000>
<!-- symbols -->
period
question_mark
exclamation_point
comma
colon
semicolon
open_paren
close_paren
open_bracket
close_bracket
less_than
greater_than
open_brace
close_brace
dquote
squote
equal
plus
minus
mul
div
pound
at
percent
dollar
amp
hat
vertical
asterisk
back_slash
slash
tilde
Symbol
<!-- identifier -->
Identifier
<!-- numbers -->
Integer
HexInteger
DecInteger
SignedInteger
NumberSign
FloatNumber
dec_point
Number
ExpPoint
<!-- string -->
String
EscCode
esc_t
esc_n
esc_r
esc_open
str_open
str_close
</TABLE>
<!-- ERROR CODES -->
<TABLE idbase=15000>
Err_String
Err_StrEscCode
</TABLE>
<!-- DELIMITERS
===================================-->
<NT name=Delimiter rule=or ignore=yes>
<STRING match=" ">
<STRING match="\r">
<STRING match="\n">
<STRING match="\t">
</NT>
<NT name=Delimiters ignore=yes>
<SEQ> Delimiter </SEQ>
</NT>
<NT name=OptDelimiters rule=or ignore=yes>
Delimiters
<EMPTY>
</NT>
<!-- SYMBOLS
===================================-->
<!-- punctuations -->
<T name=period match="." desc="<period>">
<T name=question_mark match="?" desc="<question mark>">
<T name=exclamation_point match="!" desc="<exclamation mark>">
<T name=comma match="," desc="<comma>">
<T name=colon match=":" desc="<colon>">
<T name=semicolon match=";" desc="<semicolon>">
<!-- brackets -->
<T name=open_paren match="(" desc="<round bracket open>">
<T name=close_paren match=")" desc="<round bracket close>">
<T name=open_bracket match="[" desc="<square bracket open>">
<T name=close_bracket match="]" desc="<square bracket close>">
<T name=less_than match="<" desc="<angle bracket open>">
<T name=greater_than match=">" desc="<angle bracket close>">
<T name=open_brace match="{" desc="<fancy bracket open>">
<T name=close_brace match="}" desc="<fancy bracket close>">
<!-- quotes -->
<T name=dquote match="\"" desc="<double quote>">
<T name=squote match="'" desc="<single quote>">
<!-- math -->
<T name=equal match="=" desc="<equal>">
<T name=plus match="+" desc="<plus>">
<T name=minus match="-" desc="<minus>">
<T name=mul match="*" desc="<multiplication>">
<T name=div match="/" desc="<division>">
<!-- other -->
<T name=pound match="#" desc="<pound>">
<T name=at match="@" desc="<at>">
<T name=percent match="%" desc="<percent>">
<T name=dollar match="$" desc="<dollar>">
<T name=amp match="&" desc="<ampersand>">
<T name=hat match="^" desc="<hat>">
<T name=vertical match="|" desc="<vertical bar>">
<T name=asterisk match="*" desc="<asterisk>">
<T name=back_slash match="\\" desc="<back slash>">
<T name=slash match="/" desc="<slash>">
<T name=tilde match="~" desc="<tilde>">
<NT name=Symbol rule=or desc="<symbol>">
period
question_mark
exclamation_point
comma
colon
semicolon
open_paren
close_paren
open_bracket
close_bracket
less_than
greater_than
open_brace
close_brace
dquote
squote
equal
plus
minus
mul
div
pound
at
percent
dollar
amp
hat
vertical
asterisk
back_slash
slash
tilde
</NT>
<!-- SIMPLE IDENTIFIER
===================================-->
<NT name=Identifier desc="identifier">
<SEQ>
<BREAK name=Delimiter>
<BREAK name=Symbol>
<CHAR type=print>
</SEQ>
</NT>
<!-- NUMBERS
===================================-->
<NT name=Integer rule=or desc="unsigned integer">
HexInteger <!-- hex must be first to not match 0x as 0 -->
DecInteger
</NT>
<NT name=HexInteger desc="hex integer">
<B rule=or>
<STRING match="0x" case=no>
<STRING match="x" case=no>
</B>
<SEQ>
<CHAR type=hexdigit>
</SEQ>
</NT>
<NT name=DecInteger desc="unsigned decimal integer">
<SEQ>
<CHAR type=digit>
</SEQ>
</NT>
<NT name=SignedInteger desc="signed integer number">
NumberSign
DecInteger <!-- only decimal numbers can be signed -->
</NT>
<NT name=NumberSign rule=or desc="sign" >
plus
minus
<EMPTY> <!-- plus is optional -->
</NT>
<NT name=FloatNumber desc="signed floating point or integer number">
NumberSign
<B rule=or>
<B> <!-- 1.1 or 1 syntax -->
DecInteger
<B rule=or>
<B>
dec_point
<B rule=or>
DecInteger
<EMPTY> <!-- 1. syntax, no digits after the dec. point -->
</B>
</B>
<EMPTY> <!-- no floating point, integer number -->
</B>
</B>
<B> <!-- .1 syntax, no digits before the dec. point -->
dec_point DecInteger
</B>
</B>
</NT>
<T name=dec_point match="." desc="decimal point">
<!-- includes exponential numbers -->
<NT name=Number desc="signed integer, float or exponential number">
FloatNumber
<B rule=or> <!-- optional exponential part -->
<B>
ExpPoint
<B>
NumberSign
DecInteger <!-- only decimal numbers can be signed -->
</B>
</B>
<EMPTY> <!-- optional exp -->
</B>
</NT>
<NT name=ExpPoint rule=or>
<STRING match="e" case=no>
</NT>
<!-- STRING
===================================-->
<NT name=String desc="string">
StrOpen
<SEQ allowempty=yes> <!-- string content -->
<BREAK name=StrStop>
EscCode
<CHAR type=any>
</SEQ>
<B rule=or>
StrClose
Err_String
</B>
</NT>
<NT name=StrOpen ignore=yes>
str_open
</NT>
<NT name=StrStop rule=or ignore=yes>
StrClose
<STRING match="\r"> <!-- no \r \n in strings -->
<STRING match="\n">
</NT>
<NT name=StrClose ignore=yes>
str_close
</NT>
<NT name=EscCode desc="string escape code">
EscOpen
<B rule=or>
<B rule=or> <!-- terminal symbols in a separate block for optimization purposes -->
esc_t
esc_n
esc_r
esc_open
str_close
str_open
</B>
Integer <!-- character code -->
Err_StrEscCode
</B>
</NT>
<NT name=EscOpen ignore=yes>
esc_open
</NT>
<!-- string terminals -->
<T name=str_open match="\"">
<T name=str_close match="\"">
<T name=esc_open match="\\">
<T name=esc_t match="t" desc="tab code"> <!-- esc codes -->
<T name=esc_n match="n" desc="new line code">
<T name=esc_r match="r" desc="carriage return code">
<!-- string errors -->
<NT name=Err_StrEscCode recovery=yes desc="invalid code">
<EMPTY>
</NT>
<!-- skip until str_close -->
<NT name=Err_String recovery=yes desc="invalid string format">
<SEQ allowempty=yes>
<BREAK name=str_close>
<CHAR type=any>
</SEQ>
</NT>
</GRAMMAR>
</GDML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -