剛才不小心看到一个超级厉害的中国人!!!据说在开发中国的操作系统呢...

JerryOne 2005-03-26 10:33:48
主题:sepl语言的yacc&lex词法和语法定义文件
admin1000 [sjm@seekit-online.com] 发表于2005/02/19 15:30:26 阅读次数[77]


这是本站曾经设计的sepl.l和sepl.y文件,并用yacc&lex生成了c文件,完成了词法分析和语法分析器自动生成。因为没有最后采用,经网友提出yacc&lex不支持中文,特公布如下:
当然要让编译器使用,还要增加一些函数,可以参考编译原理这本书。

%{
/**************************************************************/
/* 2003.8.31 sepl.l XXX设计 */
/* sepl语言严格词法 */
/* 词法分析可以分析ASCII和unicode字符*/
/**************************************************************/
#include
%}
UniCHAR [\xC0-\xFF]
Separator [\(\)\{\}\[\]\;\,\.]
Delimiter1 [\=\>\<\+\-\*\/\%]
HexDigit [0-9a-fA-F]
Digit [0-9]
NonZeroDigit [1-9]
Letter [a-zA-Z_]
AnyButSlash [^\/]
AnyButAstr [^\*]
BLK [\b]
TAB [\t]
FF [\f]
ESCCHR [\\]
CR [\r]
LF [\n]

Escape [\\]([r]|[n]|[b]|[f]|[t]|[\\])
IdentChar [Letter|UniCHAR]
Identifier {IdentChar}({IdentChar}|{Digit})*

Comment1 [\/][\*][注释]({AnyButAstr}|[\*]{AnyButSlash})*[\*][\/]
Comment2 [\/][\/][注释].*
Comment ({Comment1}|{Comment2})
WhiteSpace ({CR}|{LF}|{FF}|{TAB}|{BLK}|[ ])

Dimension [\[]({WhiteSpace}|{Comment})*[\]]

DecimalNum {NonZeroDigit}{Digit}*
HexNum [0]([x]|[X]){HexDigit}{HexDigit}*
IntegerLiteral ({DecimalNum}|{HexNum})

Sign ([\+]|[\-])
SignedInt {Sign}?{Digit}+
Expo ([e]|[E])
ExponentPart {Expo}{SignedInt}?
Float1 {Digit}+[\.]{Digit}+?{ExponentPart}?
Float2 {Digit}+{ExponentPart}
Float3 {Digit}+
FloatingPoint ({Float1}|{Float2}|{Float3})

