⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdgram.gdm

📁 Standard Grammar Toolkit
💻 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 + -