实验三用JavaCC为C语言扩充SQL语句任务描述.docx
- 文档编号:8080869
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:24
- 大小:69.15KB
实验三用JavaCC为C语言扩充SQL语句任务描述.docx
《实验三用JavaCC为C语言扩充SQL语句任务描述.docx》由会员分享,可在线阅读,更多相关《实验三用JavaCC为C语言扩充SQL语句任务描述.docx(24页珍藏版)》请在冰豆网上搜索。
实验三用JavaCC为C语言扩充SQL语句任务描述
实验三:
用JavaCC为C语言扩充SQL语句
任务描述
本关任务:
在上一个用JavaCC编写的C语言语法分析器上扩充对SQL的支持。
相关知识
为了完成本关任务,你需要掌握:
1读懂c.jj的代码,2.理解需要支持的SQL语句。
c.jj的代码已经在文件中给出了,注意不要修改类的名称。
测试文件的内容结构如下所示,即在C语言的基础上增加了一条合法调用SQL的语句,在{}之间可以有一条或者多条合法的SQL语句,注意这里sql是关键字。
1./*...正常的C代码...*/
2.sql(SQL厝句};
3./*...正常的C代码...♦/
SQL扩充内容
SQL是一种关系数据库的查询语言,有其独特的语法规范,本次实验只要求大家能够完成最常用的几个句型。
SQL语言有其保留字(关键字),可以是大写,也可以是小写,(但是不要混着写),本次实验中涉及的有:
1.DELETE(delete)
2.FROM(from)
3.WHERE(where)
4.AND(and)
5.OR(or)
6.INSERT(insert)
7.INTO(into)
8.VALUES(values)
265.voidStructDeclarator():
()
266.{
267.(LOOKAHEAD(3)Declarator()|[Declarator()]ConstantExpression())
268.)
269.
269.voidEnumSpecifier():
()
270.{
271.
272.}
274.
273.voidEnumeratorList():
{}
274.{
275.EnumeratorO(","Enumerator())*
276.}
279.
277.voidEnumeratorO:
{}
278.{
279.
280.)
284.
281.voidDeclarator():
{}
282.{
283.[Pointer()]DirectDeclarator()
284.)
289.
285.voidDirectDeclarator():
(Tokent;)
286.{
287.(t=
293.
288.{if(!
(())&&((Boolean)()).booleanValue())(
289.addType(t.image);
290.}
291.}
292.|DeclaratorO"广)
299.
293.{();}
301.
294.([ConstantExpression()]"]"|
295.LOOKAHEAD(3)"("ParameterTypeList()|
296."("[IdentifierListO])*
297.{();)
298.)
307.
299.voidPointer():
{}
300.{
301."*"[TypeQualifierList()][Pointer()]
302.)
312.
303.voidTypeQualifierList():
{}
304.{
305.(TypeQualifier())+
306.}
317.
307.voidParameterTypeList():
{)
308.{
309.ParameterList()]
310.}
322.
311.voidParameterList():
{}
312.(
313.ParameterDeclaration()(LOOKAHEAD
(2)"ParameterDeclaration())*
314.)
327.
315.voidParameterDeclaration():
{)
316.{
317.DeclarationSpecifiers()(LOOKAHEAD(Declarator())Declarator()|
[Abst\fractDeclarator()])
318.)
332.
319.voidIdentifierList():
()
320.{
321.
322.}
337.
323.voidInitializer():
{}
324.{
325.(AssignmentExpression()|
326.InitializerListO"}")
327.)
343.
328.voidInitializerListO:
{}
329.{
330.Initializer()(LOOKAHEAD
(2)Initializer())*
331.)
348.
332.voidTypeName():
{}
333.{
334.SpecifierQualifierList()[Abst\fractDeclarator()]
352.
335.)
354・
355.voidAbst\fractDeclarator():
{)
356.{
357.(LOOKAHEAD(3)Pointer()|
358.[Pointer。
]DirectAbst\fractDeclarator())
359.}
360.
360.voidDirectAbst\fractDeclarator():
(}
361.{
362.(LOOKAHEAD
(2)Abst\fractDeclarator()")"|
363."["[ConstantExpression()]"]"|
364.[ParameterTypeListO]")")
366.
365.("["[ConstantExpression()]"]"|"("[ParameterTypeListO]")")*
366.)
369.
367.voidTypedefName():
()
368.{
369.
370.}
374.
371.voidStatement():
()
372.{
373.(LOOKAHEAD
(2)LabeledStatement()|
374.Expressionstatement()|
375.Compoundstatement()|
376.Selectionstatement()|
377.Iterationstatement()|
378.JumpStatement())
379.)
384.
380.voidLabeledStatement():
{)
386.{
387.(
|
388.
"Statement()|
389.
390.}
391・
392.voidExpressionStatement():
{}
393.{
394.[Expression()]
395.}
396.
397.voidCompoundstatement():
{}
398.{
399.[LOOKAHEAD(DeclarationList())DeclarationList()]
400.[StatementList()]
401.,,},,
402.}
403.
403.voidStatementList():
{}
404.{
405.(Statement())+
406.)
408.
407.voidSelectionStatement():
{}
408.{
409.(
[LOOKAHEAD
(2)
410.
411.)
414.
412.voidIterationStatement():
{}
413.{
414.(
415.
416.
Statement())
417.}
421.
418.voidJumpstatement():
{)
419.{
420.(
421.
422.
423.
424.)
429.
425.voidExpression():
{}
426.{
427.AssignmentExpression()(AssignmentExpression())♦
428.)
434.
429.voidAssignmentExpression():
{}
430.{
431.LOOKAHEAD(UnaryExpression()Assignmentoperator())UnaryExpression()
AssignmentOperator()AssignmentExpression()|
438.LOOKAHEAD(3)ConditionalExpression()
439.)
440.
440.voidAssignmentOperator():
{}
441.{
442.(,,=M||,7="|"%="|"+="||'•«=•'|'•»=•,|'•&=••|
“l=")
443.}
445.
444.voidConditionalExpression():
{)
445.{
446.LogicalORExpression()["?
"Expression()ConditionalExpression()]
447.}
45。
・
451.voidConstantExpression():
{}
452.{
453.ConditionalExpression()
454.)
455.
455.voidLogicalORExpression():
{}
456.{
457.LogicalANDExpression()["||"LogicalORExpression()]
458.)
460.
459.voidLogicalANDExpression():
()
460.{
461.InclusiveORExpression()["&&"LogicalANDExpression()]
462.}
465.
463.voidInclusiveORExpression():
()
464.{
465.ExclusiveORExpression()["|"InclusiveORExpression()]
466.}
470.
467.voidExclusiveORExpression():
{}
468.{
469.ANDExpression()["A"ExclusiveORExpression()]
470.}
475.
471.voidANDExpression():
()
472.{
473.EqualityExpression()[ANDExpression()]
474.}
480.
475.voidEqualityExpression():
{}
476.{
477.RelationalExpression()[("=="|,'!
=H)EqualityExpression()]
478.)
485.
479.voidRelationalExpression():
{}
480.{
481.ShiftExpression()[(|||)RelationalExpression()]
482.)
490.
483.voidShiftExpression():
()
484.{
485.AdditiveExpression()[(|)ShiftExpression()]
486.}
495.
487.voidAdditiveExpression():
()
488.{
489.MultiplicativeExpression()[("+"|)AdditiveExpression()]
490.}
500.
491.voidMultiplicativeExpression():
{)
492.{
493.CastExpression()[(||)MultiplicativeExpression()]
494.)
505.
495.voidCastExpression():
{)
496.{
497.(LOOKAHEAD(■■(■■TypeName()")"CastExpression())TypeName()")"CastExpression()|
498.UnaryExpression())
499.)
511.
500.voidUnaryExpression():
{}
501.{
502.(LOOKAHEAD(3)PostfixExpression()|
503."++"UnaryExpression()|
504.UnaryExpression()|
505.UnaryOperator()CastExpression()|
506.
507.}
520.
508.voidUnaryOperator():
()
509.{
510.(|||||)
511.)
525.
512.voidPostfixExpression():
{}
513.{
514.PrimaryExpressionO("["Expression()"]"|
515."("[LOOKAHEAD(ArgumentExpressionList())ArgumentExpressionList()]")"|
516.
517.
518."++”|
519.,,--H)*
520.}
535.
521.voidPrimaryExpressionO:
{}
522.{
523.(
524.Constant()|
525."("Expression()")")
526.}
542.
527.voidArgumentExpressionList():
()
528.{
529.AssignmentExpression()(AssignmentExpression())*
530.)
547.
531.voidConstant():
{}
532.{
533.
534.}
注意:
由于JavaCC官网的调整,原来在代码文件的提示中给出的已变更
为,同时,文件名也由C.jj变更为。
测试说明
对Tet3_l.c,Test3_2.c,Test3_3.c,Test3_4.c,Test3_5.c
Test3_Lc
#include
intmain(){printfC'Hello,world!
\nn);return0;
)
Test3_2.c
#include
intmain(intargc,char**argv)(
sql{
deletefromtablelwhereattrl=11;
DELETEFROMtablelWHEREattrl=11ANDattr2=7.2ORattr3="None"ANDattr4=1995;
};
return0;
}
Test3_3.c
#include
sql(
INSERTINTOtablelVALUES("EX123LMX”,2018,1,1,7.6
“Male”);
insertintotable2values("EX123LMX”,"None");insertintotable3values("EX123LMX”);
};
return0;
Test3_4.c
#include
intmain(intargc,char**argv){
sql{
SELECT*fromtablel;select*fromtable2WHEREattrl=1;
select*fromtable3WHEREattrl=0.5andattr2=J'XX
X"orattr2="YYY";
SELECTattr3fromtable4;
selectattr7?
attrS^attr9fromtableswhereattrl="
MALE11andattr2=18;
};
return0;
r
Test3_5.c
#includejstdio.h>
intmain(intargc,char**argv)(
sql{
UPDATEtable©setattr0=0;
updatetablelsetattrl=1.0whereattr2=18;
UPDATEtable2setattr3="X"whereattr4="MALE"andattr5=7.4orattr6=22;
};
printfCThereisabreakMneAn1^);
sql{
UPDATEtable©setattr0=0;
updatetablelsetattrl=1.0whereattr2=18;
UPDATEtable2setattr3="X"whereattr4="MALE"andattr5=7.4or=22;
};return0;
}
要求,给出完整的代码程序,并对测试结果进行截图。
作业上传到系统中。
9.SELECT(select)
10.UPDATE(update)
11.SET(set)
注意,下面出现的identifier为标识符,value为数字或字符串,[]表示里面的
内容出现0次或I次。
只需要完成下面给出的句子类型,其他的视为非法句子:
•DeleteStatement
1.•DELETE''FROM1identifier'WHERE'identifier=value['AND'|'OR'
identifier=value...];
•Insertstatement
0.'INSERT''INTO'identifier'VALUES*(value,value,...);
•Querystatement
0.•SELECT'*'FROM*identifier['WHERE'identifier=value['AND'|'OR'
identifier=value...]];
1.•SELECT1identifier[,identifier...]'FROM'identifier['WHERE'identifier=value['AND'|'OR'identifier=value...]];
•UpdateStatement
0.'UPDATE'identifier'SET'identifier=value['WHERE'identifier=value
['AND'|'OR*identifier=value...]];
为测试需要,当识别SQL语句时需要打印相应的字符串,例如测试程序如下:
^include
main(intargc,char**argv){sql{
COMMIT;
commitwork;
COMMITworkCOMMENT“hello,};return;
返回的结果应该是:
标准如下:
1.sql{};-->"Getsomesqlstatements.
2.XX-->"GetaXX."
其中XX可以是:
1.DeleteStatement
2.Insertstatement
3.Querystatement
4.UpdateStatement
编程要求
根据提示,在右侧编辑器补充代码。
注意,这里提供的代码与你第二关中完成的代码略有不同,若需要恢复最初的代码,请参考下面提供的:
1.PARSER_BEGIN(CSQLParser)
2.
2.import.*;
4.
3.publicclassCSQLParser(
6.
4.//Hastableforstoringtypedeftypes
5.privatestaticSettypes=newHashSet();
9.
6.//Stackfordeterminingwhentheparser
7.//isparsingatypdefdefinition.
8.privatestaticStacktypedefParsingstack=newStack();
13.
9.//Returnstrueifthegivenstringis
10.//atypedeftype.
11.pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 JavaCC 语言 扩充 SQL 语句 任务 描述