AnyChrChr [^\\']
AnyStrChr [^\\"]
Character [\']({Escape}|{AnyChrChr})[\']
String [\"]({Escape}|{AnyStrChr})*[\"]
Numeric ({IntegerLiteral}|{FloatingPoint})
Literal ({Numeric}|{Character}|{String})



%%

"真" {return LITERAL;}
"假" {return LITERAL;}

{Separator} {return yytext[0];}
{Delimiter1} {return yytext[0];}
{Dimension} {return OP_DIM;}

"==" {return OP_EQ;}
"<=" {return OP_LE;}
">=" {return OP_GE;}
"<>" {return OP_NE;}
"->" {return POINTERTO;}

"非" {return OP_LNOT;}
"并且" {return OP_LAND;}
"或" {return OP_LOR;}

"位与" {return OP_BITAND;}
"位或" {return OP_BITOR;}
"位异或" {return OP_BITXOR;}
"左移位数" {return OP_BITFHITFLEFT;}
"右移位数" {return OP_BITSHIFTRIGHT;}
"取反" {return OP_BITNOT;}


"布尔值" {return KW_BOOLEAN;}
"包含" {return KW_INCLUDE;}
"指针" {return KW_POINTER;}
"解释" {return KW_EXPLAIN;}
"函数" {return KW_FUNCTION;}
"传值" {return KW_BYVALUE;}
"传址" {return KW_BYADDRESS;}

"类" {return KW_CLASS;}
"公开数据" {return KW_PUBLICDATA;}
"公开函数" {return KW_PUBLICFUNCTION;}
"私有数据" {return KW_PRIVATEDATA;}
"私有函数" {return KW_PRIVATEFUNCTION;}
"变量定义" {return KW_VARIABLEDEFINE;}
"函数开始" {return KW_FUNCTIONBEGIN;}
"函数结束" {return KW_FUNCTIONEND;}

"字符" {return KW_CHAR;}
"字节" {return KW_BYTE;}
"小整数" {return KW_SHORTINTEGER;}
"小正整数" {return KW_SHORTUNSIGNEDINT;}
"整数" {return KW_INTEGER;}
"正整数" {return KW_UNSIGNEDINTEGER;}
"浮点数" {return KW_FLOAT;}
"双倍浮点数" {return KW_DOUBLEFLOAT;}
"超大浮点数" {return KW_SUPERFLOAT;}

"选择" {return KW_SWITCH;}
"匹配" {return KW_CASE;}
"其他" {return KW_DEFAULT;}
"如果" {return KW_IF;}
"那么" {return KW_THEN;}
"否则" {return KW_ELSE;}
"当" {return KW_WHEN;}
"循环" {return KW_LOOP;}
"直到" {return KW_UNTIL;}
"从" {return KW_FROM;}
"到" {return KW_TO;}
"跳转标号" {return KW_GOTO;}
"中断" {return KW_BREAK;}
"继续" {return KW_CONTINUE;}
"返回" {return KW_RETURN;}

"抛出异常" {return KW_THROW;}
"捕捉异常" {return KW_TRY;}
"捉到异常" {return KW_CATCH;}
"最后处理" {return KW_FINAL;}
"取地址" {return KW_ADDR;}
"指针值" {return KW_POINERTVALUE;}
"类型转换" {return KW_TYPECONVERT;}
"继承自" {return KW_INHERITFROM;}
"返回值类型" {return KW_RETURNTYPE;}
"新建" {return KW_NEW;}
"释放" {return KW_FREE;}
"类型是" {return OP_TYPENAMEIS;}

{Identifier} {return IDENTIFIER;}
{Literal} {return LITERAL;}

{WhiteSpace} {}
{Comment} {}
%%


%%


%{
...全文
465 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xy4Ever 2005-04-04
  • 打赏
  • 举报
回复
假的……
mahongxi 2005-04-01
  • 打赏
  • 举报
回复
yacc&lex 只是产生程序语言编译器的语法描述, 学习编译原理时用这2个程序实践不错.
与操作系统无关了.
amwicfai 2005-04-01
  • 打赏
  • 举报
回复
支持中国牛人
破法者 2005-03-31
  • 打赏
  • 举报
回复
有志气
中国人都要这样就好了, 呵呵
ERICLU5188 2005-03-31
  • 打赏
  • 举报
回复
强烈支持!
malingfeng 2005-03-30
  • 打赏
  • 举报
回复
TOMATOTO 2005-03-28
  • 打赏
  • 举报
回复
看不懂,不过有志气!
zheninchangjiang 2005-03-28
  • 打赏
  • 举报
回复
UP先
lxiaoa 2005-03-27
  • 打赏
  • 举报
回复
看不懂。
chinaandys 2005-03-27
  • 打赏
  • 举报
回复
支持中国牛人
JerryOne 2005-03-27
  • 打赏
  • 举报
回复
不知道是不是骗人的..
这个是他的网站:http://shouji88.com/os
wb1999424 2005-03-26
  • 打赏
  • 举报
回复
一样的是看不懂。
JerryOne 2005-03-26
  • 打赏
  • 举报
回复
偶是看不懂...
JerryOne 2005-03-26
  • 打赏
  • 举报
回复
/*------------------------------------------------------------------
* sepl 语法分析器
*sepl.y
*------------------------------------------------------------------
*/

%}


%token OP_DIM
%token OP_EQ OP_LE OP_GE OP_NE
%token OP_LNOT OP_LAND OP_LOR
%token OP_BITAND OP_BITOR OP_BITXOR OP_BITFHITFLEFT OP_BITSHIFTRIGHT OP_BITNOT
%token KW_BOOLEAN KW_INCLUDE KW_POINTER KW_EXPLAIN KW_FUNCTION KW_BYVALUE KW_BYADDRESS KW_RETURNTYPE
%token KW_CLASS KW_PUBLICDATA KW_PUBLICFUNCTION KW_PRIVATEDATA KW_PRIVATEFUNCTION
%token KW_VARIABLEDEFINE KW_FUNCTIONBEGIN KW_FUNCTIONEND
%token KW_CHAR KW_BYTE KW_SHORTINTEGER KW_SHORTUNSIGNEDINT KW_INTEGER KW_UNSIGNEDINTEGER
%token KW_FLOAT KW_DOUBLEFLOAT KW_SUPERFLOAT
%token KW_SWITCH KW_CASE KW_DEFAULT KW_IF KW_THEN KW_ELSE KW_WHEN KW_LOOP KW_UNTIL
%token KW_FROM KW_TO KW_GOTO KW_BREAK KW_CONTINUE KW_RETURN
%token KW_THROW KW_TRY KW_CATCH KW_FINAL KW_TYPECONVERT KW_INHERITFROM
%token KW_ADDR KW_POINERTVALUE KW_NEW KW_FREE
%token IDENTIFIER LITERAL KW_POINTERTO OP_TYPENAMEIS

%expect 139

%start CompilationUnit

%%
CompilationUnit
:IncludeStatments
|DeclarationStatments
|FunctionImplements
;

IncludeStatments
:IncludeStatment
|IncludeStatments IncludeStatment
;
IncludeStatment
:KW_INCLUDE LITERAL ';'
;
DeclarationStatments
:DeclarationStatment
|DeclarationStatments DeclarationStatment
;

DeclarationStatment
:VariableDefines
|FunctionDefines
|ClassDefines
;
VariableDefines
:VariableDefine
|VariableDefines VariableDefine
;
FunctionDefines
:FunctionDefine
|FunctionDefines FunctionDefine
;
ClassDefines
:ClassDefine
|ClassDefines ClassDefine
;
VariableDefine
:BasicTypeDefine
|ArrayTypeDefine
|PointerTypeDefine
;
BasicTypeDefine
:KW_EXPLAIN ':' IDENTIFIER ':' DataType ';'
|KW_EXPLAIN ':' IDENTIFIER ':' DataType '=' Expression ';'
;
ArrayTypeDefine
:KW_EXPLAIN ':' IDENTIFIER Dims ':' DataType ';'
|KW_EXPLAIN ':' IDENTIFIER Dims ':' DataType '=' VariableInitializer ';'
;

Dims
:OP_DIM
|Dims OP_DIM

VariableInitializer
: Expression
| '{' '}'
| '{' ArrayInitializers '}'
;

ArrayInitializers
: VariableInitializer
| ArrayInitializers ',' VariableInitializer
| ArrayInitializers ','
;

PointerTypeDefine
:KW_EXPLAIN ':' IDENTIFIER ':' KW_POINTER ':' DataType ';'
|KW_EXPLAIN ':' IDENTIFIER ':' KW_POINTER ':' DataType '=' Expression ';'
|KW_EXPLAIN ':' IDENTIFIER Dims ':' KW_POINTER ':' DataType ';'
;

DataType
:KW_BOOLEAN
|KW_CHAR
|KW_BYTE
|KW_SHORTINTEGER
|KW_SHORTUNSIGNEDINT
|KW_INTEGER
|KW_UNSIGNEDINTEGER
|KW_FLOAT
|KW_DOUBLEFLOAT
|KW_SUPERFLOAT
|IDENTIFIER
;
FunctionDefine
:KW_FUNCTION IDENTIFIER '(' KW_EXPLAIN ':' LITERAL ParameterList ')' KW_RETURNTYPE ':' DataType ';'
|KW_FUNCTION IDENTIFIER '.' IDENTIFIER '(' KW_EXPLAIN ':' LITERAL ParameterList ')' KW_RETURNTYPE ':' DataType ';'
;
ParameterList
:ParameterDefine
|ParameterList ParameterDefine
;

ParameterDefine
:KW_BYVALUE ':' KW_EXPLAIN ':' IDENTIFIER ':' DataType
|KW_BYADDRESS ':' KW_EXPLAIN ':' IDENTIFIER ':' DataType
;

ClassDefine
:KW_CLASS IDENTIFIER '{' ClassBody '}' ';'
|KW_CLASS IDENTIFIER KW_INHERITFROM IDENTIFIER '{' ClassBodys '}'
;

ClassBodys
:ClassBody
|ClassBodys ClassBody
;
ClassBody
:PublicData
|PublicFunction
|PrivateData
|PrivateFunction
;
PublicData
:KW_PUBLICDATA ':' VariableDefines
;
PublicFunction
:KW_PUBLICFUNCTION ':' FunctionDefines
;
PrivateData
:KW_PRIVATEDATA ':' VariableDefines
;
PrivateFunction
:KW_PRIVATEFUNCTION ':' FunctionDefines
;
FunctionImplements
:FunctionImplement
|FunctionImplements FunctionImplement
;
FunctionImplement
:FunctionDefine FunctionMainBody
|FunctionDefine LocalvariableDefine FunctionMainBody
;
LocalvariableDefine
:KW_VARIABLEDEFINE VariableDefines
;
FunctionMainBody
:KW_FUNCTIONBEGIN BlockStatements KW_FUNCTIONEND ';'
;
BlockStatements
:BlockStatement
|BlockStatements BlockStatement
;
BlockStatement
:EmptyStatement
|ExpressionStatement
|LabelStatement
|SwitchStatement
|IfThenStatement
|IfElseStatement
|WhenLoopStatement
|UntilLoopStatement
|NumberLoopStatement
|GotoStatement
|BreakStatement
|ContinueStatement
|ReturnStatement
|AssignStatement
|ThrowStatement
|TryExceptStatement
;

EmptyStatement
:';'
;
ExpressionStatement
:Expression
;
LabelStatement
:IDENTIFIER ':'
;
SwitchStatement
:KW_SWITCH '(' Expression ')' KW_CASE '{' CaseStatements '}'
;
CaseStatements
:CaseStatement
|CaseStatements CaseStatement

CaseStatement
:KW_CASE Expression ':' BlockStatement
|KW_DEFAULT ':' BlockStatement
;
IfThenStatement
:KW_IF Expression KW_THEN '{' BlockStatement '}'
;
IfElseStatement
:KW_IF Expression KW_THEN '{' BlockStatement '}' KW_ELSE '{' BlockStatement '}'
;
WhenLoopStatement
:KW_WHEN Expression KW_LOOP '{' BlockStatement '}'
;
UntilLoopStatement
:KW_LOOP '{' BlockStatement '}' KW_UNTIL Expression ';'
;
NumberLoopStatement
:KW_FROM IDENTIFIER '=' Expression KW_TO Expression KW_LOOP '{' BlockStatement '}'
;
GotoStatement
:KW_GOTO IDENTIFIER ';'
;
BreakStatement
:KW_BREAK ';'
;
ContinueStatement
:KW_CONTINUE ';'
;
ReturnStatement
:KW_RETURN Expression ';'
;
AssignStatement
:IDENTIFIER '=' Expression ';'
;
ThrowStatement
:KW_THROW Expression ';'
;
TryExceptStatement
: KW_TRY BlockStatement Catch
| KW_TRY BlockStatement Final
| KW_TRY BlockStatement Catch Final
;
Catch
:KW_CATCH '(' ParameterList ')' '{' BlockStatement '}'
;
Final
:KW_FINAL '{' BlockStatement '}'
;

Expression
:VariableValue
|ArithmeticExpression
|RelationExpression
|LogicalExpression
|BitExpression
|CallFunction
|ParentExpression
|OtherExpression
;
VariableValue
:IDENTIFIER '.' IDENTIFIER
|IDENTIFIER KW_POINTERTO IDENTIFIER
|IDENTIFIER '[' Expression ']'
;
ArithmeticExpression
:Expression Arithmetic2Operator Expression
|Arithmetic1Operator Expression
;

Arithmetic2Operator
:'+'
|'-'
|'*'
|'/'
|'%'
;
Arithmetic1Operator
:'+'
|'-'
;
RelationExpression
:Expression RelationOperator Expression
;
RelationOperator
:'<'
|OP_LE
|'>'
|OP_GE
|OP_EQ
|OP_NE
;
LogicalExpression
:Expression LogicalBetweenOperator Expression
|LogicalUnaryOperator Expression
;
LogicalBetweenOperator
:OP_LAND
|OP_LOR
|OP_TYPENAMEIS
;
LogicalUnaryOperator
:OP_LNOT
;
BitExpression
:Expression BitBetweenOperator Expression
|BitUnaryOperator Expression
;
BitBetweenOperator
:OP_BITAND
|OP_BITOR
|OP_BITXOR
|OP_BITFHITFLEFT
|OP_BITSHIFTRIGHT
;
BitUnaryOperator
:OP_BITNOT
;
CallFunction
:CallFunctionDefine
;

CallFunctionDefine
:KW_FUNCTION IDENTIFIER '(' CallParameterList ')'
|KW_FUNCTION IDENTIFIER '.' IDENTIFIER '(' CallParameterList ')'
|KW_FUNCTION IDENTIFIER KW_POINTERTO IDENTIFIER '(' CallParameterList ')'
;

CallParameterList
:CallParameterDefine
|CallParameterList ',' CallParameterDefine
;

CallParameterDefine
: KW_EXPLAIN ':' IDENTIFIER
| KW_EXPLAIN ':' IDENTIFIER
;
ParentExpression
:'(' Expression ')'
;
OtherExpression
:KW_ADDR '(' IDENTIFIER ')'
|KW_POINERTVALUE '(' IDENTIFIER ')'
|KW_NEW '(' IDENTIFIER ')'
|KW_FREE '(' IDENTIFIER ')'
|KW_TYPECONVERT '<' IDENTIFIER '>' '(' Expression ')'
;

%%

源码直接下载地址: https://pan.quark.cn/s/1c143f32ee83 华为作为全球领先的通信设备供应商,其产品系列广泛涉及各类网络设备,其中包括我们接下来要探讨的上网卡产品。华为上网卡驱动程序是一种专门为华为品牌旗下多种型号上网卡开发的软件模块,其主要功能在于保障这些设备与计算机操作系统的无缝对接。涉及的型号涵盖EC8189、EC226、EC169C、EC360、EC1260、EC1261、EC189、EC122、EC150以及EC168,这些均是由华为公司推出的移动宽带调制解调器,旨在通过移动网络实现便捷的互联网接入服务。驱动程序在计算机系统中的地位举足轻重,它充当了硬件设备与操作系统之间的媒介,负责对硬件设备发出的指令进行解读和执行,并将操作系统的指令传递给硬件设备。华为上网卡驱动程序的及时更新和精准安装是保障设备稳定运作和性能达到最优的关键因素。"天翼宽带安装程序V1.3.3.exe"是由中国电信提供的一个整合性软件包,内含华为上网卡的驱动程序及配套的管理工具。用户可借助此安装程序来执行华为上网卡的相关驱动安装及更新,同步享受中国电信的3G或4G网络服务。版本标识V1.3.3代表软件经过迭代优化,通常包含了对错误的修正、性能的改善以及新功能的引入。 "SetupInfo.xml"作为安装程序的配置文档,其中收录了安装流程中的各项设定和元数据信息,例如安装流程、文件定位、依赖条件等。它是安装程序在执行时参照和遵循的纲领,旨在确保安装流程按既定方案进行。文件名"CT_HW_EVDO_Driver"或许指向华为的EVDO(Evolution-Data Optimized)驱动程序,EVDO是一种3G无线通信规范,具备高速数据传输的特性。该驱动可...
内容概要:本文围绕【博士论文复现】基于小信号扫频辨识的光伏并网逆变器正负序交互稳定性分析展开,结合Matlab代码与Simulink仿真实现,系统研究了光伏并网逆变器在弱电网环境下的正负序阻抗建模与交互稳定性问题。重点采用小信号扫频法进行系统辨识,获取逆变器的正负序阻抗特性,并通过奈奎斯特稳定判据等方法分析其在不同电网强度下的稳定性表现。文中详细阐述了扫频激励信号的设计原理、频域响应数据的提取与处理流程、阻抗模型的拟合与验证方法等关键技术环节,实现了对逆变器在复杂电网条件下动态交互行为的精确刻画。该研究不仅深入揭示了新能源并网系统中潜在的宽频振荡机理,也为提升系统稳定性、优化控制器设计提供了坚实的理论依据和有效的技术手段。; 适合人群:具备电力电子、自动控制及电力系统基础知识,从事新能源并网、电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握基于小信号扫频法的电力电子装置阻抗建模方法;② 深入理解光伏并网逆变器在弱电网下的正负序交互稳定性机理;③ 学习并复现高水平博士论文中的核心仿真技术,提升科研实践能力;④ 为实际工程中新能源并网系统的稳定性分析、振荡问题诊断与控制器优化设计提供理论支持和技术参考。; 阅读建议:学习者应结合提供的Matlab代码与Simulink模型,深入理解扫频辨识的原理与实现步骤,重点关注锁相环、电流控制环等关键模块对系统阻抗特性的影响,并尝试改变系统参数以观察稳定性变化,从而加深对理论知识的掌握。

11,846

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